diff --git a/src/main/java/catering/order/OrderController.java b/src/main/java/catering/order/OrderController.java index 6d7bff7..96d7b91 100644 --- a/src/main/java/catering/order/OrderController.java +++ b/src/main/java/catering/order/OrderController.java @@ -11,6 +11,7 @@ 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.domain.Sort; import org.springframework.data.jpa.repository.query.Procedure; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; @@ -23,10 +24,7 @@ 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; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; @@ -196,4 +194,54 @@ public class OrderController { } return "redirect:/event"; } + + @GetMapping("/orders/calender") + public String calender(Model model) { + ArrayList> datesOfMonth = new ArrayList>(28); + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusDays(27).withHour(23).withMinute(59).withSecond(59); // FIXME: set me to end of day + LocalDate startDate = startDateTime.toLocalDate(); + LocalDate endDate = endDateTime.toLocalDate(); + + // create all dates of the calender + for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { + ArrayList x = new ArrayList(2); + x.add(Integer.toString(date.getDayOfMonth())); + x.add(date.toString()); + datesOfMonth.add(x); + } + + // add each order overlapping with the calender to the days it overlaps with + for (CustomOrder order : this.orderManagement.findBy(Interval.from(startDateTime).to(endDateTime))) { + int start_index_inclusive = Math.max((int) startDate.until(order.getStart().toLocalDate(), ChronoUnit.DAYS),0); + int end_index_exclusive = Math.min((int) startDate.until(order.getFinish().toLocalDate(), ChronoUnit.DAYS), 27) + 1; + String order_id = Objects.requireNonNull(order.getId()).toString(); + for (int i = start_index_inclusive; i < end_index_exclusive; i++) { + datesOfMonth.get(i).add(order_id); + } + } + + // get names of weekdays for table header starting with the current day + 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()); + } + + ArrayList>> weeksOfMonth = new ArrayList>>(); + for (int i = 0; i < 4; i++) { + weeksOfMonth.add(new ArrayList>(7)); + for (int j = 0; j < 7; j++) { + weeksOfMonth.get(i).add(new ArrayList()); + weeksOfMonth.get(i).get(j).addAll(datesOfMonth.get( + (i==0) ? j : (j==0) ? i : i*j + ) + ); + } + } + + model.addAttribute("weeksOfMonth", weeksOfMonth); + model.addAttribute("dayNames", dayNames); + return "orders_calender"; + } }