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]

Reply via email to