From 456e30bf41d222536ef3f26828831e685ca2c697 Mon Sep 17 00:00:00 2001 From: Pramod Nuthakki Date: Thu, 17 Jul 2014 19:04:24 +0530 Subject: [PATCH] MIFOSX-1417 - corrected accruedTill date internally for calculations --- .../LoanAccrualWritePlatformServiceImpl.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java index 32cca51d8..020ae737a 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java @@ -93,13 +93,18 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat private String addPeriodicAccruals(final LocalDate tilldate, Collection loanScheduleAccrualDatas) { StringBuilder sb = new StringBuilder(); Set loansIds = new HashSet<>(); + LocalDate accruredTill = null; for (final LoanScheduleAccrualData accrualData : loanScheduleAccrualDatas) { try { if (!loansIds.contains(accrualData.getLoanId())) { if (accrualData.getDueDateAsLocaldate().isAfter(tilldate)) { - addAccrualTillSpecificDate(tilldate, accrualData); + if (accruredTill == null) { + accruredTill = accrualData.getAccruedTill(); + } + addAccrualTillSpecificDate(tilldate, accrualData, accruredTill); } else { addAccrualAccounting(accrualData); + accruredTill = accrualData.getDueDateAsLocaldate(); } } } catch (Exception e) { @@ -115,16 +120,15 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat return sb.toString(); } - private void addAccrualTillSpecificDate(final LocalDate tilldate, final LoanScheduleAccrualData accrualData) throws Exception { + private void addAccrualTillSpecificDate(final LocalDate tilldate, final LoanScheduleAccrualData accrualData, + final LocalDate accruredTill) throws Exception { int totalNumberOfDays = Days.daysBetween(accrualData.getFromDateAsLocaldate(), accrualData.getDueDateAsLocaldate()).getDays(); - LocalDate startDate = accrualData.getAccruedTill(); + LocalDate startDate = accruredTill; if (startDate == null) { startDate = accrualData.getFromDateAsLocaldate(); } int daysToBeAccrued = Days.daysBetween(startDate, tilldate).getDays(); - if(daysToBeAccrued < 1){ - return; - } + if (daysToBeAccrued < 1) { return; } int daysInSchedule = Days.daysBetween(accrualData.getFromDateAsLocaldate(), tilldate).getDays(); switch (accrualData.getRepaymentFrequency()) { case MONTHS: