FINERACT-2024: Fix Overpayment portion miscalculated in CBR reverse-replay

This commit is contained in:
Adam Saghy
2024-03-08 06:04:07 +01:00
committed by taskain7
parent 698e2ce8c3
commit 5ce69c19fe
5 changed files with 426 additions and 56 deletions
@@ -3867,7 +3867,9 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
if (loanTransaction.isRefund() || loanTransaction.isRefundForActiveLoan()) {
totalPaidInRepayments = totalPaidInRepayments.minus(loanTransaction.getAmount(currency));
} else if (loanTransaction.isCreditBalanceRefund() || loanTransaction.isChargeback()) {
totalPaidInRepayments = totalPaidInRepayments.minus(loanTransaction.getOverPaymentPortion(currency));
if (loanTransaction.getPrincipalPortion(currency).isZero()) {
totalPaidInRepayments = totalPaidInRepayments.minus(loanTransaction.getOverPaymentPortion(currency));
}
}
}
@@ -227,7 +227,8 @@ public abstract class AbstractLoanRepaymentScheduleTransactionProcessor implemen
onLoanOverpayment(loanTransaction, transactionAmountUnprocessed);
loanTransaction.setOverPayments(transactionAmountUnprocessed);
}
ctx.getOverpaymentHolder().setMoneyObject(transactionAmountUnprocessed);
ctx.getOverpaymentHolder()
.setMoneyObject(ctx.getOverpaymentHolder().getMoneyObject().add(transactionAmountUnprocessed));
} else {
ctx.getOverpaymentHolder().setMoneyObject(Money.zero(ctx.getCurrency()));
}