FINERACT-2181: fix accrual calculation date condition

This commit is contained in:
mark.vituska
2025-05-22 11:41:19 +02:00
committed by Arnold Gálovics
parent 9c01540990
commit a3a5aabb7f
2 changed files with 151 additions and 1 deletions
@@ -358,7 +358,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
if (progressiveAccrual && accruedTill != null && !DateUtils.isAfter(tillDate, accruedTill)) {
if (isFinal) {
reverseTransactionsAfter(existingAccruals, accrualDate, addJournal);
} else if (existingAccruals.stream().anyMatch(t -> !t.isReversed() && !DateUtils.isBefore(t.getDateOf(), accrualDate))) {
} else if (isExistAccrualAfterDate(existingAccruals, accrualDate) && hasNoActiveChargeOnDate(loan, accrualDate)) {
return;
}
}
@@ -445,6 +445,14 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
}
}
private boolean isExistAccrualAfterDate(List<LoanTransaction> existingAccruals, LocalDate accrualDate) {
return existingAccruals.stream().anyMatch(t -> !t.isReversed() && !DateUtils.isBefore(t.getDateOf(), accrualDate));
}
private boolean hasNoActiveChargeOnDate(Loan loan, LocalDate accrualDate) {
return loan.getLoanCharges(t -> t.isActive() && DateUtils.isEqual(t.getDueDate(), accrualDate)).isEmpty();
}
private AccrualPeriodsData calculateAccrualAmounts(@NotNull final Loan loan, @NotNull final LocalDate tillDate, final boolean periodic,
final boolean isFinal, final boolean chargeOnDueDate) {
final LoanProductRelatedDetail productDetail = loan.getLoanProductRelatedDetail();