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! |
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 |
|
Hey @adamsaghy , double-checked everything. Please review it when you get a chance. Let me know if you need any changes. |
|
Hi @adamsaghy! Just following up on this PR. It's ready for review whenever you have a chance. Thanks! |
|
@AshharAhmadKhan Please review #6136 (comment) and whether your PR has the same issue or not... |
|
Hey @adamsaghy , thanks for the notice. #6136 does touch the same undo() method, but it doesn't add support for the loan to savings case. It only fixes the lookup and scoping logic for the branches that already existed. My PR is completing the last piece of the pattern from FINERACT-2604 and FINERACT-2613, so it's still needed on top of that fix. Right now my loan to savings branch is written in the old loop style though, so once #6136 merges it'll conflict. I'll wait for that to land, rebase, and rewrite my branch to match their single transaction pattern instead. Thanks again for pointing this out! |
It was not just different handling, but it is using different entity to be fetched by id. Please double check whether your implementation is fetching the correct entity |
|
Hey Adam, thanks for pushing on this. You're right, it was wrong. My branch fetches via accountTransferDetailRepository.findById(command.entityId()), which is the wrong entity for the id being passed in. #6136 resolves it correctly through accountTransferRepository. I'll fix it up once #6136 merges and rebase on top. |
2f5ec16 to
b3fec92
Compare
|
Hey @adamsaghy, I made some changes. Can you please review them and let me know if I need to change anything? |
|
@Samer-Melhem-FOO Please review. |
|
Hi @adamsaghy , this is ready for review. @Samer-Melhem-FOO , please feel free to review as well, and if either of you has anything to add or any further changes are needed, please let me know. |
|
Hi @adamsaghy, just a quick ping on this PR when you get a chance. It’s ready for review. Thanks! |
|
@AshharAhmadKhan I need some extra time to review this. Also #6136 is still open... :/ |
b3fec92 to
fcf66b7
Compare
hey adam, no problem at all haha. Please take all the time you need! |
|
Both failures are unrelated to my changes. Please retrigger when possible. |
fcf66b7 to
7f997c8
Compare
…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.
7f997c8 to
b2bb2de
Compare
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.