diff --git a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java index 2e0830012..9796c47fc 100644 --- a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java +++ b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java @@ -576,10 +576,23 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep newLoanTransaction.getLoanTransactionToRepaymentScheduleMappings()); } else { createNewTransaction(loanTransaction, newLoanTransaction, changedTransactionDetail); + checkAndUpdateReplayedChargebackRelationWithReplayedTransaction(loanTransaction, newLoanTransaction, ctx); } } } + private void checkAndUpdateReplayedChargebackRelationWithReplayedTransaction(LoanTransaction loanTransaction, + LoanTransaction newLoanTransaction, TransactionCtx ctx) { + // if chargeback is getting reverse-replayed + // find replayed transaction with CHARGEBACK relation with reversed chargeback transaction + // for replayed transaction, add relation to point to new Chargeback transaction + if (loanTransaction.getTypeOf().isChargeback()) { + LoanTransaction originalTransaction = findOriginalTransaction(newLoanTransaction, ctx); + originalTransaction.getLoanTransactionRelations() + .add(LoanTransactionRelation.linkToTransaction(originalTransaction, newLoanTransaction, CHARGEBACK)); + } + } + private void processSingleCharge(LoanCharge loanCharge, MonetaryCurrency currency, List installments, LocalDate disbursementDate) { loanChargeProcessor.reprocess(currency, disbursementDate, installments, loanCharge);