FINERACT-2277: Deprecate findExistingReversedTransactionIds and fetch only the ids from database instead

This commit is contained in:
mariiaKraievska
2025-05-26 14:41:32 +02:00
committed by Adam Saghy
parent 13e4c8b55d
commit 8b86229a3e
15 changed files with 52 additions and 51 deletions
@@ -760,14 +760,6 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
return maturityDate; return maturityDate;
} }
public List<Long> findExistingReversedTransactionIds() {
return getLoanTransactions().stream() //
.filter(LoanTransaction::isReversed) //
.filter(loanTransaction -> loanTransaction.getId() != null) //
.map(LoanTransaction::getId) //
.collect(Collectors.toList());
}
public List<LoanDisbursementDetails> getDisbursedLoanDisbursementDetails() { public List<LoanDisbursementDetails> getDisbursedLoanDisbursementDetails() {
return getDisbursementDetails().stream() // return getDisbursementDetails().stream() //
.filter(it -> it.actualDisbursementDate() != null) // .filter(it -> it.actualDisbursementDate() != null) //
@@ -105,4 +105,12 @@ public interface LoanTransactionRepository extends JpaRepository<LoanTransaction
""") """)
List<Long> findTransactionIdsByLoan(@Param("loan") Loan loan); List<Long> findTransactionIdsByLoan(@Param("loan") Loan loan);
@Query("""
SELECT lt.id FROM LoanTransaction lt
WHERE lt.loan = :loan
AND lt.id IS NOT NULL
AND lt.reversed = true
""")
List<Long> findReversedTransactionIdsByLoan(@Param("loan") Loan loan);
} }
@@ -104,7 +104,7 @@ public class LoanChargeService {
final List<Long> existingReversedTransactionIds, final LoanTransaction paymentTransaction, final Integer installmentNumber) { final List<Long> existingReversedTransactionIds, final LoanTransaction paymentTransaction, final Integer installmentNumber) {
loanChargeValidator.validateChargePaymentNotInFuture(paymentTransaction); loanChargeValidator.validateChargePaymentNotInFuture(paymentTransaction);
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
LoanCharge charge = null; LoanCharge charge = null;
for (final LoanCharge loanCharge : loan.getCharges()) { for (final LoanCharge loanCharge : loan.getCharges()) {
if (loanCharge.isActive() && chargeId.equals(loanCharge.getId())) { if (loanCharge.isActive() && chargeId.equals(loanCharge.getId())) {
@@ -41,7 +41,7 @@ public class LoanRefundService {
public void makeRefund(final Loan loan, final LoanTransaction loanTransaction, final List<Long> existingTransactionIds, public void makeRefund(final Loan loan, final LoanTransaction loanTransaction, final List<Long> existingTransactionIds,
final List<Long> existingReversedTransactionIds) { final List<Long> existingReversedTransactionIds) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
loanRefundValidator.validateTransferRefund(loan, loanTransaction); loanRefundValidator.validateTransferRefund(loan, loanTransaction);
@@ -62,7 +62,7 @@ public class LoanRefundService {
public void makeRefundForActiveLoan(final Loan loan, final LoanTransaction loanTransaction, final List<Long> existingTransactionIds, public void makeRefundForActiveLoan(final Loan loan, final LoanTransaction loanTransaction, final List<Long> existingTransactionIds,
final List<Long> existingReversedTransactionIds) { final List<Long> existingReversedTransactionIds) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
handleRefundTransaction(loan, loanTransaction); handleRefundTransaction(loan, loanTransaction);
} }
@@ -72,7 +72,7 @@ public class LoanRefundService {
loanRefundValidator.validateCreditBalanceRefund(loan, newCreditBalanceRefundTransaction); loanRefundValidator.validateCreditBalanceRefund(loan, newCreditBalanceRefundTransaction);
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
loan.getLoanTransactions().add(newCreditBalanceRefundTransaction); loan.getLoanTransactions().add(newCreditBalanceRefundTransaction);
@@ -72,7 +72,7 @@ public class LoanScheduleService {
public void recalculateScheduleFromLastTransaction(final Loan loan, final ScheduleGeneratorDTO generatorDTO, public void recalculateScheduleFromLastTransaction(final Loan loan, final ScheduleGeneratorDTO generatorDTO,
final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds) { final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
if (!loan.isProgressiveSchedule()) { if (!loan.isProgressiveSchedule()) {
if (loan.isInterestBearingAndInterestRecalculationEnabled() && !loan.isChargedOff()) { if (loan.isInterestBearingAndInterestRecalculationEnabled() && !loan.isChargedOff()) {
regenerateRepaymentScheduleWithInterestRecalculation(loan, generatorDTO); regenerateRepaymentScheduleWithInterestRecalculation(loan, generatorDTO);
@@ -61,7 +61,7 @@ public class CapitalizedIncomeWritePlatformServiceImpl implements CapitalizedInc
loanTransactionValidator.validateCapitalizedIncome(command, loanId); loanTransactionValidator.validateCapitalizedIncome(command, loanId);
final Loan loan = loanAssembler.assembleFrom(loanId); final Loan loan = loanAssembler.assembleFrom(loanId);
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final Map<String, Object> changes = new LinkedHashMap<>(); final Map<String, Object> changes = new LinkedHashMap<>();
// Create payment details // Create payment details
final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes); final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes);
@@ -445,7 +445,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
private void handlePayDisbursementTransaction(final Loan loan, final Long chargeId, final LoanTransaction chargesPayment, private void handlePayDisbursementTransaction(final Loan loan, final Long chargeId, final LoanTransaction chargesPayment,
final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds) { final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
LoanCharge charge = null; LoanCharge charge = null;
for (final LoanCharge loanCharge : loan.getCharges()) { for (final LoanCharge loanCharge : loan.getCharges()) {
if (loanCharge.isActive() && chargeId.equals(loanCharge.getId())) { if (loanCharge.isActive() && chargeId.equals(loanCharge.getId())) {
@@ -768,7 +768,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
final List<Long> existingTransactionIds = new ArrayList<>(); final List<Long> existingTransactionIds = new ArrayList<>();
final List<Long> existingReversedTransactionIds = new ArrayList<>(); final List<Long> existingReversedTransactionIds = new ArrayList<>();
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final ScheduleGeneratorDTO scheduleGeneratorDTO = null; final ScheduleGeneratorDTO scheduleGeneratorDTO = null;
final LoanRepaymentScheduleInstallment foreCloseDetail = loanBalanceService.fetchLoanForeclosureDetail(loan, foreClosureDate); final LoanRepaymentScheduleInstallment foreCloseDetail = loanBalanceService.fetchLoanForeclosureDetail(loan, foreClosureDate);
@@ -989,7 +989,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
final List<Long> existingTransactionIds = new ArrayList<>(); final List<Long> existingTransactionIds = new ArrayList<>();
final List<Long> existingReversedTransactionIds = new ArrayList<>(); final List<Long> existingReversedTransactionIds = new ArrayList<>();
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final LoanTransaction interestRefundTransaction = LoanTransaction.interestRefund(loan, loan.getOffice(), refundAmount, final LoanTransaction interestRefundTransaction = LoanTransaction.interestRefund(loan, loan.getOffice(), refundAmount,
loanRefundRequest.getPrincipal(), loanRefundRequest.getInterest(), loanRefundRequest.getFeeCharges(), loanRefundRequest.getPrincipal(), loanRefundRequest.getInterest(), loanRefundRequest.getFeeCharges(),
@@ -1077,7 +1077,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
final List<Long> existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) { final List<Long> existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) {
loanChargeValidator.validateRepaymentTypeTransactionNotBeforeAChargeRefund(loan, repaymentTransaction, "created"); loanChargeValidator.validateRepaymentTypeTransactionNotBeforeAChargeRefund(loan, repaymentTransaction, "created");
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
loanDownPaymentHandlerService.handleRepaymentOrRecoveryOrWaiverTransaction(loan, repaymentTransaction, null, scheduleGeneratorDTO); loanDownPaymentHandlerService.handleRepaymentOrRecoveryOrWaiverTransaction(loan, repaymentTransaction, null, scheduleGeneratorDTO);
} }
@@ -358,7 +358,8 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche
Loan loan = loanRescheduleRequest.getLoan(); Loan loan = loanRescheduleRequest.getLoan();
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(
loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan,
loanRescheduleRequest.getRescheduleFromDate()); loanRescheduleRequest.getRescheduleFromDate());
@@ -246,7 +246,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
return; return;
} }
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
processIncomePostingAndAccruals(loan); processIncomePostingAndAccruals(loan);
this.loanRepositoryWrapper.saveAndFlush(loan); this.loanRepositoryWrapper.saveAndFlush(loan);
postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds);
@@ -60,7 +60,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L
@Transactional @Transactional
public void processCapitalizedIncomeAmortizationOnLoanChargeOff(@NotNull final Loan loan) { public void processCapitalizedIncomeAmortizationOnLoanChargeOff(@NotNull final Loan loan) {
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
LocalDate transactionDate = loan.getChargedOffOnDate(); LocalDate transactionDate = loan.getChargedOffOnDate();
if (transactionDate == null) { if (transactionDate == null) {
@@ -106,7 +106,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L
public void processCapitalizedIncomeAmortizationOnLoanUndoChargeOff(@NotNull final LoanTransaction loanTransaction) { public void processCapitalizedIncomeAmortizationOnLoanUndoChargeOff(@NotNull final LoanTransaction loanTransaction) {
final Loan loan = loanTransaction.getLoan(); final Loan loan = loanTransaction.getLoan();
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
loan.getLoanTransactions().stream().filter(LoanTransaction::isCapitalizedIncomeAmortization) loan.getLoanTransactions().stream().filter(LoanTransaction::isCapitalizedIncomeAmortization)
.filter(transaction -> transaction.getTransactionDate().equals(loanTransaction.getTransactionDate())) .filter(transaction -> transaction.getTransactionDate().equals(loanTransaction.getTransactionDate()))
@@ -220,7 +220,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
validateAddingNewChargeAllowed(loanDisburseDetails); validateAddingNewChargeAllowed(loanDisburseDetails);
} }
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
boolean isAppliedOnBackDate = false; boolean isAppliedOnBackDate = false;
LoanCharge loanCharge = null; LoanCharge loanCharge = null;
@@ -842,7 +842,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
return; return;
} }
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
boolean runInterestRecalculation = false; boolean runInterestRecalculation = false;
LocalDate recalculateFrom = DateUtils.getBusinessLocalDate(); LocalDate recalculateFrom = DateUtils.getBusinessLocalDate();
LocalDate lastChargeDate = null; LocalDate lastChargeDate = null;
@@ -904,7 +904,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
final LocalDate transactionDate, final ExternalId txnExternalId, PaymentDetail paymentDetail) { final LocalDate transactionDate, final ExternalId txnExternalId, PaymentDetail paymentDetail) {
businessEventNotifierService.notifyPreBusinessEvent(new LoanChargeAdjustmentPreBusinessEvent(loan)); businessEventNotifierService.notifyPreBusinessEvent(new LoanChargeAdjustmentPreBusinessEvent(loan));
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
LoanTransaction loanChargeAdjustmentTransaction = LoanTransaction.chargeAdjustment(loan, transactionAmount, transactionDate, LoanTransaction loanChargeAdjustmentTransaction = LoanTransaction.chargeAdjustment(loan, transactionAmount, transactionDate,
txnExternalId, paymentDetail); txnExternalId, paymentDetail);
@@ -953,7 +953,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
private void undoInstalmentFee(Map<String, Object> changes, Loan loan, LoanTransaction loanTransaction, private void undoInstalmentFee(Map<String, Object> changes, Loan loan, LoanTransaction loanTransaction,
LoanChargePaidBy loanChargePaidBy) { LoanChargePaidBy loanChargePaidBy) {
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
LoanCharge loanCharge = loanChargePaidBy.getLoanCharge(); LoanCharge loanCharge = loanChargePaidBy.getLoanCharge();
final Integer installmentNumber = loanChargePaidBy.getInstallmentNumber(); final Integer installmentNumber = loanChargePaidBy.getInstallmentNumber();
LoanInstallmentCharge chargePerInstallment; LoanInstallmentCharge chargePerInstallment;
@@ -1009,7 +1009,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
final LoanChargePaidBy loanChargePaidBy) { final LoanChargePaidBy loanChargePaidBy) {
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
LoanCharge loanCharge = loanChargePaidBy.getLoanCharge(); LoanCharge loanCharge = loanChargePaidBy.getLoanCharge();
BigDecimal amountWaived = loanCharge.getAmountWaived(loan.getCurrency()).getAmount(); BigDecimal amountWaived = loanCharge.getAmountWaived(loan.getCurrency()).getAmount();
if (!loanCharge.isWaived() || amountWaived == null) { if (!loanCharge.isWaived() || amountWaived == null) {
@@ -1489,7 +1489,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
loan.updateSummaryWithTotalFeeChargesDueAtDisbursement(loan.deriveSumTotalOfChargesDueAtDisbursement()); loan.updateSummaryWithTotalFeeChargesDueAtDisbursement(loan.deriveSumTotalOfChargesDueAtDisbursement());
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final LoanTransaction waiveLoanChargeTransaction = LoanTransaction.waiveLoanCharge(loan, loan.getOffice(), amountWaived, final LoanTransaction waiveLoanChargeTransaction = LoanTransaction.waiveLoanCharge(loan, loan.getOffice(), amountWaived,
transactionDate, feeChargesWaived, penaltyChargesWaived, unrecognizedIncome, externalId); transactionDate, feeChargesWaived, penaltyChargesWaived, unrecognizedIncome, externalId);
@@ -396,10 +396,10 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
if (isAccountTransfer) { if (isAccountTransfer) {
disburseLoanToSavings(loan, command, amountToDisburse, paymentDetail); disburseLoanToSavings(loan, command, amountToDisburse, paymentDetail);
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
} else { } else {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
disbursementTransaction = LoanTransaction.disbursement(loan, amountToDisburse, paymentDetail, actualDisbursementDate, disbursementTransaction = LoanTransaction.disbursement(loan, amountToDisburse, paymentDetail, actualDisbursementDate,
txnExternalId, loan.getTotalOverpaidAsMoney()); txnExternalId, loan.getTotalOverpaidAsMoney());
disbursementTransaction.updateLoan(loan); disbursementTransaction.updateLoan(loan);
@@ -770,11 +770,11 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
if (isAccountTransfer) { if (isAccountTransfer) {
disburseLoanToSavings(loan, command, disburseAmount, paymentDetail); disburseLoanToSavings(loan, command, disburseAmount, paymentDetail);
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
} else { } else {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
LoanTransaction disbursementTransaction = LoanTransaction.disbursement(loan, disburseAmount, paymentDetail, LoanTransaction disbursementTransaction = LoanTransaction.disbursement(loan, disburseAmount, paymentDetail,
actualDisbursementDate, txnExternalId, loan.getTotalOverpaidAsMoney()); actualDisbursementDate, txnExternalId, loan.getTotalOverpaidAsMoney());
disbursementTransaction.updateLoan(loan); disbursementTransaction.updateLoan(loan);
@@ -1043,7 +1043,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
// save already existing transaction ids // save already existing transaction ids
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final String noteText = command.stringValueOfParameterNamed("note"); final String noteText = command.stringValueOfParameterNamed("note");
final Map<String, Object> changes = new LinkedHashMap<>(); final Map<String, Object> changes = new LinkedHashMap<>();
@@ -1315,7 +1315,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
checkClientOrGroupActive(loan); checkClientOrGroupActive(loan);
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
businessEventNotifierService.notifyPreBusinessEvent(new LoanChargebackTransactionBusinessEvent(loanTransaction)); businessEventNotifierService.notifyPreBusinessEvent(new LoanChargebackTransactionBusinessEvent(loanTransaction));
@@ -1754,7 +1754,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
businessEventNotifierService.notifyPreBusinessEvent(new LoanInitiateTransferBusinessEvent(loan)); businessEventNotifierService.notifyPreBusinessEvent(new LoanInitiateTransferBusinessEvent(loan));
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
ExternalId externalId = externalIdFactory.create(); ExternalId externalId = externalIdFactory.create();
final LoanTransaction newTransferTransaction = LoanTransaction.initiateTransfer(loan.getOffice(), loan, transferDate, externalId); final LoanTransaction newTransferTransaction = LoanTransaction.initiateTransfer(loan.getOffice(), loan, transferDate, externalId);
loan.addLoanTransaction(newTransferTransaction); loan.addLoanTransaction(newTransferTransaction);
@@ -1774,7 +1774,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final Staff loanOfficer) { final Staff loanOfficer) {
businessEventNotifierService.notifyPreBusinessEvent(new LoanAcceptTransferBusinessEvent(loan)); businessEventNotifierService.notifyPreBusinessEvent(new LoanAcceptTransferBusinessEvent(loan));
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
ExternalId externalId = externalIdFactory.create(); ExternalId externalId = externalIdFactory.create();
final LoanTransaction newTransferAcceptanceTransaction = LoanTransaction.approveTransfer(acceptedInOffice, loan, transferDate, final LoanTransaction newTransferAcceptanceTransaction = LoanTransaction.approveTransfer(acceptedInOffice, loan, transferDate,
externalId); externalId);
@@ -1803,7 +1803,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
businessEventNotifierService.notifyPreBusinessEvent(new LoanWithdrawTransferBusinessEvent(loan)); businessEventNotifierService.notifyPreBusinessEvent(new LoanWithdrawTransferBusinessEvent(loan));
final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List<Long> existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final List<Long> existingReversedTransactionIds = new ArrayList<>(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
ExternalId externalId = externalIdFactory.create(); ExternalId externalId = externalIdFactory.create();
@@ -2330,7 +2330,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
private CommandProcessingResult processLoanDisbursementDetail(Loan loan, Long loanId, JsonCommand command, private CommandProcessingResult processLoanDisbursementDetail(Loan loan, Long loanId, JsonCommand command,
LoanDisbursementDetails loanDisbursementDetails) { LoanDisbursementDetails loanDisbursementDetails) {
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
final Map<String, Object> changes = new LinkedHashMap<>(); final Map<String, Object> changes = new LinkedHashMap<>();
LocalDate recalculateFrom = null; LocalDate recalculateFrom = null;
ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
@@ -2805,7 +2805,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
} }
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
final LoanTransaction chargeOffTransaction = LoanTransaction.chargeOff(loan, transactionDate, txnExternalId); final LoanTransaction chargeOffTransaction = LoanTransaction.chargeOff(loan, transactionDate, txnExternalId);
@@ -2864,7 +2864,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final Long loanId = command.getLoanId(); final Long loanId = command.getLoanId();
final Loan loan = this.loanAssembler.assembleFrom(loanId); final Loan loan = this.loanAssembler.assembleFrom(loanId);
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
checkClientOrGroupActive(loan); checkClientOrGroupActive(loan);
if (!loan.isOpen()) { if (!loan.isOpen()) {
throw new GeneralPlatformDomainRuleException("error.msg.loan.is.not.active", throw new GeneralPlatformDomainRuleException("error.msg.loan.is.not.active",
@@ -2948,7 +2948,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
createNote(loan, command, changes); createNote(loan, command, changes);
// Initial transaction ids for journal entry generation // Initial transaction ids for journal entry generation
final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List<Long> existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan);
final List<Long> existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final List<Long> existingReversedTransactionIds = loanTransactionRepository.findReversedTransactionIdsByLoan(loan);
// Create refund transaction(s) // Create refund transaction(s)
Pair<LoanTransaction, LoanTransaction> refundTransactions = loanAccountDomainService.makeRefund(loan, scheduleGeneratorDTO, Pair<LoanTransaction, LoanTransaction> refundTransactions = loanAccountDomainService.makeRefund(loan, scheduleGeneratorDTO,
loanTransactionType, transactionDate, transactionAmount, paymentDetail, txnExternalId); loanTransactionType, transactionDate, transactionAmount, paymentDetail, txnExternalId);
@@ -3059,7 +3059,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final LoanStatus currentStatus = loan.getStatus(); final LoanStatus currentStatus = loan.getStatus();
final LoanStatus statusEnum = this.loanLifecycleStateMachine.dryTransition(LoanEvent.LOAN_DISBURSAL_UNDO, loan); final LoanStatus statusEnum = this.loanLifecycleStateMachine.dryTransition(LoanEvent.LOAN_DISBURSAL_UNDO, loan);
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
if (!statusEnum.hasStateOf(currentStatus)) { if (!statusEnum.hasStateOf(currentStatus)) {
this.loanLifecycleStateMachine.transition(LoanEvent.LOAN_DISBURSAL_UNDO, loan); this.loanLifecycleStateMachine.transition(LoanEvent.LOAN_DISBURSAL_UNDO, loan);
actualChanges.put(PARAM_STATUS, LoanEnumerations.status(loan.getLoanStatus())); actualChanges.put(PARAM_STATUS, LoanEnumerations.status(loan.getLoanStatus()));
@@ -3171,7 +3171,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
changes.put(PARAM_STATUS, LoanEnumerations.status(loan.getLoanStatus())); changes.put(PARAM_STATUS, LoanEnumerations.status(loan.getLoanStatus()));
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final String txnExternalId = command.stringValueOfParameterNamedAllowingNull(EXTERNAL_ID); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull(EXTERNAL_ID);
@@ -3235,7 +3235,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds, final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds,
final ScheduleGeneratorDTO scheduleGeneratorDTO) { final ScheduleGeneratorDTO scheduleGeneratorDTO) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final LocalDate closureDate = command.localDateValueOfParameterNamed(TRANSACTION_DATE); final LocalDate closureDate = command.localDateValueOfParameterNamed(TRANSACTION_DATE);
final String txnExternalId = command.stringValueOfParameterNamedAllowingNull(EXTERNAL_ID); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull(EXTERNAL_ID);
@@ -3350,7 +3350,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final LocalDate lastTransactionDate = lastDisbursalTransaction.getTransactionDate(); final LocalDate lastTransactionDate = lastDisbursalTransaction.getTransactionDate();
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
loanTransactions = loan.retrieveListOfTransactionsExcludeAccruals(); loanTransactions = loan.retrieveListOfTransactionsExcludeAccruals();
Collections.reverse(loanTransactions); Collections.reverse(loanTransactions);
@@ -3385,7 +3385,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
private void waiveInterest(final Loan loan, final LoanTransaction waiveInterestTransaction, final List<Long> existingTransactionIds, private void waiveInterest(final Loan loan, final LoanTransaction waiveInterestTransaction, final List<Long> existingTransactionIds,
final List<Long> existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) { final List<Long> existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
loanDownPaymentHandlerService.handleRepaymentOrRecoveryOrWaiverTransaction(loan, waiveInterestTransaction, null, loanDownPaymentHandlerService.handleRepaymentOrRecoveryOrWaiverTransaction(loan, waiveInterestTransaction, null,
scheduleGeneratorDTO); scheduleGeneratorDTO);
@@ -3393,7 +3393,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
private void undoWrittenOff(final Loan loan, final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds) { private void undoWrittenOff(final Loan loan, final List<Long> existingTransactionIds, final List<Long> existingReversedTransactionIds) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
final LoanTransaction writeOffTransaction = loan.findWriteOffTransaction(); final LoanTransaction writeOffTransaction = loan.findWriteOffTransaction();
loanChargeValidator.validateRepaymentTypeTransactionNotBeforeAChargeRefund(writeOffTransaction.getLoan(), writeOffTransaction, loanChargeValidator.validateRepaymentTypeTransactionNotBeforeAChargeRefund(writeOffTransaction.getLoan(), writeOffTransaction,
"reversed"); "reversed");
@@ -239,7 +239,7 @@ public class LoanAdjustmentServiceImpl implements LoanAdjustmentService {
final List<Long> existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO, final List<Long> existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO,
final ExternalId reversalExternalId) { final ExternalId reversalExternalId) {
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
loanTransactionValidator.validateActivityNotBeforeClientOrGroupTransferDate(loan, LoanEvent.LOAN_REPAYMENT_OR_WAIVER, loanTransactionValidator.validateActivityNotBeforeClientOrGroupTransferDate(loan, LoanEvent.LOAN_REPAYMENT_OR_WAIVER,
transactionForAdjustment.getTransactionDate()); transactionForAdjustment.getTransactionDate());
@@ -235,7 +235,7 @@ class LoanAdjustmentServiceImplTest {
// Mock methods called inside adjustExistingTransaction // Mock methods called inside adjustExistingTransaction
when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList()); when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList());
when(loan.findExistingReversedTransactionIds()).thenReturn(Collections.emptyList()); when(loanTransactionRepository.findReversedTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList());
doNothing().when(loanTransactionValidator).validateActivityNotBeforeClientOrGroupTransferDate(any(), any(), any()); doNothing().when(loanTransactionValidator).validateActivityNotBeforeClientOrGroupTransferDate(any(), any(), any());
when(loan.isClosedWrittenOff()).thenReturn(false); when(loan.isClosedWrittenOff()).thenReturn(false);
when(newTransactionDetail.isRepaymentLikeType()).thenReturn(true); when(newTransactionDetail.isRepaymentLikeType()).thenReturn(true);
@@ -280,7 +280,7 @@ class LoanAdjustmentServiceImplTest {
// Mock methods called inside adjustExistingTransaction // Mock methods called inside adjustExistingTransaction
when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList()); when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList());
when(loan.findExistingReversedTransactionIds()).thenReturn(Collections.emptyList()); when(loanTransactionRepository.findReversedTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList());
doNothing().when(loanTransactionValidator).validateActivityNotBeforeClientOrGroupTransferDate(any(), any(), any()); doNothing().when(loanTransactionValidator).validateActivityNotBeforeClientOrGroupTransferDate(any(), any(), any());
when(loan.isClosedWrittenOff()).thenReturn(false); when(loan.isClosedWrittenOff()).thenReturn(false);
when(newTransactionDetail.isRepaymentLikeType()).thenReturn(true); when(newTransactionDetail.isRepaymentLikeType()).thenReturn(true);
@@ -193,7 +193,7 @@ class LoanChargeWritePlatformServiceImplTest {
List<Long> existingTransactionIds = new ArrayList<>(); List<Long> existingTransactionIds = new ArrayList<>();
List<Long> existingReversedTransactionIds = new ArrayList<>(); List<Long> existingReversedTransactionIds = new ArrayList<>();
when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(existingTransactionIds); when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(existingTransactionIds);
when(loan.findExistingReversedTransactionIds()).thenReturn(existingReversedTransactionIds); when(loanTransactionRepository.findReversedTransactionIdsByLoan(loan)).thenReturn(existingReversedTransactionIds);
when(loan.getLoanCharges()).thenReturn(new HashSet<>()); when(loan.getLoanCharges()).thenReturn(new HashSet<>());
when(loan.getDisbursementDate()).thenReturn(LocalDate.now(ZoneId.systemDefault())); when(loan.getDisbursementDate()).thenReturn(LocalDate.now(ZoneId.systemDefault()));