package catering.order; import catering.staff.Employee; import org.javamoney.moneta.Money; import org.salespointframework.order.Cart; import javax.money.MonetaryAmount; import java.time.Duration; import java.time.LocalDateTime; import java.util.HashSet; import java.util.Set; public class CustomCart extends Cart { private Set staff; private OrderType orderType; private LocalDateTime start; private LocalDateTime finish; private final String formatterPattern; // Constructor public CustomCart(OrderType orderType, LocalDateTime start, LocalDateTime finish) { super(); this.staff = new HashSet<>(); this.orderType = orderType; this.start = start; this.finish = finish; this.formatterPattern = "dd.MM.yyyy, HH:mm 'Uhr'"; } /** * Adds an employee to the cart */ public boolean addEmployee(Employee employee) { for (Employee myEmployee : staff) { if (myEmployee.equals(employee)) { return false; } } return staff.add(employee); } public Set getStaff() { return staff; } public boolean removeEmployee(Employee employee) { for (Employee myEmployee : staff) { if (myEmployee.equals(employee)) { return staff.remove(myEmployee); } } return false; } /** * Add staff to order (analogous to cart.addItemsTo(order)) */ public CustomOrder addStaffTo(CustomOrder order) { for (Employee employee : staff) { order.addEmployee(employee); } return order; } public OrderType getOrderType() { return orderType; } public void setOrderType(OrderType orderType) { this.orderType = orderType; } public LocalDateTime getStart() { return start; } public void setStart(LocalDateTime start) { this.start = start; } /** * @return hours between start and finish multiplied with a rate */ public double getDurationInHoursTimesRate(double rate) { return (float) Duration.between(start, finish).getSeconds() / 3600 * rate; } public LocalDateTime getFinish() { return finish; } public void setFinish(LocalDateTime finish) { this.finish = finish; } public String getFormatterPattern() { return formatterPattern; } @Override public MonetaryAmount getPrice() { MonetaryAmount total = super.getPrice(); for (int i = 0; i < staff.size(); i++) { // TODO: get this from employee itself total = total.add(Money.of(getDurationInHoursTimesRate(12.0), "EUR")); } for (Employee employee : staff) { total = total.add(Money.of(getDurationInHoursTimesRate(12), "EUR")); // TODO: get from employee } return total; } @Override public void clear() { super.clear(); staff = new HashSet<>(); } }