oleksii-novikov-onix commented on code in PR #4288:
URL: https://github.com/apache/fineract/pull/4288#discussion_r1937009209
##########
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:
I completely agree. I will remove this condition because we need to insert
the pause unconditionally.
--
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]