diff --git a/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java b/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java index 4018da2..c255340 100644 --- a/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java +++ b/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java @@ -73,13 +73,33 @@ public BigDecimal getOwnedAmount(String symbol) { .reduce(BigDecimal.ZERO, BigDecimal::add); } + public BigDecimal getOwnedAmount() { + return getShares().stream().map(s -> s.getQuantity()) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + public BigDecimal getProfitFromStock(String symbol) { return getShares(symbol).stream().map(s -> s.getProfit()).reduce(BigDecimal.ZERO, BigDecimal::add); } + public BigDecimal getProfitFromStock() { + return getShares().stream().map(s -> s.getProfit()).reduce(BigDecimal.ZERO, BigDecimal::add); + } + public BigDecimal getChangeFromStock(String symbol) { BigDecimal profitTotal = getProfitFromStock(symbol); - BigDecimal costTotal = getShares(symbol).stream().map(s -> s.getPurchasePrice().multiply(s.getQuantity())) + BigDecimal costTotal = getShares(symbol).stream().map(s -> s.getTotalPurchasePrice()) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + if (costTotal.compareTo(BigDecimal.ZERO) <= 0) + return BigDecimal.ZERO; + + return profitTotal.divide(costTotal, 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); + } + + public BigDecimal getChangeFromStock() { + BigDecimal profitTotal = getProfitFromStock(); + BigDecimal costTotal = getShares().stream().map(s -> s.getTotalPurchasePrice()) .reduce(BigDecimal.ZERO, BigDecimal::add); if (costTotal.compareTo(BigDecimal.ZERO) <= 0) diff --git a/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Share.java b/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Share.java index a00a65f..186cb43 100644 --- a/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Share.java +++ b/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Share.java @@ -1,6 +1,7 @@ package edu.ntnu.idi.idatt.model.portfolio; import java.math.BigDecimal; +import java.math.RoundingMode; import edu.ntnu.idi.idatt.model.market.Stock; import edu.ntnu.idi.idatt.service.transaction.SaleCalculator; @@ -52,9 +53,16 @@ public BigDecimal getPurchasePrice() { } // TODO: JAVADOCS, JUNIT + public BigDecimal getTotalPurchasePrice() { + return purchasePrice.multiply(quantity); + } + public BigDecimal getProfit() { - BigDecimal totalCost = purchasePrice.multiply(quantity); - return new SaleCalculator(this).calculateGross().subtract(totalCost); + return new SaleCalculator(this).calculateGross().subtract(getTotalPurchasePrice()); + } + + public BigDecimal getProfitPercent() { + return getProfit().divide(getTotalPurchasePrice(), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } } diff --git a/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java index 102f1a5..47819d5 100644 --- a/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java +++ b/src/main/java/edu/ntnu/idi/idatt/service/transaction/SaleCalculator.java @@ -3,6 +3,7 @@ import edu.ntnu.idi.idatt.model.portfolio.Share; import java.math.BigDecimal; +import java.math.RoundingMode; /** * SaleCalculator class @@ -78,7 +79,7 @@ public BigDecimal calculateTotal() { // TODO: Javadocs, junit public BigDecimal calculateProfit() { - return calculateTotal().divide(purchasePrice.multiply(quantity)); + return calculateGross().subtract(purchasePrice.multiply(quantity)); } }