From f20e90be2d964d64c2ed28df462e80f476269356 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Thu, 19 Feb 2026 22:06:36 +0100 Subject: [PATCH 1/3] salcalculator construktor --- .../idatt2003/g40/mappe/SaleCalculator.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java index e69de29..b45faa3 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java @@ -0,0 +1,19 @@ +package edu.ntnu.idi.idatt2003.g40.mappe; + +import java.math.BigDecimal; + +public class SaleCalculator implements TransactionCalculator { + + private static final BigDecimal COMMISSION_RATE = new BigDecimal("0.01"); + private static final BigDecimal TAX_RATE = new BigDecimal("0.30"); + + private final BigDecimal purchasePrice; + private final BigDecimal salesPrice; + private final BigDecimal quantity; + + public SaleCalculator(Share share) { + this.purchasePrice = share.getPurchasePrice(); + this.salesPrice = share.getStock().getSalesPrice(); + this.quantity = share.getQuantity(); + } +} \ No newline at end of file From b8a404e68393aa8442051044a8de91522bbf3024 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Thu, 19 Feb 2026 22:18:17 +0100 Subject: [PATCH 2/3] SaleClaculator methods --- .../idatt2003/g40/mappe/SaleCalculator.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java index b45faa3..b9736fd 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java @@ -16,4 +16,33 @@ public SaleCalculator(Share share) { this.salesPrice = share.getStock().getSalesPrice(); this.quantity = share.getQuantity(); } + + @Override + public BigDecimal calculateGross() { + return salesPrice.multiply(quantity); + } + + @Override + public BigDecimal calculateCommission() { + return calculateGross().multiply(COMMISSION_RATE); + } + + @Override + public BigDecimal calculateTax() { + BigDecimal purchaseCost = purchasePrice.multiply(quantity); + BigDecimal profit = calculateGross() + .subtract(calculateCommission()) + .subtract(purchaseCost); + + return profit.signum() > 0 + ? profit.multiply(TAX_RATE) + : BigDecimal.ZERO; + } + + @Override + public BigDecimal calculateTotal() { + return calculateGross() + .subtract(calculateCommission()) + .subtract(calculateTax()); + } } \ No newline at end of file From 0ee47c6b2766b47182a68fd51d6b158f39b9a451 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Thu, 19 Feb 2026 22:28:00 +0100 Subject: [PATCH 3/3] SaleCalculator documented --- .../idatt2003/g40/mappe/SaleCalculator.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java index b9736fd..ecc4242 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculator.java @@ -2,31 +2,57 @@ import java.math.BigDecimal; +/** + * Calculator for sale transactions. + *

+ * Calculates gross value, commission, tax and total sale value + * based on the share's purchase price, current sales price and quantity. + *

+ */ public class SaleCalculator implements TransactionCalculator { - private static final BigDecimal COMMISSION_RATE = new BigDecimal("0.01"); - private static final BigDecimal TAX_RATE = new BigDecimal("0.30"); + private static final BigDecimal COMMISSION_RATE = new BigDecimal("0.01"); // 1% + private static final BigDecimal TAX_RATE = new BigDecimal("0.30"); // 30% private final BigDecimal purchasePrice; private final BigDecimal salesPrice; private final BigDecimal quantity; + /** + * Creates a new {@code SaleCalculator} based on a share. + * + * @param share the share to base calculations on + */ public SaleCalculator(Share share) { this.purchasePrice = share.getPurchasePrice(); this.salesPrice = share.getStock().getSalesPrice(); this.quantity = share.getQuantity(); } + /** + * {@inheritDoc} + * Gross value = salesPrice * quantity. + */ @Override public BigDecimal calculateGross() { return salesPrice.multiply(quantity); } + /** + * {@inheritDoc} + * Commission = 1% of gross value. + */ @Override public BigDecimal calculateCommission() { return calculateGross().multiply(COMMISSION_RATE); } + /** + * {@inheritDoc} + * Tax = 30% of profit. + * Profit = gross - commission - (purchasePrice * quantity). + * If profit is negative or zero, tax is zero. + */ @Override public BigDecimal calculateTax() { BigDecimal purchaseCost = purchasePrice.multiply(quantity); @@ -39,6 +65,10 @@ public BigDecimal calculateTax() { : BigDecimal.ZERO; } + /** + * {@inheritDoc} + * Total value = gross - commission - tax. + */ @Override public BigDecimal calculateTotal() { return calculateGross()