Merge pull request #794 from pramodn02/MIFOSX-980
MIFOSX-980 - added boolean flag for first repayment date caculation
This commit is contained in:
+4
-2
@@ -72,7 +72,8 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
|||||||
|
|
||||||
LocalDate periodStartDate = loanApplicationTerms.getExpectedDisbursementDate();
|
LocalDate periodStartDate = loanApplicationTerms.getExpectedDisbursementDate();
|
||||||
LocalDate actualRepaymentDate = periodStartDate;
|
LocalDate actualRepaymentDate = periodStartDate;
|
||||||
LocalDate firstRepaymentdate = this.scheduledDateGenerator.generateNextRepaymentDate(periodStartDate, loanApplicationTerms);
|
boolean isFirstRepayment = true;
|
||||||
|
LocalDate firstRepaymentdate = this.scheduledDateGenerator.generateNextRepaymentDate(periodStartDate, loanApplicationTerms, isFirstRepayment);
|
||||||
final LocalDate idealDisbursementDate = this.scheduledDateGenerator.idealDisbursementDateBasedOnFirstRepaymentDate(
|
final LocalDate idealDisbursementDate = this.scheduledDateGenerator.idealDisbursementDateBasedOnFirstRepaymentDate(
|
||||||
loanApplicationTerms.getLoanTermPeriodFrequencyType(), loanApplicationTerms.getRepaymentEvery(), firstRepaymentdate);
|
loanApplicationTerms.getLoanTermPeriodFrequencyType(), loanApplicationTerms.getRepaymentEvery(), firstRepaymentdate);
|
||||||
|
|
||||||
@@ -90,7 +91,8 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
|||||||
outstandingBalance = outstandingBalance.zero().plus(disburseAmt);
|
outstandingBalance = outstandingBalance.zero().plus(disburseAmt);
|
||||||
}
|
}
|
||||||
while (!outstandingBalance.isZero()) {
|
while (!outstandingBalance.isZero()) {
|
||||||
actualRepaymentDate = this.scheduledDateGenerator.generateNextRepaymentDate(actualRepaymentDate, loanApplicationTerms);
|
actualRepaymentDate = this.scheduledDateGenerator.generateNextRepaymentDate(actualRepaymentDate, loanApplicationTerms, isFirstRepayment);
|
||||||
|
isFirstRepayment = false;
|
||||||
LocalDate scheduledDueDate = this.scheduledDateGenerator.adjustRepaymentDate(actualRepaymentDate, loanApplicationTerms,
|
LocalDate scheduledDueDate = this.scheduledDateGenerator.adjustRepaymentDate(actualRepaymentDate, loanApplicationTerms,
|
||||||
isHolidayEnabled, holidays, workingDays);
|
isHolidayEnabled, holidays, workingDays);
|
||||||
final int daysInPeriod = Days.daysBetween(periodStartDate, scheduledDueDate).getDays();
|
final int daysInPeriod = Days.daysBetween(periodStartDate, scheduledDueDate).getDays();
|
||||||
|
|||||||
+5
-4
@@ -23,19 +23,20 @@ public class DefaultScheduledDateGenerator implements ScheduledDateGenerator {
|
|||||||
final int numberOfRepayments = loanApplicationTerms.getNumberOfRepayments();
|
final int numberOfRepayments = loanApplicationTerms.getNumberOfRepayments();
|
||||||
|
|
||||||
LocalDate lastRepaymentDate = loanApplicationTerms.getExpectedDisbursementDate();
|
LocalDate lastRepaymentDate = loanApplicationTerms.getExpectedDisbursementDate();
|
||||||
|
boolean isFirstRepayment = true;
|
||||||
for (int repaymentPeriod = 1; repaymentPeriod <= numberOfRepayments; repaymentPeriod++) {
|
for (int repaymentPeriod = 1; repaymentPeriod <= numberOfRepayments; repaymentPeriod++) {
|
||||||
lastRepaymentDate = generateNextRepaymentDate(lastRepaymentDate, loanApplicationTerms);
|
lastRepaymentDate = generateNextRepaymentDate(lastRepaymentDate, loanApplicationTerms, isFirstRepayment);
|
||||||
|
isFirstRepayment = false;
|
||||||
}
|
}
|
||||||
lastRepaymentDate = adjustRepaymentDate(lastRepaymentDate, loanApplicationTerms, isHolidayEnabled, holidays, workingDays);
|
lastRepaymentDate = adjustRepaymentDate(lastRepaymentDate, loanApplicationTerms, isHolidayEnabled, holidays, workingDays);
|
||||||
return lastRepaymentDate;
|
return lastRepaymentDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LocalDate generateNextRepaymentDate(final LocalDate lastRepaymentDate, final LoanApplicationTerms loanApplicationTerms) {
|
public LocalDate generateNextRepaymentDate(final LocalDate lastRepaymentDate, final LoanApplicationTerms loanApplicationTerms, boolean isFirstRepayment) {
|
||||||
final LocalDate firstRepaymentPeriodDate = loanApplicationTerms.getCalculatedRepaymentsStartingFromLocalDate();
|
final LocalDate firstRepaymentPeriodDate = loanApplicationTerms.getCalculatedRepaymentsStartingFromLocalDate();
|
||||||
LocalDate dueRepaymentPeriodDate = null;
|
LocalDate dueRepaymentPeriodDate = null;
|
||||||
if (firstRepaymentPeriodDate != null && firstRepaymentPeriodDate.isAfter(lastRepaymentDate)) {
|
if (isFirstRepayment && firstRepaymentPeriodDate != null) {
|
||||||
dueRepaymentPeriodDate = firstRepaymentPeriodDate;
|
dueRepaymentPeriodDate = firstRepaymentPeriodDate;
|
||||||
} else {
|
} else {
|
||||||
dueRepaymentPeriodDate = getRepaymentPeriodDate(loanApplicationTerms, lastRepaymentDate);
|
dueRepaymentPeriodDate = getRepaymentPeriodDate(loanApplicationTerms, lastRepaymentDate);
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ public interface ScheduledDateGenerator {
|
|||||||
LocalDate idealDisbursementDateBasedOnFirstRepaymentDate(PeriodFrequencyType repaymentPeriodFrequencyType, int repaidEvery,
|
LocalDate idealDisbursementDateBasedOnFirstRepaymentDate(PeriodFrequencyType repaymentPeriodFrequencyType, int repaidEvery,
|
||||||
final LocalDate firstRepaymentDate);
|
final LocalDate firstRepaymentDate);
|
||||||
|
|
||||||
LocalDate generateNextRepaymentDate(LocalDate lastRepaymentDate, LoanApplicationTerms loanApplicationTerms);
|
LocalDate generateNextRepaymentDate(LocalDate lastRepaymentDate, LoanApplicationTerms loanApplicationTerms, boolean isFirstRepayment);
|
||||||
|
|
||||||
LocalDate adjustRepaymentDate(LocalDate dueRepaymentPeriodDate, LoanApplicationTerms loanApplicationTerms, boolean isHolidayEnabled,
|
LocalDate adjustRepaymentDate(LocalDate dueRepaymentPeriodDate, LoanApplicationTerms loanApplicationTerms, boolean isHolidayEnabled,
|
||||||
List<Holiday> holidays, WorkingDays workingDays);
|
List<Holiday> holidays, WorkingDays workingDays);
|
||||||
|
|||||||
Reference in New Issue
Block a user