FINERACT-2326: Loan contract termination same disbursement date

This commit is contained in:
Jose Alberto Hernandez
2025-11-13 12:47:46 +01:00
committed by Adam Saghy
parent fdb9e5518c
commit a0b31bbb25
9 changed files with 155 additions and 40 deletions
@@ -1410,10 +1410,17 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
* @param date
* @return a schedule installment is related to the provided date
**/
public LoanRepaymentScheduleInstallment getRelatedRepaymentScheduleInstallment(LocalDate date) {
return getRepaymentScheduleInstallment(
e -> (e.isFirstNormalInstallment() && DateUtils.isDateInRangeInclusive(date, e.getFromDate(), e.getDueDate()))
|| DateUtils.isDateInRangeFromExclusiveToInclusive(date, e.getFromDate(), e.getDueDate()));
public LoanRepaymentScheduleInstallment getRelatedRepaymentScheduleInstallment(final LocalDate date) {
return getRepaymentScheduleInstallment(e -> (DateUtils.isDateInRangeFromExclusiveToInclusive(date, e.getFromDate(), e.getDueDate())
|| (e.isFirstNormalInstallment(getRepaymentScheduleInstallments())
&& DateUtils.isDateInRangeInclusive(date, e.getFromDate(), e.getDueDate()))));
}
public List<LoanRepaymentScheduleInstallment> getInstallmentsUpToTransactionDate(final LocalDate transactionDate) {
return getRepaymentScheduleInstallments().stream()
.filter(i -> (transactionDate.isAfter(i.getFromDate())
|| (i.isFirstNormalInstallment(getRepaymentScheduleInstallments()) && !transactionDate.isBefore(i.getFromDate()))))
.collect(Collectors.toCollection(ArrayList::new));
}
public LoanRepaymentScheduleInstallment fetchRepaymentScheduleInstallment(final Integer installmentNumber) {
@@ -1216,8 +1216,7 @@ public class LoanRepaymentScheduleInstallment extends AbstractAuditableWithUTCDa
return value.setScale(6, MoneyHelper.getRoundingMode());
}
public boolean isFirstNormalInstallment() {
return loan.getRepaymentScheduleInstallments().stream().filter(rp -> !rp.isDownPayment()).findFirst().stream()
.anyMatch(rp -> rp.equals(this));
public boolean isFirstNormalInstallment(List<LoanRepaymentScheduleInstallment> installments) {
return installments.stream().filter(rp -> !rp.isDownPayment()).findFirst().stream().anyMatch(rp -> rp.equals(this));
}
}
@@ -2255,5 +2255,4 @@ public final class LoanApplicationTerms {
public void updateVariationDays(final long daysToAdd) {
this.variationDays += daysToAdd;
}
}