From 827c4c5a0db45bb1cb33729553e8bccde1366804 Mon Sep 17 00:00:00 2001 From: Pramod Nuthakki Date: Fri, 8 Aug 2014 22:28:16 +0530 Subject: [PATCH] MIFOSX-1421 : corrected interest for extra repayments --- .../loanaccount/domain/LoanCharge.java | 6 +++--- .../domain/AbstractLoanScheduleGenerator.java | 18 +++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java index ffbfecc73..c291c7c8c 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java @@ -478,9 +478,9 @@ public class LoanCharge extends AbstractPersistable { } } this.loanInstallmentCharge.removeAll(remove); - /*while (index < loanChargePerInstallmentArray.length - 1) { - chargePerInstallments.add(loanChargePerInstallmentArray[index++]); - }*/ + while (index < loanChargePerInstallmentArray.length - 1) { + this.loanInstallmentCharge.add(loanChargePerInstallmentArray[index++]); + } } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java index ed4278460..9eaba302f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java @@ -315,7 +315,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener if (diffAmt != null && !diffAmt.isEmpty() && !periodStartDate.isAfter(LocalDate.now())) { Map processDetails = new TreeMap<>(); for (RecalculationDetail detail : diffAmt) { - if (periodStartDate.isBefore(detail.getStartDate()) && detail.isLatePayment()) { + if (!periodStartDate.isAfter(detail.getStartDate()) && detail.isLatePayment()) { if (processDetails.containsKey(detail.getToDate())) { RecalculationDetail recalculationDetail = processDetails.get(detail.getToDate()); RecalculationDetail updatedDetail = new RecalculationDetail(recalculationDetail.isLatePayment(), @@ -604,14 +604,18 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener if (installment.getDueDate().isBefore(LocalDate.now())) { LocalDate startDate = installment.getDueDate(); Money totalOutstanding = installment.getTotalOutstanding(currency); + boolean reduceStartDate = false; while (totalOutstanding.isGreaterThanZero() && startDate.isBefore(LocalDate.now())) { LocalDate recalculateFrom = getNextRestScheduleDate(startDate.minusDays(1), loanApplicationTerms, isHolidayEnabled, holidays, workingDays); LocalDate recalcualteTill = getNextRestScheduleDate(recalculateFrom, loanApplicationTerms, isHolidayEnabled, holidays, workingDays); + if (reduceStartDate) { + startDate = startDate.minusDays(1); + } applyRest(transactions, startDate, recalculateFrom, installment, loanRepaymentScheduleTransactionProcessor, currency, - loanApplicationTerms, isHolidayEnabled, holidays, workingDays); + loanApplicationTerms, isHolidayEnabled, holidays, workingDays, installments); totalOutstanding = installment.getTotalOutstanding(currency); if (totalOutstanding.isGreaterThanZero()) { Money latepaymentoutstanding = installment.getPrincipalOutstanding(currency); @@ -636,14 +640,15 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener latepaymentoutstanding); diffAmt.add(recalculationDetail); } - startDate = recalcualteTill; + startDate = recalculateFrom.plusDays(1); + reduceStartDate = true; } } if (!diffAmt.isEmpty()) { processRecalculate = true; - break; } + break; } if (processRecalculate) { @@ -658,7 +663,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener LoanRepaymentScheduleInstallment installment, final LoanRepaymentScheduleTransactionProcessor loanRepaymentScheduleTransactionProcessor, MonetaryCurrency currency, final LoanApplicationTerms loanApplicationTerms, final boolean isHolidayEnabled, final List holidays, - final WorkingDays workingDays) { + final WorkingDays workingDays, final List installments) { List transactions = new ArrayList<>(); Map recalculationDates = new HashMap<>(); for (LoanTransaction transaction : loanTransactions) { @@ -671,8 +676,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener workingDays)); } } - List installments = new ArrayList<>(1); - installments.add(installment); + loanRepaymentScheduleTransactionProcessor.handleRepaymentSchedule(transactions, currency, installments, installment, recalculationDates); }