diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java index 063bad88c..9689baf26 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java @@ -191,10 +191,8 @@ public class LoanUtilService { if (calculatedRepaymentsStartingFromDate == null && !calendar.getCalendarHistory().isEmpty() && calendarHistoryDataWrapper != null) { - for (CalendarHistory calendarHistory : calendarHistoryDataWrapper.getCalendarHistoryList()) { - calculatedRepaymentsStartingFromDate = calendarHistory.getStartDateLocalDate(); - break; - } + // generate the first repayment date based on calendar history + calculatedRepaymentsStartingFromDate = generateCalculatedRepaymentStartDate(calendarHistoryDataWrapper, actualDisbursementDate, loan); return calculatedRepaymentsStartingFromDate; } @@ -218,6 +216,26 @@ public class LoanUtilService { } return calculatedRepaymentsStartingFromDate; } + + private LocalDate generateCalculatedRepaymentStartDate(final CalendarHistoryDataWrapper calendarHistoryDataWrapper, + LocalDate actualDisbursementDate, Loan loan) { + final LoanProductRelatedDetail repaymentScheduleDetails = loan.repaymentScheduleDetail(); + final WorkingDays workingDays = this.workingDaysRepository.findOne(); + LocalDate calculatedRepaymentsStartingFromDate = null; + + List historyList = calendarHistoryDataWrapper.getCalendarHistoryList() ; + + if( historyList!=null && historyList.size() > 0) { + if(repaymentScheduleDetails != null){ + final Integer repayEvery = repaymentScheduleDetails.getRepayEvery(); + final String frequency = CalendarUtils.getMeetingFrequencyFromPeriodFrequencyType(repaymentScheduleDetails + .getRepaymentPeriodFrequencyType()); + calculatedRepaymentsStartingFromDate = CalendarUtils.getNextRepaymentMeetingDate(historyList.get(0).getRecurrence(), historyList.get(0).getStartDateLocalDate(), + actualDisbursementDate, repayEvery, frequency, workingDays); + } + } + return calculatedRepaymentsStartingFromDate; + } public Set fetchDisbursementData(final JsonObject command) { final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(command);