From eb314bcae3b6fe3073cd9006badf647ef90fae10 Mon Sep 17 00:00:00 2001 From: CPlaiz Date: Sat, 13 Dec 2025 16:10:34 +0100 Subject: [PATCH] Add Order --- src/main/java/org/example/Constants.java | 8 ++ src/main/java/org/example/Order.java | 94 +++++++++++++++++++++ src/main/java/org/example/ShoppingCart.java | 12 +++ 3 files changed, 114 insertions(+) create mode 100644 src/main/java/org/example/Constants.java create mode 100644 src/main/java/org/example/Order.java diff --git a/src/main/java/org/example/Constants.java b/src/main/java/org/example/Constants.java new file mode 100644 index 0000000..f9a10a0 --- /dev/null +++ b/src/main/java/org/example/Constants.java @@ -0,0 +1,8 @@ +package org.example; + +public class Constants { + + public static final float lowVat = 0.07f; + public static final float highVat = 0.19f; + +} diff --git a/src/main/java/org/example/Order.java b/src/main/java/org/example/Order.java new file mode 100644 index 0000000..7a46f37 --- /dev/null +++ b/src/main/java/org/example/Order.java @@ -0,0 +1,94 @@ +package org.example; + +import java.util.ArrayList; +import java.util.List; + +public class Order { + + List products; + + public Order(List products) { + this.products = products; + } + + public float calculateTotalPriceWithVat() { + return calculateTotalPrice() + calculateTotalVat(); + } + + public float calculateTotalPrice() { + return getPrice(this.products); + } + + public float calculateTotalVat() { + return getVat(this.products); + } + + public float calculateShippingVat() { + float totalWeight = calculateWeight(this.products); + float totalPrice = calculateTotalPrice(); + float baseShippingCost = calculateBaseShippingCost(totalWeight, totalPrice); + List lowVatProducts = filterLowVatProducts(this.products); + List highVatProducts = filterHighVatProducts(this.products); + float lowVatPortion = getPrice(lowVatProducts) / totalPrice; + float highVatPortion = getPrice(highVatProducts) / totalPrice; + return baseShippingCost * lowVatPortion / (1 + Constants.lowVat) + baseShippingCost * highVatPortion / (1 + Constants.highVat); + } + + public float calculateBaseShippingCost(float totalWeight, float price) { + if (price >= 500f) + return 0f; + if (totalWeight <= 0.1f) + return 3.95f; + if (totalWeight <= 1f) + return 4.95f; + if (totalWeight <= 5f) + return 5.95f; + return 19.95f; + } + + + private List filterLowVatProducts(List products) { + List lowVatProducts = new ArrayList<>(); + for (Product product : products) { + if (product.vatPortion == Constants.lowVat) { + lowVatProducts.add(product); + } + } + return lowVatProducts; + } + + private List filterHighVatProducts(List products) { + List highVatProducts = new ArrayList<>(); + for (Product product : products) { + if (product.vatPortion == Constants.highVat) { + highVatProducts.add(product); + } + } + return highVatProducts; + } + + private float getPrice(List products) { + float total = 0; + for (Product product : products) { + total += product.price; + } + return total; + } + + private float getVat(List products) { + float total = 0; + for (Product product : products) { + total += product.getVat(); + } + return total; + } + + private float calculateWeight(List products) { + float totalWeight = 0; + for (Product product : products) { + totalWeight += product.weight; + } + return totalWeight; + } + +} diff --git a/src/main/java/org/example/ShoppingCart.java b/src/main/java/org/example/ShoppingCart.java index e55bea7..ca5c74d 100644 --- a/src/main/java/org/example/ShoppingCart.java +++ b/src/main/java/org/example/ShoppingCart.java @@ -25,4 +25,16 @@ public class ShoppingCart { public void clearProducts() { products.clear(); } + + public Order toOrder() { + List productsInOrder = new ArrayList<>(); + for (HashMap.Entry entry : products.entrySet()) { + Product product = entry.getKey(); + int quantity = entry.getValue(); + for (int i = 0; i < quantity; i++) { + productsInOrder.add(product); + } + } + return new Order(productsInOrder); + } }