FINERACT-2312: Reverse of Accruals to adjust late deposits

This commit is contained in:
JohnAlva
2025-09-04 10:25:51 +02:00
committed by Adam Saghy
parent a6fa1adc99
commit fb8f2f7cb6
3 changed files with 102 additions and 3 deletions
@@ -1044,7 +1044,8 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom<Long>
}
if (!calculateInterest || transaction.getId() == null) {
transaction.setOverdraftAmount(overdraftAmount);
} else if (!MathUtil.isEqualTo(overdraftAmount, transaction.getOverdraftAmount(this.currency))) {
} else if (!MathUtil.isEqualTo(overdraftAmount, transaction.getOverdraftAmount(this.currency))
&& !transaction.isAccrual()) {
SavingsAccountTransaction accountTransaction = SavingsAccountTransaction.copyTransaction(transaction);
if (transaction.isChargeTransaction()) {
Set<SavingsAccountChargePaidBy> chargesPaidBy = transaction.getSavingsAccountChargesPaid();
@@ -1171,6 +1172,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom<Long>
if (backdatedTxnsAllowedTill) {
addTransactionToExisting(transaction);
} else {
this.accrualsForSavingsReverse(transactionDTO, backdatedTxnsAllowedTill);
addTransaction(transaction);
}
@@ -1306,6 +1308,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom<Long>
if (backdatedTxnsAllowedTill) {
addTransactionToExisting(transaction);
} else {
this.accrualsForSavingsReverse(transactionDTO, backdatedTxnsAllowedTill);
addTransaction(transaction);
}
@@ -3865,10 +3868,26 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom<Long>
.toList();
}
public void accrualsForSavingsReverse(SavingsAccountTransactionDTO transactionDTO, final boolean backdatedTxnsAllowedTill) {
List<SavingsAccountTransaction> accountTransactionsSorted = null;
if (backdatedTxnsAllowedTill) {
accountTransactionsSorted = retrieveSortedTransactions();
} else {
accountTransactionsSorted = retrieveListOfTransactions();
}
for (final SavingsAccountTransaction transaction : accountTransactionsSorted) {
boolean typeTransaccionValidation = transaction.getTransactionType() == SavingsAccountTransactionType.ACCRUAL;
if (typeTransaccionValidation && (transaction.getDateOf().isAfter(transactionDTO.getTransactionDate())
|| transaction.getDateOf().isEqual(transactionDTO.getTransactionDate()))) {
transaction.reverse();
}
}
}
public List<SavingsAccountTransactionDetailsForPostingPeriod> toSavingsAccountTransactionDetailsForPostingPeriodList() {
return retreiveOrderedNonInterestPostingTransactions().stream()
.map(transaction -> transaction.toSavingsAccountTransactionDetailsForPostingPeriod(this.currency, this.allowOverdraft))
.toList();
}
}