FINERACT-2081: Payments after loan charge - COB accrual

This commit is contained in:
Marta Jankovics
2024-09-13 12:12:06 +02:00
committed by Adam Saghy
parent 889fc8d2cb
commit e94ce7f1df
9 changed files with 199 additions and 102 deletions
@@ -838,7 +838,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
if (!loan.isChargedOff()) {
List<LoanRepaymentScheduleInstallment> installments = loan.getRepaymentScheduleInstallments();
boolean isBasedOnSubmittedOnDate = configurationDomainService.getAccrualDateConfigForCharge()
.equalsIgnoreCase("submitted-date");
.equalsIgnoreCase(ACCRUAL_ON_CHARGE_SUBMITTED_ON_DATE);
for (LoanRepaymentScheduleInstallment installment : installments) {
checkAndUpdateAccrualsForInstallment(loan, accruals, installments, isBasedOnSubmittedOnDate, installment);
}
@@ -1006,7 +1006,6 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
}
private boolean addCharge(final Loan loan, final Charge chargeDefinition, LoanCharge loanCharge) {
if (!loan.hasCurrencyCodeOf(chargeDefinition.getCurrencyCode())) {
final String errorMessage = "Charge and Loan must have the same currency.";
throw new InvalidCurrencyException("loanCharge", "attach.to.loan", errorMessage);
@@ -1021,24 +1020,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
}
}
if (!loan.isInterestBearing() && loanCharge.isSpecifiedDueDate()) {
LoanRepaymentScheduleInstallment latestRepaymentScheduleInstalment = loan.getRepaymentScheduleInstallments()
.get(loan.getLoanRepaymentScheduleInstallmentsSize() - 1);
if (DateUtils.isAfter(loanCharge.getDueDate(), latestRepaymentScheduleInstalment.getDueDate())) {
if (latestRepaymentScheduleInstalment.isAdditional()) {
latestRepaymentScheduleInstalment.updateDueDate(loanCharge.getDueDate());
} else {
final LoanRepaymentScheduleInstallment installment = new LoanRepaymentScheduleInstallment(loan,
(loan.getLoanRepaymentScheduleInstallmentsSize() + 1), latestRepaymentScheduleInstalment.getDueDate(),
loanCharge.getDueDate(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, false, null);
installment.markAsAdditional();
loan.addLoanRepaymentScheduleInstallment(installment);
}
}
}
loan.addLoanCharge(loanCharge);
loanCharge = this.loanChargeRepository.saveAndFlush(loanCharge);
// we want to apply charge transactions only for those loans charges that are applied when a loan is active and