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) {
|
for (LoanTransaction newTransaction : newTransactions) {
|
||||||
loanAccountService.saveLoanTransactionWithDataIntegrityViolationChecks(newTransaction);
|
LoanTransaction savedNewTransaction = loanAccountService.saveLoanTransactionWithDataIntegrityViolationChecks(newTransaction);
|
||||||
transactionIds.add(newTransaction.getId());
|
loan.addLoanTransaction(savedNewTransaction);
|
||||||
|
transactionIds.add(savedNewTransaction.getId());
|
||||||
}
|
}
|
||||||
changes.put("transactions", transactionIds);
|
changes.put("transactions", transactionIds);
|
||||||
changes.put("eventAmount", payPrincipal.getAmount().negate());
|
changes.put("eventAmount", payPrincipal.getAmount().negate());
|
||||||
|
|||||||
+7
-4
@@ -274,16 +274,19 @@ public class LoanAccrualActivityProcessingServiceImpl implements LoanAccrualActi
|
|||||||
transactionDate);
|
transactionDate);
|
||||||
|
|
||||||
if (newAccrualActivityTransaction != null) {
|
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));
|
businessEventNotifierService.notifyPreBusinessEvent(new LoanTransactionAccrualActivityPreBusinessEvent(loan));
|
||||||
newAccrualActivityTransaction = loanAccountService
|
LoanTransaction savedNewAccrualActivityTransaction = loanAccountService
|
||||||
.saveLoanTransactionWithDataIntegrityViolationChecks(newAccrualActivityTransaction);
|
.saveLoanTransactionWithDataIntegrityViolationChecks(newAccrualActivityTransaction);
|
||||||
businessEventNotifierService
|
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
|
// update repayment schedule portions
|
||||||
addTransactionMappings(transaction, accrualPeriod, adjustment);
|
addTransactionMappings(transaction, accrualPeriod, adjustment);
|
||||||
loanTransactionRepository.save(transaction);
|
LoanTransaction savedTransaction = loanTransactionRepository.save(transaction);
|
||||||
|
loan.addLoanTransaction(savedTransaction);
|
||||||
return transaction;
|
return savedTransaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mergeAccrualTransaction(@NotNull final LoanTransaction transaction, final AccrualPeriodData accrualPeriod,
|
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,
|
final LoanTransaction interestAccrualTransaction = LoanTransaction.accrueInterest(loan.getOffice(), loan,
|
||||||
interestApplied, loan.getDisbursementDate(), externalId);
|
interestApplied, loan.getDisbursementDate(), externalId);
|
||||||
loanTransactionRepository.save(interestAccrualTransaction);
|
LoanTransaction savedInterestAccrualTransaction = loanTransactionRepository.save(interestAccrualTransaction);
|
||||||
|
loan.addLoanTransaction(savedInterestAccrualTransaction);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Set<LoanChargePaidBy> chargePaidBies = accrualTransaction.getLoanChargesPaid();
|
Set<LoanChargePaidBy> chargePaidBies = accrualTransaction.getLoanChargesPaid();
|
||||||
@@ -940,12 +941,14 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
|||||||
if (incomeTransaction.isEmpty()) {
|
if (incomeTransaction.isEmpty()) {
|
||||||
LoanTransaction transaction = LoanTransaction.incomePosting(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
LoanTransaction transaction = LoanTransaction.incomePosting(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
||||||
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
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) {
|
} else if (incomeTransaction.get().getAmount(loan.getCurrency()).getAmount().compareTo(compoundingDetail.getAmount()) != 0) {
|
||||||
incomeTransaction.get().reverse();
|
incomeTransaction.get().reverse();
|
||||||
LoanTransaction transaction = LoanTransaction.incomePosting(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
LoanTransaction transaction = LoanTransaction.incomePosting(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
||||||
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
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(),
|
LoanTransaction accrual = LoanTransaction.accrueTransaction(loan, loan.getOffice(), compoundingDetail.getEffectiveDate(),
|
||||||
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
compoundingDetail.getAmount(), interest, fee, penalties, externalId);
|
||||||
updateLoanChargesPaidBy(loan, accrual, feeDetails, null);
|
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,
|
LoanTransaction finalIncomeTransaction = LoanTransaction.incomePosting(loan, loan.getOffice(), closedDate, amountToPost,
|
||||||
interestToPost, feeToPost, penaltyToPost, externalId);
|
interestToPost, feeToPost, penaltyToPost, externalId);
|
||||||
loanTransactionRepository.save(finalIncomeTransaction);
|
LoanTransaction savedFinalIncomeTransaction = loanTransactionRepository.save(finalIncomeTransaction);
|
||||||
|
loan.addLoanTransaction(savedFinalIncomeTransaction);
|
||||||
|
|
||||||
if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()) {
|
if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()) {
|
||||||
final LocalDate lastAccruedDate = loanTransactionRepository
|
final LocalDate lastAccruedDate = loanTransactionRepository
|
||||||
@@ -1040,7 +1045,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
|
|||||||
LoanTransaction finalAccrual = LoanTransaction.accrueTransaction(loan, loan.getOffice(), closedDate, amountToPost,
|
LoanTransaction finalAccrual = LoanTransaction.accrueTransaction(loan, loan.getOffice(), closedDate, amountToPost,
|
||||||
interestToPost, feeToPost, penaltyToPost, externalId);
|
interestToPost, feeToPost, penaltyToPost, externalId);
|
||||||
updateLoanChargesPaidBy(loan, finalAccrual, feeDetails, null);
|
updateLoanChargesPaidBy(loan, finalAccrual, feeDetails, null);
|
||||||
loanTransactionRepository.save(finalAccrual);
|
LoanTransaction savedFinalAccrual = loanTransactionRepository.save(finalAccrual);
|
||||||
|
loan.addLoanTransaction(savedFinalAccrual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user