diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculator.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculator.java index 69ae242..6cffe1c 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculator.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculator.java @@ -1,5 +1,67 @@ package edu.ntnu.idi.idatt2003.g40.mappe; -public class PurchaseCalculator { - +import java.math.BigDecimal; + + +/** + * Calculator for purchase transactions. + *

+ * Uses the share's purchase price and quantity to calculate: + * gross value, commission, tax and total cost. + *

+ */ +public class PurchaseCalculator implements TransactionCalculator { + + private static final BigDecimal COMMISSION_RATE = new BigDecimal("0.005"); // 0.5% + + private final BigDecimal purchasePrice; + private final BigDecimal quantity; + + /** + * Creates a new {@code PurchaseCalculator} based on a share. + * + * @param share the share to base calculations on + */ + public PurchaseCalculator(Share share) { + this.purchasePrice = share.getPurchasePrice(); + this.quantity = share.getQuantity(); + } + + /** + * {@inheritDoc} + * Gross value = purchasePrice * quantity. + */ + @Override + public BigDecimal calculateGross() { + return purchasePrice.multiply(quantity); + } + + /** + * {@inheritDoc} + * Commission = 0.5% of gross value. + */ + @Override + public BigDecimal calculateCommission() { + return calculateGross().multiply(COMMISSION_RATE); + } + + /** + * {@inheritDoc} + * No tax on purchases. + */ + @Override + public BigDecimal calculateTax() { + return BigDecimal.ZERO; + } + + /** + * {@inheritDoc} + * Total cost = gross + commission + tax. + */ + @Override + public BigDecimal calculateTotal() { + return calculateGross() + .add(calculateCommission()) + .add(calculateTax()); + } }