Skip to content

Commit

Permalink
FINERACT-2114: Interest rate modification, adjust reschedule validation
Browse files Browse the repository at this point in the history
  • Loading branch information
janez89 committed Oct 2, 2024
1 parent 5ee70ce commit 5fc5e6b
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,10 @@ public EmiInterestPeriod(EmiRepaymentPeriod repaymentPeriod, LocalDate fromDate,
this.interestDue = interestDue;
}

public EmiInterestPeriod(final EmiInterestPeriod interestPeriod, final EmiRepaymentPeriod repaymentPeriod, final EmiRepaymentPeriod originalRepaymentPeriod) {
this(repaymentPeriod, interestPeriod.fromDate, interestPeriod.dueDate, interestPeriod.rateFactorMinus1, interestPeriod.disbursedAmount, interestPeriod.correctionAmount,
interestPeriod.interestDue);
public EmiInterestPeriod(final EmiInterestPeriod interestPeriod, final EmiRepaymentPeriod repaymentPeriod,
final EmiRepaymentPeriod originalRepaymentPeriod) {
this(repaymentPeriod, interestPeriod.fromDate, interestPeriod.dueDate, interestPeriod.rateFactorMinus1,
interestPeriod.disbursedAmount, interestPeriod.correctionAmount, interestPeriod.interestDue);
this.originalRepaymentPeriod = originalRepaymentPeriod;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
*/
package org.apache.fineract.portfolio.loanaccount.loanschedule.domain;

import static org.apache.fineract.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE;

import java.math.BigDecimal;
import java.math.MathContext;
import java.time.LocalDate;
Expand Down Expand Up @@ -122,20 +120,19 @@ public LoanScheduleModel generate(final MathContext mc, final LoanApplicationTer
}
}

emiCalculator.findInterestRepaymentPeriod(interestScheduleModel, repaymentPeriod.getDueDate())
.ifPresent(interestRepaymentPeriod -> {
final Money principalDue = interestRepaymentPeriod.getPrincipalDue();
final Money interestDue = interestRepaymentPeriod.getInterestDue();
emiCalculator.findRepaymentPeriod(interestScheduleModel, repaymentPeriod.getDueDate()).ifPresent(interestRepaymentPeriod -> {
final Money principalDue = interestRepaymentPeriod.getPrincipalDue();
final Money interestDue = interestRepaymentPeriod.getInterestDue();

repaymentPeriod.addPrincipalAmount(principalDue);
repaymentPeriod.addInterestAmount(interestDue);
repaymentPeriod.setOutstandingLoanBalance(interestRepaymentPeriod.getRemainingBalance());
repaymentPeriod.addPrincipalAmount(principalDue);
repaymentPeriod.addInterestAmount(interestDue);
repaymentPeriod.setOutstandingLoanBalance(interestRepaymentPeriod.getRemainingBalance());

scheduleParams.addTotalCumulativePrincipal(principalDue);
scheduleParams.addTotalCumulativeInterest(interestDue);
// add everything
scheduleParams.addTotalRepaymentExpected(principalDue.plus(interestDue));
});
scheduleParams.addTotalCumulativePrincipal(principalDue);
scheduleParams.addTotalCumulativeInterest(interestDue);
// add everything
scheduleParams.addTotalRepaymentExpected(principalDue.plus(interestDue));
});

applyChargesForCurrentPeriod(repaymentPeriod, loanCharges, scheduleParams, currency, mc);
periods.add(repaymentPeriod);
Expand Down Expand Up @@ -189,7 +186,7 @@ private void processDisbursements(final LoanApplicationTerms loanApplicationTerm
continue;
}

Money outstandingBalance = emiCalculator.findInterestRepaymentPeriod(interestScheduleModel, periodDueDate)
Money outstandingBalance = emiCalculator.findRepaymentPeriod(interestScheduleModel, periodDueDate)
.map(EmiRepaymentPeriod::getOutstandingBalance).orElse(Money.zero(loanApplicationTerms.getCurrency()));

final Money disbursedAmount = Money.of(loanApplicationTerms.getCurrency(), disbursementData.getPrincipal());
Expand Down Expand Up @@ -228,7 +225,7 @@ private void processDisbursements(final LoanApplicationTerms loanApplicationTerm

final Money disbursementRemainingBalance = disbursedAmount.minus(downPaymentAmount);
scheduleParams.addPrincipalToBeScheduled(disbursementRemainingBalance);
emiCalculator.addDisbursement(interestScheduleModel, disbursementDate, periodDueDate, disbursementRemainingBalance);
emiCalculator.addDisbursement(interestScheduleModel, periodDueDate, disbursementDate, disbursementRemainingBalance);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ ProgressiveLoanInterestScheduleModel generateInterestScheduleModel(List<LoanSche
ProgressiveLoanInterestScheduleModel generateModel(LoanProductRelatedDetail loanProductRelatedDetail,
Integer installmentAmountInMultiplesOf, List<LoanRepaymentScheduleInstallment> repaymentPeriods, MathContext mc);

Optional<EmiRepaymentPeriod> findInterestRepaymentPeriod(ProgressiveLoanInterestScheduleModel scheduleModel, LocalDate dueDate);
Optional<EmiRepaymentPeriod> findRepaymentPeriod(ProgressiveLoanInterestScheduleModel scheduleModel, LocalDate dueDate);

void addDisbursement(ProgressiveLoanInterestScheduleModel scheduleModel, LocalDate repaymentPeriodDueDate,
LocalDate disbursementDueDate, Money disbursedAmount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public ProgressiveLoanInterestScheduleModel generateInterestScheduleModel(final
}

@Override
public Optional<EmiRepaymentPeriod> findInterestRepaymentPeriod(final ProgressiveLoanInterestScheduleModel scheduleModel,
public Optional<EmiRepaymentPeriod> findRepaymentPeriod(final ProgressiveLoanInterestScheduleModel scheduleModel,
final LocalDate repaymentPeriodDueDate) {
if (scheduleModel == null) {
return Optional.empty();
Expand Down

0 comments on commit 5fc5e6b

Please sign in to comment.