FINERACT-2205: Handling charges which belong to installments that got removed.
This commit is contained in:
committed by
Arnold Gálovics
parent
df838cb113
commit
de1555f68f
File diff suppressed because it is too large
Load Diff
+33
-4
@@ -1239,12 +1239,41 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
|
|||||||
}
|
}
|
||||||
|
|
||||||
currentInstallment.updateDueDate(transactionDate);
|
currentInstallment.updateDueDate(transactionDate);
|
||||||
final BigDecimal futurePrincipal = installments.stream()
|
|
||||||
.filter(installment -> transactionDate.isBefore(installment.getDueDate()))
|
final List<LoanRepaymentScheduleInstallment> futureInstallments = installments.stream()
|
||||||
.map(LoanRepaymentScheduleInstallment::getPrincipal).reduce(BigDecimal.ZERO, BigDecimal::add);
|
.filter(installment -> transactionDate.isBefore(installment.getDueDate())).toList();
|
||||||
|
|
||||||
|
final BigDecimal futurePrincipal = futureInstallments.stream().map(LoanRepaymentScheduleInstallment::getPrincipal)
|
||||||
|
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
final BigDecimal futureFee = futureInstallments.stream().map(LoanRepaymentScheduleInstallment::getFeeChargesCharged)
|
||||||
|
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
final BigDecimal futurePenalty = futureInstallments.stream().map(LoanRepaymentScheduleInstallment::getPenaltyCharges)
|
||||||
|
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
currentInstallment.updatePrincipal(MathUtil.nullToZero(currentInstallment.getPrincipal()).add(futurePrincipal));
|
currentInstallment.updatePrincipal(MathUtil.nullToZero(currentInstallment.getPrincipal()).add(futurePrincipal));
|
||||||
|
|
||||||
final List<LoanRepaymentScheduleInstallment> installmentsUpToTransactionDate = installments.stream()
|
final List<LoanRepaymentScheduleInstallment> installmentsUpToTransactionDate = installments.stream()
|
||||||
.filter(installment -> transactionDate.isAfter(installment.getFromDate())).toList();
|
.filter(installment -> transactionDate.isAfter(installment.getFromDate()))
|
||||||
|
.collect(Collectors.toCollection(ArrayList::new));
|
||||||
|
|
||||||
|
if (futureFee.compareTo(BigDecimal.ZERO) > 0 || futurePenalty.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
final Optional<LocalDate> latestDueDate = loan.getCharges().stream()
|
||||||
|
.filter(loanCharge -> loanCharge.isActive() && loanCharge.isNotFullyPaid()).map(LoanCharge::getDueDate)
|
||||||
|
.max(LocalDate::compareTo);
|
||||||
|
|
||||||
|
if (latestDueDate.isPresent()) {
|
||||||
|
final LoanRepaymentScheduleInstallment lastInstallment = installmentsUpToTransactionDate
|
||||||
|
.get(installmentsUpToTransactionDate.size() - 1);
|
||||||
|
|
||||||
|
final LoanRepaymentScheduleInstallment installmentForCharges = new LoanRepaymentScheduleInstallment(loan,
|
||||||
|
lastInstallment.getInstallmentNumber() + 1, currentInstallment.getDueDate(), latestDueDate.get(),
|
||||||
|
BigDecimal.ZERO, BigDecimal.ZERO, futureFee, futurePenalty, null, null, null, true, false, false);
|
||||||
|
installmentsUpToTransactionDate.add(installmentForCharges);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loan.updateLoanSchedule(installmentsUpToTransactionDate);
|
loan.updateLoanSchedule(installmentsUpToTransactionDate);
|
||||||
loan.updateLoanScheduleDependentDerivedFields();
|
loan.updateLoanScheduleDependentDerivedFields();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user