diff --git a/src/main/java/catering/orderCatalog/CatalogController.java b/src/main/java/catering/orderCatalog/CatalogController.java index dc026d4..1ad1af3 100644 --- a/src/main/java/catering/orderCatalog/CatalogController.java +++ b/src/main/java/catering/orderCatalog/CatalogController.java @@ -17,12 +17,12 @@ import java.util.stream.Collectors; @Controller public class CatalogController { private final CustomCatalogEntryRepository catalogEntryRepository; - private Set productSet; + private Map productMap; private CustomCatalogEntry formCatalogEntry; private final UniqueInventory inventory; public CatalogController(CustomCatalogEntryRepository catalogEntryRepository, UniqueInventory inventory) { - productSet = new HashSet<>(); + productMap = new HashMap<>(); formCatalogEntry = new CustomCatalogEntry( OrderType.EVENT_CATERING, new HashMap(), @@ -39,8 +39,8 @@ public class CatalogController { } @GetMapping("/catalog_editor") - public String editCatalog(Model model) { - model.addAttribute("productSet", productSet); + public String editCatalog(Model model) {; + model.addAttribute("productMap", productMap); model.addAttribute("formCatalogEntry", formCatalogEntry); model.addAttribute("inventory", inventory.findAll().stream().collect(Collectors.toList())); return "catalog_editor"; @@ -48,14 +48,13 @@ public class CatalogController { @PostMapping("/catalog_editor/addCatalogEntry") public String addCatalogEntry(@RequestParam OrderType eventType, - @RequestParam int minimumTimePeriod, - @RequestParam int totalCost, - Model model) { + @RequestParam int minimumTimePeriod, + @RequestParam int totalCost, + Model model) { Map products = new HashMap(); - for (Product product : productSet) { - // TODO: Map each product to its quantity (Quantity) - products.put(product.getName(), Quantity.of(3)); + for (Product product : productMap.keySet()) { + products.put(product.getName(), productMap.get(product)); } catalogEntryRepository.save(new CustomCatalogEntry( @@ -68,8 +67,8 @@ public class CatalogController { new HashMap(), 0, 0); - productSet.clear(); - model.addAttribute("productSet", productSet); + productMap.clear(); + model.addAttribute("productMap", productMap); model.addAttribute("formCatalogEntry", formCatalogEntry); return "redirect:/catalog"; } @@ -79,16 +78,14 @@ public class CatalogController { public String removeEntry(@RequestParam long catalogEntryID) { Optional entry = catalogEntryRepository.findById(catalogEntryID); catalogEntryRepository.delete(catalogEntryRepository.findById(catalogEntryID).get()); - System.out.println(catalogEntryID); - // TODO: use catalogEntryRepository.findById(); to find the object return "redirect:/catalog"; } @PostMapping("/catalog_editor/addProduct") public String addProduct(@RequestParam("pid") Product product, @RequestParam("number") int number) { Quantity amount = Quantity.of(number); - productSet.add(new Product(product.getName(), product.getPrice())); - // TODO: formCatalogEntry.addProduct has to use Quantity amount instead of int number + productMap.compute(product, (key, existingQuantity) -> + (existingQuantity == null) ? amount : existingQuantity.add(amount)); formCatalogEntry.addProduct(product.getName(), amount); return "redirect:/catalog_editor"; } @@ -96,12 +93,11 @@ public class CatalogController { // Removes a product from the catalog_editor @PostMapping("/catalog_editor/removeProduct") public String removeProduct(@RequestParam String id, Model model) { - Iterator iterator = productSet.iterator(); - while (iterator.hasNext()) { - Product currentProduct = iterator.next(); - // TODO: Have a look at salespointframework.catalog.Product.ProductIdentifier, maybe use productSet.remove() - if (currentProduct.getId().toString().equals(id)) { + Iterator> iterator = productMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry currentProduct = iterator.next(); + if (currentProduct.getKey().getId().toString().equals(id)) { iterator.remove(); } } @@ -110,9 +106,9 @@ public class CatalogController { @PostMapping("/catalog_editor/addTime") public String addTime(@RequestParam int minimumTimePeriod, - @RequestParam OrderType eventType, - @RequestParam Map products, - Model model) { + @RequestParam OrderType eventType, + @RequestParam Map products, + Model model) { formCatalogEntry.setMinimumTimePeriod(minimumTimePeriod); model.addAttribute("formCatalogEntry", formCatalogEntry); return "redirect:/catalog_editor"; diff --git a/src/main/java/catering/orderCatalog/CustomCatalogEntry.java b/src/main/java/catering/orderCatalog/CustomCatalogEntry.java index af5ebee..ae4cc60 100644 --- a/src/main/java/catering/orderCatalog/CustomCatalogEntry.java +++ b/src/main/java/catering/orderCatalog/CustomCatalogEntry.java @@ -4,6 +4,7 @@ import catering.order.OrderType; import jakarta.persistence.*; import org.salespointframework.quantity.Quantity; +import java.util.Iterator; import java.util.Map; @Entity @@ -47,6 +48,12 @@ public class CustomCatalogEntry { } public int getTotalCost() { + totalCost = 0; + Iterator iterator = products.values().iterator(); + while (iterator.hasNext()) { + Quantity currentQuantity = iterator.next(); + totalCost += currentQuantity.getAmount().intValue(); + } return totalCost; } diff --git a/src/main/java/catering/orderCatalog/CustomCatalogEntryDataInitializer.java b/src/main/java/catering/orderCatalog/CustomCatalogEntryDataInitializer.java index c9ed444..4ea5229 100644 --- a/src/main/java/catering/orderCatalog/CustomCatalogEntryDataInitializer.java +++ b/src/main/java/catering/orderCatalog/CustomCatalogEntryDataInitializer.java @@ -22,22 +22,21 @@ public class CustomCatalogEntryDataInitializer implements DataInitializer { @Override public void initialize() { - Map products = new HashMap<>(); + Map products = new HashMap<>(); CurrencyUnit currencyUnit = Monetary.getCurrency("EUR"); products.put(new Product("Brötchen", Monetary.getDefaultAmountFactory() .setCurrency(currencyUnit) .setNumber(1) - .create()), 30); + .create()), Quantity.of(30)); products.put(new Product("Kerze", Monetary.getDefaultAmountFactory() .setCurrency(currencyUnit) .setNumber(2) - .create()), 30); + .create()), Quantity.of(20)); Map productsFormatted = new HashMap(); for (Product product : products.keySet()) { - productsFormatted.put(product.getName(), Quantity.of(5)); + productsFormatted.put(product.getName(), products.get(product)); } - System.out.println(productsFormatted); catalogEntryRepository.save( new CustomCatalogEntry( OrderType.EVENT_CATERING, diff --git a/src/main/resources/templates/catalog_editor.html b/src/main/resources/templates/catalog_editor.html index fed0a98..6cade31 100644 --- a/src/main/resources/templates/catalog_editor.html +++ b/src/main/resources/templates/catalog_editor.html @@ -36,8 +36,9 @@ Menge Stückpreis - + + €