adamsaghy commented on code in PR #4288:
URL: https://github.com/apache/fineract/pull/4288#discussion_r1936964100
##########
fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/ProgressiveLoanInterestScheduleModel.java:
##########
@@ -235,38 +238,43 @@ void insertInterestPeriod(final RepaymentPeriod
repaymentPeriod, final LocalDate
repaymentPeriod.getInterestPeriods().add(interestPeriod);
}
- private void insertInterestPausePeriods(final RepaymentPeriod
repaymentPeriod, final LocalDate fromDate, final LocalDate endDate) {
- final InterestPeriod previousInterestPeriod =
findPreviousInterestPeriod(repaymentPeriod, fromDate);
- final LocalDate originalFromDate =
previousInterestPeriod.getFromDate();
- final LocalDate originalDueDate = previousInterestPeriod.getDueDate();
- final LocalDate newDueDate =
calculateNewDueDate(previousInterestPeriod, fromDate.minusDays(1));
+ private void insertInterestPausePeriods(final RepaymentPeriod
repaymentPeriod, final LocalDate pauseStart, final LocalDate pauseEnd) {
+ final LocalDate effectivePauseStart = pauseStart.minusDays(1);
+ final LocalDate finalPauseStart =
effectivePauseStart.isBefore(repaymentPeriod.getFromDate()) ?
repaymentPeriod.getFromDate()
+ : effectivePauseStart;
+ final LocalDate finalPauseEnd =
pauseEnd.isAfter(repaymentPeriod.getDueDate()) ? repaymentPeriod.getDueDate() :
pauseEnd;
- if (fromDate.isAfter(originalFromDate) &&
endDate.isBefore(originalDueDate)) {
- previousInterestPeriod.setDueDate(newDueDate);
- final InterestPeriod interestPausePeriod = new
InterestPeriod(repaymentPeriod, newDueDate, endDate, BigDecimal.ZERO,
- BigDecimal.ZERO, zero, zero, zero, mc, true);
- repaymentPeriod.getInterestPeriods().add(interestPausePeriod);
- final InterestPeriod interestAfterPausePeriod = new
InterestPeriod(repaymentPeriod, endDate, originalDueDate, BigDecimal.ZERO,
- BigDecimal.ZERO, zero, zero, zero, mc, false);
- repaymentPeriod.getInterestPeriods().add(interestAfterPausePeriod);
+ final List<InterestPeriod> newInterestPeriods = new ArrayList<>();
+ for (final InterestPeriod interestPeriod :
repaymentPeriod.getInterestPeriods()) {
+ if (interestPeriod.getDueDate().isBefore(finalPauseStart) ||
!interestPeriod.getFromDate().isBefore(finalPauseEnd)) {
+ newInterestPeriods.add(interestPeriod);
+ } else {
+ if (interestPeriod.getFromDate().isBefore(finalPauseStart)) {
+ final InterestPeriod leftSlice = new
InterestPeriod(repaymentPeriod, interestPeriod.getFromDate(), finalPauseStart,
+ interestPeriod.getRateFactor(),
interestPeriod.getRateFactorTillPeriodDueDate(),
+ interestPeriod.getDisbursementAmount(),
interestPeriod.getBalanceCorrectionAmount(),
+ interestPeriod.getOutstandingLoanBalance(),
interestPeriod.getMc(), false);
+ newInterestPeriods.add(leftSlice);
+ }
+ if (interestPeriod.getDueDate().isAfter(finalPauseEnd)) {
+ final InterestPeriod rightSlice = new
InterestPeriod(repaymentPeriod, finalPauseEnd, interestPeriod.getDueDate(),
+ interestPeriod.getRateFactor(),
interestPeriod.getRateFactorTillPeriodDueDate(),
+ interestPeriod.getDisbursementAmount(),
interestPeriod.getBalanceCorrectionAmount(),
+ interestPeriod.getOutstandingLoanBalance(),
interestPeriod.getMc(), false);
+ newInterestPeriods.add(rightSlice);
+ }
+ }
}
- if (fromDate.isAfter(originalFromDate) &&
endDate.isAfter(originalDueDate)) {
- previousInterestPeriod.setDueDate(newDueDate);
- final InterestPeriod interestPausePeriod = new
InterestPeriod(repaymentPeriod, newDueDate, originalDueDate, BigDecimal.ZERO,
+ if (finalPauseEnd.isAfter(finalPauseStart)) {
Review Comment:
Why do we need this condition? I cannot be false ever, no?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]