FINERACT-2181: ensure loan transactions are saved and linked to loan object consistently across business steps
This commit is contained in:
committed by
Arnold Gálovics
parent
62bb1e6509
commit
3829c4404f
+3
-2
@@ -809,8 +809,9 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
|
||||
}
|
||||
|
||||
for (LoanTransaction newTransaction : newTransactions) {
|
||||
loanAccountService.saveLoanTransactionWithDataIntegrityViolationChecks(newTransaction);
|
||||
transactionIds.add(newTransaction.getId());
|
||||
LoanTransaction savedNewTransaction = loanAccountService.saveLoanTransactionWithDataIntegrityViolationChecks(newTransaction);
|
||||
loan.addLoanTransaction(savedNewTransaction);
|
||||
transactionIds.add(savedNewTransaction.getId());
|
||||
}
|
||||
changes.put("transactions", transactionIds);
|
||||
changes.put("eventAmount", payPrincipal.getAmount().negate());
|
||||
|
||||
+7
-4
@@ -274,16 +274,19 @@ public class LoanAccrualActivityProcessingServiceImpl implements LoanAccrualActi
|
||||
transactionDate);
|
||||
|
||||
if (newAccrualActivityTransaction != null) {
|
||||
makeAccrualActivityTransaction(loan, newAccrualActivityTransaction);
|
||||
LoanTransaction savedNewTransaction = makeAccrualActivityTransaction(loan, newAccrualActivityTransaction);
|
||||
loan.addLoanTransaction(savedNewTransaction);
|
||||
}
|
||||
}
|
||||
|
||||
private void makeAccrualActivityTransaction(final @NonNull Loan loan, @NonNull LoanTransaction newAccrualActivityTransaction) {
|
||||
private LoanTransaction makeAccrualActivityTransaction(final @NonNull Loan loan,
|
||||
@NonNull LoanTransaction newAccrualActivityTransaction) {
|
||||
businessEventNotifierService.notifyPreBusinessEvent(new LoanTransactionAccrualActivityPreBusinessEvent(loan));
|
||||
newAccrualActivityTransaction = loanAccountService
|
||||
LoanTransaction savedNewAccrualActivityTransaction = loanAccountService
|
||||
.saveLoanTransactionWithDataIntegrityViolationChecks(newAccrualActivityTransaction);
|
||||
businessEventNotifierService
|
||||
.notifyPostBusinessEvent(new LoanTransactionAccrualActivityPostBusinessEvent(newAccrualActivityTransaction));
|
||||
.notifyPostBusinessEvent(new LoanTransactionAccrualActivityPostBusinessEvent(savedNewAccrualActivityTransaction));
|
||||
return savedNewAccrualActivityTransaction;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+15
-9
@@ -678,9 +678,9 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
||||
|
||||
// update repayment schedule portions
|
||||
addTransactionMappings(transaction, accrualPeriod, adjustment);
|
||||
loanTransactionRepository.save(transaction);
|
||||
|
||||
return transaction;
|
||||
LoanTransaction savedTransaction = loanTransactionRepository.save(transaction);
|
||||
loan.addLoanTransaction(savedTransaction);
|
||||
return savedTransaction;
|
||||
}
|
||||
|
||||
private void mergeAccrualTransaction(@NotNull final LoanTransaction transaction, final AccrualPeriodData accrualPeriod,
|
||||
@@ -825,7 +825,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
||||
}
|
||||
final LoanTransaction interestAccrualTransaction = LoanTransaction.accrueInterest(loan.getOffice(), loan,
|
||||
interestApplied, loan.getDisbursementDate(), externalId);
|
||||
loanTransactionRepository.save(interestAccrualTransaction);
|
||||
LoanTransaction savedInterestAccrualTransaction = loanTransactionRepository.save(interestAccrualTransaction);
|
||||
loan.addLoanTransaction(savedInterestAccrualTransaction);
|
||||
}
|
||||
} else {
|
||||
Set<LoanChargePaidBy> chargePaidBies = accrualTransaction.getLoanChargesPaid();
|
||||
@@ -940,12 +941,14 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
||||
if (incomeTransaction.isEmpty()) {
|
||||
LoanTransaction transaction = LoanTransaction.incomePosting(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
||||
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
||||
loanTransactionRepository.save(transaction);
|
||||
LoanTransaction savedTransaction = loanTransactionRepository.save(transaction);
|
||||
loan.addLoanTransaction(savedTransaction);
|
||||
} else if (incomeTransaction.get().getAmount(loan.getCurrency()).getAmount().compareTo(compoundingDetail.getAmount()) != 0) {
|
||||
incomeTransaction.get().reverse();
|
||||
LoanTransaction transaction = LoanTransaction.incomePosting(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
||||
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
||||
loanTransactionRepository.save(transaction);
|
||||
LoanTransaction savedTransaction = loanTransactionRepository.save(transaction);
|
||||
loan.addLoanTransaction(savedTransaction);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -964,7 +967,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
||||
LoanTransaction accrual = LoanTransaction.accrueTransaction(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
||||
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
||||
updateLoanChargesPaidBy(loan, accrual, feeDetails, null);
|
||||
loanTransactionRepository.save(accrual);
|
||||
LoanTransaction savedAccrual = loanTransactionRepository.save(accrual);
|
||||
loan.addLoanTransaction(savedAccrual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1025,7 +1029,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
||||
}
|
||||
LoanTransaction finalIncomeTransaction = LoanTransaction.incomePosting(loan, loan.getOffice(), closedDate, amountToPost,
|
||||
interestToPost, feeToPost, penaltyToPost, externalId);
|
||||
loanTransactionRepository.save(finalIncomeTransaction);
|
||||
LoanTransaction savedFinalIncomeTransaction = loanTransactionRepository.save(finalIncomeTransaction);
|
||||
loan.addLoanTransaction(savedFinalIncomeTransaction);
|
||||
|
||||
if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()) {
|
||||
final LocalDate lastAccruedDate = loanTransactionRepository
|
||||
@@ -1040,7 +1045,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
||||
LoanTransaction finalAccrual = LoanTransaction.accrueTransaction(loan, loan.getOffice(), closedDate, amountToPost,
|
||||
interestToPost, feeToPost, penaltyToPost, externalId);
|
||||
updateLoanChargesPaidBy(loan, finalAccrual, feeDetails, null);
|
||||
loanTransactionRepository.save(finalAccrual);
|
||||
LoanTransaction savedFinalAccrual = loanTransactionRepository.save(finalAccrual);
|
||||
loan.addLoanTransaction(savedFinalAccrual);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user