FINERACT-2615: Support undoing of Account transfer from Loan account to Savings account#6144
Conversation
c20fbd3 to
bf761a3
Compare
|
@adamsaghy please trigger checks whenever possible, thanks a lot! |
bf761a3 to
d622822
Compare
|
@adamsaghy please trigger checks whenever possible, thanks! |
…to Savings account Implements undo for Loan-to-Savings account transfers, which previously threw UnsupportedOperationException. Reverses the savings deposit via SavingsAccountWritePlatformService.undoTransaction and reverses the loan refund transaction via LoanAccountDomainService.reverseTransfer, then marks the AccountTransferTransaction as reversed so repeated undo attempts are correctly rejected. Adds unit test coverage for the new undo branch and an e2e scenario (TestRailId C80938) mirroring the existing Savings-to-Loan undo test.
d622822 to
2f5ec16
Compare
|
Hey @adamsaghy While debugging the failing e2e tests, I found the issue wasn't actually in the new undo logic. When you get a chance, could you trigger the checks again? Thanks! |
|
hey @adamsaghy |
JIRA
https://issues.apache.org/jira/browse/FINERACT-2615
Problem
AccountTransfersWritePlatformServiceImpl.undoTransfer(...)did not support Loan-to-Savings transfers and immediately threw anUnsupportedOperationException.As a result, users could successfully perform transfers such as loan refunds from a loan account to a savings account, but attempting to undo the transfer failed. Both the loan and savings accounts remained affected because the transfer could not be reversed.
Fix
Added undo support for Loan-to-Savings transfers.
The implementation now reverses both sides of the transfer:
SavingsAccountWritePlatformService.undoTransaction(...).LoanAccountDomainService.reverseTransfer(...).AccountTransferTransactionas reversed, ensuring repeated undo attempts are correctly rejected witherror.msg.account.transfer.already.reversed.Why
reverseTransfer(...)instead ofadjustLoanTransaction(...)?An earlier implementation (#5877) attempted to mirror the existing Savings-to-Loan undo path by calling
LoanAdjustmentService.adjustLoanTransaction(...).That approach cannot handle Loan-to-Savings transfers because
adjustLoanTransaction(...)only permits repayment-like transaction types (REPAYMENT,DOWN_PAYMENT,MERCHANT_ISSUED_REFUND, etc.). The loan-side transaction created by a Loan-to-Savings transfer is a plainREFUND, so callingadjustLoanTransaction(...)results in anInvalidLoanTransactionTypeException.LoanAccountDomainService.reverseTransfer(...)is already used elsewhere inAccountTransfersWritePlatformServiceImpl(undoTransactions(), invoked byreverseAllTransactions(...)andreverseTransfersWithFromAccountType(...)) to reverse this exact type of transaction, making it the correct and consistent implementation here.Tests
AccountTransferTransactionis marked as reversed after undo.error.msg.account.transfer.already.reversed.