From 27fdc3ef022e6779fcb344547089969990a32d24 Mon Sep 17 00:00:00 2001 From: Mathis Kral Date: Mon, 20 Nov 2023 22:08:08 +0100 Subject: [PATCH] Add additional functionality to order package This adds improved product removal from cart, changeable order time and nice colors to order list. Works on #38 --- .../java/catering/order/OrderController.java | 50 +++++++++++++++---- src/main/resources/templates/event.html | 34 +++++++++++-- src/main/resources/templates/orders.html | 21 +++++--- 3 files changed, 84 insertions(+), 21 deletions(-) diff --git a/src/main/java/catering/order/OrderController.java b/src/main/java/catering/order/OrderController.java index 2f0cef4..8b63eff 100644 --- a/src/main/java/catering/order/OrderController.java +++ b/src/main/java/catering/order/OrderController.java @@ -1,17 +1,17 @@ package catering.order; +import jakarta.persistence.PostPersist; import org.salespointframework.catalog.Product; import org.salespointframework.inventory.UniqueInventory; import org.salespointframework.inventory.UniqueInventoryItem; -import org.salespointframework.order.Cart; -import org.salespointframework.order.Order; -import org.salespointframework.order.OrderManagement; +import org.salespointframework.order.*; import org.salespointframework.quantity.Quantity; import org.salespointframework.time.Interval; import org.salespointframework.useraccount.Role; import org.salespointframework.useraccount.UserAccount; import org.salespointframework.useraccount.web.LoggedIn; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.query.Procedure; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -19,8 +19,10 @@ import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.LocalDate; +import java.time.LocalTime; import java.time.temporal.ChronoUnit; import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalUnit; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -48,6 +50,8 @@ public class OrderController { model.addAttribute("orders", myOrders); model.addAttribute("total", myOrders.size()); + model.addAttribute("cancelled", OrderStatus.CANCELED); + model.addAttribute("completed", OrderStatus.COMPLETED); return "orders"; } @@ -58,6 +62,8 @@ public class OrderController { model.addAttribute("orders", myOrders); model.addAttribute("total", myOrders.size()); + model.addAttribute("cancelled", OrderStatus.CANCELED); + model.addAttribute("completed", OrderStatus.COMPLETED); return "orders"; } @@ -81,7 +87,7 @@ public class OrderController { @ModelAttribute("event") CustomCart initializeCart() { - return new CustomCart(OrderType.SOMETHING_ELSE, LocalDateTime.now(), LocalDateTime.now()); + return new CustomCart(OrderType.SOMETHING_ELSE, LocalDateTime.now().plusDays(7), LocalDateTime.now().plusDays(7)); } @GetMapping("/event") @@ -110,15 +116,13 @@ public class OrderController { @PreAuthorize("hasRole('CUSTOMER')") public String addProduct(@RequestParam("pid") Product product, @RequestParam("number") int number, @ModelAttribute("event") CustomCart cart) { - Quantity amount = Quantity.of(number); + Quantity amount = Quantity.of(number > 0 ? number : 1); Quantity invAmount = inventory.findByProduct(product).get().getQuantity(); // TODO ERROR HANDLING Quantity cartQuantity = cart.getQuantity(product); // check for possible miss-inputs if (amount.add(cartQuantity).isGreaterThan(invAmount)) { cart.addOrUpdateItem(product, cartQuantity.negate().add(invAmount)); - } else if (amount.add(cartQuantity).isLessThan(Quantity.of(0))) { - cart.addOrUpdateItem(product, cartQuantity.negate()); } else { cart.addOrUpdateItem(product, amount); } @@ -126,9 +130,37 @@ public class OrderController { return "redirect:/event"; } + @PostMapping("/event/removeProduct") + @PreAuthorize("hasRole('CUSTOMER')") + public String removeProduct(@RequestParam("itemId") String itemId, @ModelAttribute("event") CustomCart cart) { + cart.removeItem(itemId); + + return "redirect:/event"; + } + + @PostMapping("/event/changeDate") + @PreAuthorize("hasRole('CUSTOMER')") + public String changeDate(@RequestParam("startDate") LocalDate start, @RequestParam("startHour") Optional startHour, @RequestParam("finishDate") LocalDate finish, @RequestParam("finishHour") Optional finishHour, @ModelAttribute("event") CustomCart cart) { + + int unwrappedStartHour = startHour.orElse(cart.getStart().getHour()); + int unwrappedFinishHour = finishHour.orElse(cart.getFinish().getHour()); + finish = finish.isBefore(start) ? start : finish; + + LocalDateTime startTime = LocalDateTime.of(start, LocalTime.of(unwrappedStartHour, 0)); // TODO + LocalDateTime finishTime = LocalDateTime.of(finish, LocalTime.of(unwrappedFinishHour <= unwrappedStartHour ? unwrappedStartHour+1 : unwrappedFinishHour, 0)); // TODO + + cart.setStart(startTime); + cart.setFinish(finishTime); + return "redirect:/event"; + } + @PostMapping("/event/checkout") @PreAuthorize("hasRole('CUSTOMER')") - public String checkout(@ModelAttribute("event") CustomCart cart, @LoggedIn Optional userAccount, Model model) { + public String checkout(@ModelAttribute("event") CustomCart cart, @LoggedIn Optional userAccount) { + + if (cart.isEmpty()) { + return "redirect:/event"; + } return userAccount.map(account -> { CustomOrder myOrder = new CustomOrder(account.getId(), cart); @@ -137,8 +169,6 @@ public class OrderController { orderManagement.completeOrder(myOrder); cart.clear(); - List myOrders = orderManagement.findBy(account).stream().collect(Collectors.toList()); - return "redirect:/myOrders"; }).orElse("redirect:/event"); } diff --git a/src/main/resources/templates/event.html b/src/main/resources/templates/event.html index 3eba2eb..86e9004 100644 --- a/src/main/resources/templates/event.html +++ b/src/main/resources/templates/event.html @@ -6,11 +6,9 @@
- -
+ + + + +
+ + +
+ + +
Produkt Anzahl Preis
Sake Nigiri 200 10€ +
+ + +
+
@@ -58,7 +84,7 @@ Verfügbar
- +
diff --git a/src/main/resources/templates/orders.html b/src/main/resources/templates/orders.html index 1116d70..dbae821 100644 --- a/src/main/resources/templates/orders.html +++ b/src/main/resources/templates/orders.html @@ -20,12 +20,16 @@ - + @@ -37,15 +41,18 @@ Keine Rechnung verfügbar
- - +

+

+ + + - +

- +