package catering.order; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.LocalDate; import java.util.ArrayList; import java.util.Optional; @Controller public class OrderController { private final CustomOrderRepository orderRepository; private final CustomCart cart; public OrderController(CustomOrderRepository orderRepository, CustomCart cart) { this.orderRepository = orderRepository; this.cart = cart; } @GetMapping("/orders") public String orders(Model model) { model.addAttribute("orders", orderRepository.getOrders()); model.addAttribute("total", orderRepository.getOrders().size()); return "orders"; } @GetMapping("/event") public String event(Model model) { model.addAttribute("orderType", cart.getOrderType()); model.addAttribute("items", cart.getProucts()); model.addAttribute("productForm", new ProductForm()); return "event"; } @PostMapping("/orders/remove") public String removeOrder(@RequestParam int orderID) { orderRepository.removeOrder(orderID); return "redirect:/orders"; } @PostMapping("/event/addProduct") public String addProduct(@ModelAttribute ProductForm productForm, Model model) { cart.addProduct(productForm.getProduct(), productForm.getNumber()); model.addAttribute("orderType", cart.getOrderType()); model.addAttribute("items", cart.getProucts()); model.addAttribute("productForm", new ProductForm()); return "redirect:/event"; } @PostMapping("/event/checkout") public String checkout(Model model) { CustomOrder myOrder = new CustomOrder( cart.getOrderType(), LocalDateTime.MIN, LocalDateTime.MAX, cart.getProucts(), false, Double.MAX_VALUE ); orderRepository.addOrder(myOrder); model.addAttribute("orders", orderRepository.getOrders()); model.addAttribute("total", orderRepository.getOrders().size()); cart.resetCart(); return "redirect:/orders"; } @PostMapping("/event/changeOrderType") public String changeOrderType(@RequestParam(name = "orderType") Optional optionalOrderType, Model model) { String orderType = optionalOrderType.orElse("FOO"); switch (orderType) { case "RaK": cart.setOrderType(CustomOrder.OrderType.RENT_A_COOK); break; case "EK": cart.setOrderType(CustomOrder.OrderType.EVENT_CATERING); break; case "SN": cart.setOrderType(CustomOrder.OrderType.SUSHI_NIGHT); break; default: } return "redirect:/event"; } @GetMapping("/orders/calender") public String calender(Model model) { LocalDate startDate = LocalDate.now(); ArrayList>> weeksOfMonth = new ArrayList>>(4); for (int i = 0; i < 4; i++) { ArrayList datesOfTheWeek = new ArrayList(7); LocalDate startOfWeek = startDate.plusDays(7*i); LocalDate endOfWeekDate = startOfWeek.plusDays(6); for (LocalDate date = startOfWeek; !date.isAfter(endOfWeekDate); date = date.plusDays(1)) { datesOfTheWeek.add(date); } ArrayList> week_to_add_to_month = new ArrayList>(7); for (LocalDate date : datesOfTheWeek) { ArrayList x = new ArrayList(2); x.add(Integer.toString(date.getDayOfMonth())); x.add("#OrdersToday"); week_to_add_to_month.add(x); } //datesOfTheWeek.clear(); weeksOfMonth.add(week_to_add_to_month); } // calender header with names of week LocalDate endOfWeekDate = startDate.plusDays(6); ArrayList dayNames = new ArrayList(7); for (LocalDate date = startDate; !date.isAfter(endOfWeekDate); date = date.plusDays(1)) { dayNames.add(date.getDayOfWeek().toString()); } model.addAttribute("weeksOfMonth", weeksOfMonth); model.addAttribute("dayNames", dayNames); return "orders_calender"; } }