diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index a11d7c710..d97e419f8 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -760,13 +760,6 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom { return maturityDate; } - public List findExistingTransactionIds() { - return getLoanTransactions().stream() // - .filter(loanTransaction -> loanTransaction.getId() != null) // - .map(LoanTransaction::getId) // - .collect(Collectors.toList()); - } - public List findExistingReversedTransactionIds() { return getLoanTransactions().stream() // .filter(LoanTransaction::isReversed) // diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRepository.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRepository.java index 8d9a1a010..1bb0f618e 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRepository.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRepository.java @@ -98,4 +98,11 @@ public interface LoanTransactionRepository extends JpaRepository findLastTransactionDateForReprocessing(@Param("loan") Loan loan); + @Query(""" + SELECT lt.id FROM LoanTransaction lt + WHERE lt.loan = :loan + AND lt.id IS NOT NULL + """) + List findTransactionIdsByLoan(@Param("loan") Loan loan); + } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeService.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeService.java index 4cd54591f..d383641f5 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeService.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeService.java @@ -51,6 +51,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleProcessingWrapper; import org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.domain.SingleLoanChargeRepaymentScheduleProcessingWrapper; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.MoneyHolder; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.TransactionCtx; @@ -63,6 +64,7 @@ public class LoanChargeService { private final LoanTransactionProcessingService loanTransactionProcessingService; private final LoanLifecycleStateMachine loanLifecycleStateMachine; private final LoanBalanceService loanBalanceService; + private final LoanTransactionRepository loanTransactionRepository; public void recalculateAllCharges(final Loan loan) { Set charges = loan.getActiveCharges(); @@ -101,7 +103,7 @@ public class LoanChargeService { public void makeChargePayment(final Loan loan, final Long chargeId, final List existingTransactionIds, final List existingReversedTransactionIds, final LoanTransaction paymentTransaction, final Integer installmentNumber) { loanChargeValidator.validateChargePaymentNotInFuture(paymentTransaction); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); LoanCharge charge = null; for (final LoanCharge loanCharge : loan.getCharges()) { diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanRefundService.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanRefundService.java index 66b10bf24..9500471d9 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanRefundService.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanRefundService.java @@ -25,6 +25,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanEvent; import org.apache.fineract.portfolio.loanaccount.domain.LoanLifecycleStateMachine; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.MoneyHolder; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.TransactionCtx; import org.apache.fineract.portfolio.loanaccount.serialization.LoanRefundValidator; @@ -35,10 +36,11 @@ public class LoanRefundService { private final LoanRefundValidator loanRefundValidator; private final LoanTransactionProcessingService loadTransactionProcessingService; private final LoanLifecycleStateMachine loanLifecycleStateMachine; + private final LoanTransactionRepository loanTransactionRepository; public void makeRefund(final Loan loan, final LoanTransaction loanTransaction, final List existingTransactionIds, final List existingReversedTransactionIds) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); loanRefundValidator.validateTransferRefund(loan, loanTransaction); @@ -59,7 +61,7 @@ public class LoanRefundService { public void makeRefundForActiveLoan(final Loan loan, final LoanTransaction loanTransaction, final List existingTransactionIds, final List existingReversedTransactionIds) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); handleRefundTransaction(loan, loanTransaction); @@ -69,7 +71,7 @@ public class LoanRefundService { final List existingTransactionIds, final List existingReversedTransactionIds) { loanRefundValidator.validateCreditBalanceRefund(loan, newCreditBalanceRefundTransaction); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); loan.getLoanTransactions().add(newCreditBalanceRefundTransaction); diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java index 90140a171..44f5ea1a5 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java @@ -26,6 +26,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleDTO; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleModel; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType; @@ -40,6 +41,7 @@ public class LoanScheduleService { private final LoanMapper loanMapper; private final LoanTransactionProcessingService loanTransactionProcessingService; private final LoanScheduleComponent loanSchedule; + private final LoanTransactionRepository loanTransactionRepository; /** * Ability to regenerate the repayment schedule based on the loans current details/state. @@ -69,7 +71,7 @@ public class LoanScheduleService { public void recalculateScheduleFromLastTransaction(final Loan loan, final ScheduleGeneratorDTO generatorDTO, final List existingTransactionIds, final List existingReversedTransactionIds) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); if (!loan.isProgressiveSchedule()) { if (loan.isInterestBearingAndInterestRecalculationEnabled() && !loan.isChargedOff()) { diff --git a/fineract-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/SingleLoanChargeRepaymentScheduleProcessingWrapperTest.java b/fineract-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/SingleLoanChargeRepaymentScheduleProcessingWrapperTest.java index 290b3e733..4fdaaca1b 100644 --- a/fineract-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/SingleLoanChargeRepaymentScheduleProcessingWrapperTest.java +++ b/fineract-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/SingleLoanChargeRepaymentScheduleProcessingWrapperTest.java @@ -69,7 +69,8 @@ public class SingleLoanChargeRepaymentScheduleProcessingWrapperTest { private ArgumentCaptor penaltyChargesWrittenOff = ArgumentCaptor.forClass(Money.class); private final LoanChargeService loanChargeService = new LoanChargeService(mock(LoanChargeValidator.class), - mock(LoanTransactionProcessingService.class), mock(LoanLifecycleStateMachine.class), mock(LoanBalanceService.class)); + mock(LoanTransactionProcessingService.class), mock(LoanLifecycleStateMachine.class), mock(LoanBalanceService.class), + mock(LoanTransactionRepository.class)); @BeforeAll public static void init() { diff --git a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/CapitalizedIncomeWritePlatformServiceImpl.java b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/CapitalizedIncomeWritePlatformServiceImpl.java index 6c22ce20a..43e98b9ed 100644 --- a/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/CapitalizedIncomeWritePlatformServiceImpl.java +++ b/fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/CapitalizedIncomeWritePlatformServiceImpl.java @@ -60,7 +60,7 @@ public class CapitalizedIncomeWritePlatformServiceImpl implements CapitalizedInc public CommandProcessingResult addCapitalizedIncome(final Long loanId, final JsonCommand command) { loanTransactionValidator.validateCapitalizedIncome(command, loanId); final Loan loan = loanAssembler.assembleFrom(loanId); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final Map changes = new LinkedHashMap<>(); // Create payment details diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java index 081853410..89e54ff47 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java @@ -444,7 +444,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { private void handlePayDisbursementTransaction(final Loan loan, final Long chargeId, final LoanTransaction chargesPayment, final List existingTransactionIds, final List existingReversedTransactionIds) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); LoanCharge charge = null; for (final LoanCharge loanCharge : loan.getCharges()) { @@ -767,7 +767,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); final ScheduleGeneratorDTO scheduleGeneratorDTO = null; final LoanRepaymentScheduleInstallment foreCloseDetail = loanBalanceService.fetchLoanForeclosureDetail(loan, foreClosureDate); @@ -988,7 +988,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); final LoanTransaction interestRefundTransaction = LoanTransaction.interestRefund(loan, loan.getOffice(), refundAmount, @@ -1076,7 +1076,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { private void makeRepayment(final Loan loan, final LoanTransaction repaymentTransaction, final List existingTransactionIds, final List existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) { loanChargeValidator.validateRepaymentTypeTransactionNotBeforeAChargeRefund(loan, repaymentTransaction, "created"); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); loanDownPaymentHandlerService.handleRepaymentOrRecoveryOrWaiverTransaction(loan, repaymentTransaction, null, scheduleGeneratorDTO); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java index 4a4f44e12..4113a842d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java @@ -54,6 +54,7 @@ import org.apache.fineract.portfolio.account.service.AccountTransfersWritePlatfo import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.Guarantor; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingDetails; @@ -87,6 +88,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { private final ConfigurationDomainService configurationDomainService; private final ExternalIdFactory externalIdFactory; private final LoanRepository loanRepository; + private final LoanTransactionRepository loanTransactionRepository; @PostConstruct public void addListeners() { @@ -583,7 +585,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { @Override public void onBusinessEvent(LoanUndoDisbursalBusinessEvent event) { Loan loan = event.get(); - List reversedTransactions = new ArrayList<>(loan.findExistingTransactionIds()); + List reversedTransactions = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); reverseTransaction(reversedTransactions); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java index 60de8d07e..f93b3ec5f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java @@ -60,6 +60,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToT import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariationType; import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleDTO; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.DefaultScheduledDateGenerator; @@ -120,6 +121,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche private final LoanTermVariationsMapper loanTermVariationsMapper; private final LoanAccountingBridgeMapper loanAccountingBridgeMapper; private final LoanScheduleComponent loanSchedule; + private final LoanTransactionRepository loanTransactionRepository; /** * create a new instance of the LoanRescheduleRequest object from the JsonCommand object and persist @@ -355,7 +357,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche changes.put("approvedByUserId", appUser.getId()); Loan loan = loanRescheduleRequest.getLoan(); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java index b50865a53..885c983af 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java @@ -245,7 +245,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing if (isProgressiveAccrual(loan)) { return; } - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); processIncomePostingAndAccruals(loan); this.loanRepositoryWrapper.saveAndFlush(loan); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java index 373b47902..a6ee2d661 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java @@ -59,7 +59,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L @Override @Transactional public void processCapitalizedIncomeAmortizationOnLoanChargeOff(@NotNull final Loan loan) { - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); LocalDate transactionDate = loan.getChargedOffOnDate(); @@ -105,7 +105,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L @Transactional public void processCapitalizedIncomeAmortizationOnLoanUndoChargeOff(@NotNull final LoanTransaction loanTransaction) { final Loan loan = loanTransaction.getLoan(); - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); loan.getLoanTransactions().stream().filter(LoanTransaction::isCapitalizedIncomeAmortization) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java index aa18fdc61..32a242200 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java @@ -219,7 +219,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo // apply this charge validateAddingNewChargeAllowed(loanDisburseDetails); } - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); boolean isAppliedOnBackDate = false; @@ -841,7 +841,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo if (optPenaltyCharge.isEmpty()) { return; } - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); boolean runInterestRecalculation = false; LocalDate recalculateFrom = DateUtils.getBusinessLocalDate(); @@ -903,7 +903,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo private LoanTransaction applyChargeAdjustment(final Loan loan, final LoanCharge loanCharge, final BigDecimal transactionAmount, final LocalDate transactionDate, final ExternalId txnExternalId, PaymentDetail paymentDetail) { businessEventNotifierService.notifyPreBusinessEvent(new LoanChargeAdjustmentPreBusinessEvent(loan)); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); LoanTransaction loanChargeAdjustmentTransaction = LoanTransaction.chargeAdjustment(loan, transactionAmount, transactionDate, @@ -952,7 +952,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo private void undoInstalmentFee(Map changes, Loan loan, LoanTransaction loanTransaction, LoanChargePaidBy loanChargePaidBy) { - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); LoanCharge loanCharge = loanChargePaidBy.getLoanCharge(); final Integer installmentNumber = loanChargePaidBy.getInstallmentNumber(); @@ -1008,7 +1008,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo private void undoSpecifiedDueDateCharge(final Map changes, final Loan loan, final LoanTransaction loanTransaction, final LoanChargePaidBy loanChargePaidBy) { - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); LoanCharge loanCharge = loanChargePaidBy.getLoanCharge(); BigDecimal amountWaived = loanCharge.getAmountWaived(loan.getCurrency()).getAmount(); @@ -1226,7 +1226,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo public Loan runScheduleRecalculation(Loan loan, final LocalDate recalculateFrom) { if (loan.isInterestBearingAndInterestRecalculationEnabled() && !loan.isChargedOff()) { - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); ScheduleGeneratorDTO generatorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); loanScheduleService.handleRegenerateRepaymentScheduleWithInterestRecalculation(loan, generatorDTO); loanAccrualsProcessingService.reprocessExistingAccruals(loan); @@ -1488,7 +1488,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo loan.updateSummaryWithTotalFeeChargesDueAtDisbursement(loan.deriveSumTotalOfChargesDueAtDisbursement()); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); final LoanTransaction waiveLoanChargeTransaction = LoanTransaction.waiveLoanCharge(loan, loan.getOffice(), amountWaived, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index dae94b210..79e241f8d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -395,10 +395,10 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf LoanTransaction disbursementTransaction = null; if (isAccountTransfer) { disburseLoanToSavings(loan, command, amountToDisburse, paymentDetail); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); } else { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); disbursementTransaction = LoanTransaction.disbursement(loan, amountToDisburse, paymentDetail, actualDisbursementDate, txnExternalId, loan.getTotalOverpaidAsMoney()); @@ -769,11 +769,11 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final ExternalId txnExternalId = externalIdFactory.createFromCommand(command, LoanApiConstants.externalIdParameterName); if (isAccountTransfer) { disburseLoanToSavings(loan, command, disburseAmount, paymentDetail); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); } else { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); LoanTransaction disbursementTransaction = LoanTransaction.disbursement(loan, disburseAmount, paymentDetail, actualDisbursementDate, txnExternalId, loan.getTotalOverpaidAsMoney()); @@ -1042,7 +1042,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf businessEventNotifierService.notifyPreBusinessEvent(new LoanTransactionInterestPaymentWaiverPreBusinessEvent(loan)); // save already existing transaction ids - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); final String noteText = command.stringValueOfParameterNamed("note"); @@ -1314,7 +1314,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } checkClientOrGroupActive(loan); - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); businessEventNotifierService.notifyPreBusinessEvent(new LoanChargebackTransactionBusinessEvent(loanTransaction)); @@ -1753,7 +1753,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf businessEventNotifierService.notifyPreBusinessEvent(new LoanInitiateTransferBusinessEvent(loan)); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); ExternalId externalId = externalIdFactory.create(); final LoanTransaction newTransferTransaction = LoanTransaction.initiateTransfer(loan.getOffice(), loan, transferDate, externalId); @@ -1773,7 +1773,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf public LoanTransaction acceptLoanTransfer(final Loan loan, final LocalDate transferDate, final Office acceptedInOffice, final Staff loanOfficer) { businessEventNotifierService.notifyPreBusinessEvent(new LoanAcceptTransferBusinessEvent(loan)); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); ExternalId externalId = externalIdFactory.create(); final LoanTransaction newTransferAcceptanceTransaction = LoanTransaction.approveTransfer(acceptedInOffice, loan, transferDate, @@ -1802,7 +1802,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf public LoanTransaction withdrawLoanTransfer(final Loan loan, final LocalDate transferDate) { businessEventNotifierService.notifyPreBusinessEvent(new LoanWithdrawTransferBusinessEvent(loan)); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); + final List existingTransactionIds = new ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan)); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); ExternalId externalId = externalIdFactory.create(); @@ -2329,7 +2329,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private CommandProcessingResult processLoanDisbursementDetail(Loan loan, Long loanId, JsonCommand command, LoanDisbursementDetails loanDisbursementDetails) { - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final Map changes = new LinkedHashMap<>(); LocalDate recalculateFrom = null; @@ -2804,7 +2804,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loan.markAsChargedOff(transactionDate, currentUser, null); } - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); final LoanTransaction chargeOffTransaction = LoanTransaction.chargeOff(loan, transactionDate, txnExternalId); @@ -2863,7 +2863,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf this.loanTransactionValidator.validateUndoChargeOff(command.json()); final Long loanId = command.getLoanId(); final Loan loan = this.loanAssembler.assembleFrom(loanId); - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); checkClientOrGroupActive(loan); if (!loan.isOpen()) { @@ -2947,7 +2947,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf // Create note createNote(loan, command, changes); // Initial transaction ids for journal entry generation - final List existingTransactionIds = loan.findExistingTransactionIds(); + final List existingTransactionIds = loanTransactionRepository.findTransactionIdsByLoan(loan); final List existingReversedTransactionIds = loan.findExistingReversedTransactionIds(); // Create refund transaction(s) Pair refundTransactions = loanAccountDomainService.makeRefund(loan, scheduleGeneratorDTO, @@ -3058,7 +3058,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Map actualChanges = new LinkedHashMap<>(); final LoanStatus currentStatus = loan.getStatus(); final LoanStatus statusEnum = this.loanLifecycleStateMachine.dryTransition(LoanEvent.LOAN_DISBURSAL_UNDO, loan); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); if (!statusEnum.hasStateOf(currentStatus)) { this.loanLifecycleStateMachine.transition(LoanEvent.LOAN_DISBURSAL_UNDO, loan); @@ -3170,7 +3170,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loanLifecycleStateMachine.transition(LoanEvent.WRITE_OFF_OUTSTANDING, loan); changes.put(PARAM_STATUS, LoanEnumerations.status(loan.getLoanStatus())); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull(EXTERNAL_ID); @@ -3234,7 +3234,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private Optional close(final Loan loan, final JsonCommand command, final Map changes, final List existingTransactionIds, final List existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); final LocalDate closureDate = command.localDateValueOfParameterNamed(TRANSACTION_DATE); @@ -3349,7 +3349,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final LoanTransaction lastDisbursalTransaction = loanTransactions.get(loanTransactions.size() - 1); final LocalDate lastTransactionDate = lastDisbursalTransaction.getTransactionDate(); - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); loanTransactions = loan.retrieveListOfTransactionsExcludeAccruals(); @@ -3384,7 +3384,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private void waiveInterest(final Loan loan, final LoanTransaction waiveInterestTransaction, final List existingTransactionIds, final List existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); loanDownPaymentHandlerService.handleRepaymentOrRecoveryOrWaiverTransaction(loan, waiveInterestTransaction, null, @@ -3392,7 +3392,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } private void undoWrittenOff(final Loan loan, final List existingTransactionIds, final List existingReversedTransactionIds) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); final LoanTransaction writeOffTransaction = loan.findWriteOffTransaction(); loanChargeValidator.validateRepaymentTypeTransactionNotBeforeAChargeRefund(writeOffTransaction.getLoan(), writeOffTransaction, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/adjustment/LoanAdjustmentServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/adjustment/LoanAdjustmentServiceImpl.java index 0311d062b..bd87d5637 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/adjustment/LoanAdjustmentServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/adjustment/LoanAdjustmentServiceImpl.java @@ -238,7 +238,7 @@ public class LoanAdjustmentServiceImpl implements LoanAdjustmentService { final LoanTransaction transactionForAdjustment, final List existingTransactionIds, final List existingReversedTransactionIds, final ScheduleGeneratorDTO scheduleGeneratorDTO, final ExternalId reversalExternalId) { - existingTransactionIds.addAll(loan.findExistingTransactionIds()); + existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan)); existingReversedTransactionIds.addAll(loan.findExistingReversedTransactionIds()); loanTransactionValidator.validateActivityNotBeforeClientOrGroupTransferDate(loan, LoanEvent.LOAN_REPAYMENT_OR_WAIVER, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java index 3dfa3bcf0..8b26a7589 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java @@ -467,17 +467,20 @@ public class LoanAccountConfiguration { @ConditionalOnMissingBean(LoanChargeService.class) public LoanChargeService loanChargeService(final LoanChargeValidator loanChargeValidator, final LoanTransactionProcessingService loanTransactionProcessingService, - final LoanLifecycleStateMachine loanLifecycleStateMachine, final LoanBalanceService loanBalanceService) { - return new LoanChargeService(loanChargeValidator, loanTransactionProcessingService, loanLifecycleStateMachine, loanBalanceService); + final LoanLifecycleStateMachine loanLifecycleStateMachine, final LoanBalanceService loanBalanceService, + final LoanTransactionRepository loanTransactionRepository) { + return new LoanChargeService(loanChargeValidator, loanTransactionProcessingService, loanLifecycleStateMachine, loanBalanceService, + loanTransactionRepository); } @Bean @ConditionalOnMissingBean(LoanScheduleService.class) public LoanScheduleService loanScheduleService(final LoanChargeService loanChargeService, final ReprocessLoanTransactionsService reprocessLoanTransactionsService, final LoanMapper loanMapper, - final LoanTransactionProcessingService loanTransactionProcessingService, LoanScheduleComponent loanSchedule) { + final LoanTransactionProcessingService loanTransactionProcessingService, LoanScheduleComponent loanSchedule, + final LoanTransactionRepository loanTransactionRepository) { return new LoanScheduleService(loanChargeService, reprocessLoanTransactionsService, loanMapper, loanTransactionProcessingService, - loanSchedule); + loanSchedule, loanTransactionRepository); } @Bean @@ -490,8 +493,9 @@ public class LoanAccountConfiguration { @ConditionalOnMissingBean(LoanRefundService.class) public LoanRefundService loanRefundService(final LoanRefundValidator loanRefundValidator, final LoanTransactionProcessingService loanTransactionProcessingService, - final LoanLifecycleStateMachine loanLifecycleStateMachine) { - return new LoanRefundService(loanRefundValidator, loanTransactionProcessingService, loanLifecycleStateMachine); + final LoanLifecycleStateMachine loanLifecycleStateMachine, final LoanTransactionRepository loanTransactionRepository) { + return new LoanRefundService(loanRefundValidator, loanTransactionProcessingService, loanLifecycleStateMachine, + loanTransactionRepository); } @Bean diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java index 7f19ed333..7b6e64621 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/serialization/serializer/loan/LoanAccountDelinquencyRangeEventSerializerTest.java @@ -92,6 +92,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.serialization.LoanChargeValidator; import org.apache.fineract.portfolio.loanaccount.service.LoanBalanceService; import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService; @@ -128,7 +129,8 @@ public class LoanAccountDelinquencyRangeEventSerializerTest { private AvroDateTimeMapper mapper; private final LoanChargeService loanChargeService = new LoanChargeService(mock(LoanChargeValidator.class), - mock(LoanTransactionProcessingService.class), mock(LoanLifecycleStateMachine.class), mock(LoanBalanceService.class)); + mock(LoanTransactionProcessingService.class), mock(LoanLifecycleStateMachine.class), mock(LoanBalanceService.class), + mock(LoanTransactionRepository.class)); private MockedStatic moneyHelper = Mockito.mockStatic(MoneyHelper.class); diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanAdjustmentServiceImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanAdjustmentServiceImplTest.java index f9a6a9bde..3f940d6bb 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanAdjustmentServiceImplTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanAdjustmentServiceImplTest.java @@ -234,7 +234,7 @@ class LoanAdjustmentServiceImplTest { when(loan.getLoanTransactions()).thenReturn(loanTransactions); // Mock methods called inside adjustExistingTransaction - when(loan.findExistingTransactionIds()).thenReturn(Collections.emptyList()); + when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList()); when(loan.findExistingReversedTransactionIds()).thenReturn(Collections.emptyList()); doNothing().when(loanTransactionValidator).validateActivityNotBeforeClientOrGroupTransferDate(any(), any(), any()); when(loan.isClosedWrittenOff()).thenReturn(false); @@ -279,7 +279,7 @@ class LoanAdjustmentServiceImplTest { LoanTransaction unrelatedTransaction = mock(LoanTransaction.class); // Mock methods called inside adjustExistingTransaction - when(loan.findExistingTransactionIds()).thenReturn(Collections.emptyList()); + when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(Collections.emptyList()); when(loan.findExistingReversedTransactionIds()).thenReturn(Collections.emptyList()); doNothing().when(loanTransactionValidator).validateActivityNotBeforeClientOrGroupTransferDate(any(), any(), any()); when(loan.isClosedWrittenOff()).thenReturn(false); diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java index d0fcf9c70..8624d5c99 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImplTest.java @@ -192,7 +192,7 @@ class LoanChargeWritePlatformServiceImplTest { when(loanAccountService.saveAndFlushLoanWithDataIntegrityViolationChecks(any())).thenReturn(loan); List existingTransactionIds = new ArrayList<>(); List existingReversedTransactionIds = new ArrayList<>(); - when(loan.findExistingTransactionIds()).thenReturn(existingTransactionIds); + when(loanTransactionRepository.findTransactionIdsByLoan(loan)).thenReturn(existingTransactionIds); when(loan.findExistingReversedTransactionIds()).thenReturn(existingReversedTransactionIds); when(loan.getLoanCharges()).thenReturn(new HashSet<>());