From d4c897af8b5f7d31dedb4fcc260a0fa8c8a8669e Mon Sep 17 00:00:00 2001 From: Pramod Nuthakki Date: Fri, 18 Apr 2014 23:42:10 +0530 Subject: [PATCH] MIFOSX-1076 - Added recalculation of charges on updating amount --- .../portfolio/loanaccount/domain/Loan.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java index 44d5a8b80..d512fb99f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java @@ -1012,6 +1012,7 @@ public class Loan extends AbstractPersistable { if (!actualChanges.isEmpty()) { final boolean recalculateLoanSchedule = !(actualChanges.size() == 1 && actualChanges.containsKey("inArrearsTolerance")); actualChanges.put("recalculateLoanSchedule", recalculateLoanSchedule); + isChargesModified = true; } final String dateFormatAsInput = command.dateFormat(); @@ -1182,33 +1183,31 @@ public class Loan extends AbstractPersistable { } final String chargesParamName = "charges"; - if (command.parameterExists(chargesParamName)) { - if (isChargesModified) { - actualChanges.put(chargesParamName, getLoanCharges(possiblyModifedLoanCharges)); + if (isChargesModified) { + actualChanges.put(chargesParamName, getLoanCharges(possiblyModifedLoanCharges)); - actualChanges.put(chargesParamName, getLoanCharges(possiblyModifedLoanCharges)); - actualChanges.put("recalculateLoanSchedule", true); + actualChanges.put(chargesParamName, getLoanCharges(possiblyModifedLoanCharges)); + actualChanges.put("recalculateLoanSchedule", true); - for (final LoanCharge loanCharge : possiblyModifedLoanCharges) { - final BigDecimal amount = calculateAmountPercentageAppliedTo(loanCharge); - BigDecimal chargeAmt = BigDecimal.ZERO; - BigDecimal totalChargeAmt = BigDecimal.ZERO; - if (loanCharge.getChargeCalculation().isPercentageBased()) { - chargeAmt = loanCharge.getPercentage(); - if (loanCharge.isInstalmentFee()) { - totalChargeAmt = calculatePerInstallmentChargeAmount(loanCharge); - } - } else { - chargeAmt = loanCharge.amount(); - if (loanCharge.isInstalmentFee()) { - chargeAmt = chargeAmt.divide(BigDecimal.valueOf(repaymentScheduleDetail().getNumberOfRepayments())); - } + for (final LoanCharge loanCharge : possiblyModifedLoanCharges) { + final BigDecimal amount = calculateAmountPercentageAppliedTo(loanCharge); + BigDecimal chargeAmt = BigDecimal.ZERO; + BigDecimal totalChargeAmt = BigDecimal.ZERO; + if (loanCharge.getChargeCalculation().isPercentageBased()) { + chargeAmt = loanCharge.getPercentage(); + if (loanCharge.isInstalmentFee()) { + totalChargeAmt = calculatePerInstallmentChargeAmount(loanCharge); + } + } else { + chargeAmt = loanCharge.amount(); + if (loanCharge.isInstalmentFee()) { + chargeAmt = chargeAmt.divide(BigDecimal.valueOf(repaymentScheduleDetail().getNumberOfRepayments())); } - loanCharge.update(chargeAmt, loanCharge.getDueLocalDate(), amount, repaymentScheduleDetail().getNumberOfRepayments(), - totalChargeAmt); - validateChargeHasValidSpecifiedDateIfApplicable(loanCharge, getDisbursementDate(), getLastRepaymentPeriodDueDate()); } + loanCharge.update(chargeAmt, loanCharge.getDueLocalDate(), amount, repaymentScheduleDetail().getNumberOfRepayments(), + totalChargeAmt); + validateChargeHasValidSpecifiedDateIfApplicable(loanCharge, getDisbursementDate(), getLastRepaymentPeriodDueDate()); } }