From a8fb5e7826189896eecfeda19e7aad5d2c5c2a4d Mon Sep 17 00:00:00 2001 From: saifulhuq01 Date: Wed, 11 Feb 2026 16:36:43 +0530 Subject: [PATCH] FINERACT-2464: Refactor LoanScheduleAssembler logic extraction --- .../service/LoanScheduleAssembler.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java index d07d48b59..6a32b2e87 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java @@ -314,8 +314,6 @@ public class LoanScheduleAssembler { calculatedRepaymentsStartingFromDate = deriveFirstRepaymentDate(loanType, repaymentEvery, expectedDisbursementDate, repaymentPeriodFrequencyType, loanProduct.getMinimumDaysBetweenDisbursalAndFirstRepayment(), calendar, submittedOnDate, repaymentStartDateType); - // If calculated repayment start date does not match due to minimum days between disbursal and first - // repayment rule, we set repaymentsStartingFromDate (which will be used as seed date later) if (!tmpCalculatedRepaymentsStartingFromDate.equals(calculatedRepaymentsStartingFromDate)) { repaymentsStartingFromDate = calculatedRepaymentsStartingFromDate; } @@ -748,18 +746,9 @@ public class LoanScheduleAssembler { final MathContext mc = MoneyHelper.getMathContext(); HolidayDetailDTO detailDTO = new HolidayDetailDTO(isHolidayEnabled, holidays, workingDays); - LoanScheduleGenerator loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getLoanScheduleType(), - loanApplicationTerms.getInterestMethod()); + LoanScheduleGenerator loanScheduleGenerator; if (loanApplicationTerms.isEqualAmortization()) { - if (loanApplicationTerms.getInterestMethod().isDecliningBalance()) { - final LoanScheduleGenerator decliningLoanScheduleGenerator = this.loanScheduleFactory - .create(loanApplicationTerms.getLoanScheduleType(), InterestMethod.DECLINING_BALANCE); - LoanScheduleModel loanSchedule = decliningLoanScheduleGenerator.generate(mc, loanApplicationTerms, loanCharges, detailDTO); - - loanApplicationTerms - .updateTotalInterestDue(Money.of(loanApplicationTerms.getCurrency(), loanSchedule.getTotalInterestCharged())); - - } + updateInterestForEqualAmortization(mc, loanApplicationTerms, loanCharges, detailDTO); loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getLoanScheduleType(), InterestMethod.FLAT); } else { loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getLoanScheduleType(), @@ -1602,4 +1591,16 @@ public class LoanScheduleAssembler { } } + private void updateInterestForEqualAmortization(final MathContext mc, final LoanApplicationTerms loanApplicationTerms, + final Set loanCharges, final HolidayDetailDTO detailDTO) { + if (loanApplicationTerms.getInterestMethod().isDecliningBalance()) { + final LoanScheduleGenerator decliningLoanScheduleGenerator = this.loanScheduleFactory + .create(loanApplicationTerms.getLoanScheduleType(), InterestMethod.DECLINING_BALANCE); + LoanScheduleModel loanSchedule = decliningLoanScheduleGenerator.generate(mc, loanApplicationTerms, loanCharges, detailDTO); + + loanApplicationTerms + .updateTotalInterestDue(Money.of(loanApplicationTerms.getCurrency(), loanSchedule.getTotalInterestCharged())); + } + } + }