diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index 85725d2de..dae03ddbf 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -1683,7 +1683,7 @@ public class Loan extends AbstractPersistable { public void updateDisbursementDetails(final JsonCommand jsonCommand, final Map actualChanges) { List disbursementList = fetchDisbursementIds(); - List loanChargeIds = fetchLoanChargeIds(); + List loanChargeIds = fetchLoanTrancheChargeIds(); int chargeIdLength = loanChargeIds.size(); String chargeIds = null; // From modify application page, if user removes all charges, we should @@ -1807,10 +1807,12 @@ public class Loan extends AbstractPersistable { } } - private List fetchLoanChargeIds() { + private List fetchLoanTrancheChargeIds() { List list = new ArrayList<>(); for (LoanCharge charge : this.charges) { - list.add(charge.getId()); + if (charge.isTrancheDisbursementCharge() && charge.isActive()) { + list.add(charge.getId()); + } } return list; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index ba0ee0aa8..d0712ced8 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -1027,6 +1027,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final MonetaryCurrency monCurrency = new MonetaryCurrency(this.currency.code(), this.currency.decimalPlaces(), this.currency.currencyInMultiplesOf()); BigDecimal totalPrincipalDisbursed = BigDecimal.ZERO; + BigDecimal disbursementChargeAmount = this.totalFeeChargesDueAtDisbursement; if (disbursementData == null || disbursementData.isEmpty()) { periods.add(disbursementPeriod); totalPrincipalDisbursed = Money.of(monCurrency, this.disbursement.amount()).getAmount(); @@ -1034,6 +1035,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { if (!this.disbursement.isDisbursed()) { excludePastUndisbursed = false; } + for(DisbursementData disbursementData : disbursementData){ + if(disbursementData.getChargeAmount() != null){ + disbursementChargeAmount = disbursementChargeAmount.subtract(disbursementData.getChargeAmount()); + } + } this.outstandingLoanPrincipalBalance = BigDecimal.ZERO; } @@ -1072,11 +1078,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { principal = principal.add(data.amount()); if (data.getChargeAmount() == null) { final LoanSchedulePeriodData periodData = LoanSchedulePeriodData.disbursementOnlyPeriod( - data.disbursementDate(), data.amount(), BigDecimal.ZERO, data.isDisbursed()); + data.disbursementDate(), data.amount(), disbursementChargeAmount, data.isDisbursed()); periods.add(periodData); } else { final LoanSchedulePeriodData periodData = LoanSchedulePeriodData.disbursementOnlyPeriod( - data.disbursementDate(), data.amount(), data.getChargeAmount(), data.isDisbursed()); + data.disbursementDate(), data.amount(), disbursementChargeAmount.add(data.getChargeAmount()), data.isDisbursed()); periods.add(periodData); } this.outstandingLoanPrincipalBalance = this.outstandingLoanPrincipalBalance.add(data.amount());