This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 13e4c8b55d FINERACT-2276: Deprecate findExistingTransactionIds and 
fetch only the ids from database instead
13e4c8b55d is described below

commit 13e4c8b55defb4184ee928b09907d1d32911b3bf
Author: mariiaKraievska <[email protected]>
AuthorDate: Fri May 23 13:31:17 2025 +0300

    FINERACT-2276: Deprecate findExistingTransactionIds and fetch only the ids 
from database instead
---
 .../portfolio/loanaccount/domain/Loan.java         |  7 ----
 .../domain/LoanTransactionRepository.java          |  7 ++++
 .../loanaccount/service/LoanChargeService.java     |  4 ++-
 .../loanaccount/service/LoanRefundService.java     |  8 +++--
 .../loanaccount/service/LoanScheduleService.java   |  4 ++-
 ...argeRepaymentScheduleProcessingWrapperTest.java |  3 +-
 .../CapitalizedIncomeWritePlatformServiceImpl.java |  2 +-
 .../domain/LoanAccountDomainServiceJpa.java        |  8 ++---
 .../service/GuarantorDomainServiceImpl.java        |  4 ++-
 ...nRescheduleRequestWritePlatformServiceImpl.java |  4 ++-
 .../service/LoanAccrualsProcessingServiceImpl.java |  2 +-
 ...zedIncomeAmortizationProcessingServiceImpl.java |  4 +--
 .../LoanChargeWritePlatformServiceImpl.java        | 14 ++++----
 .../LoanWritePlatformServiceJpaRepositoryImpl.java | 38 +++++++++++-----------
 .../adjustment/LoanAdjustmentServiceImpl.java      |  2 +-
 .../starter/LoanAccountConfiguration.java          | 16 +++++----
 ...AccountDelinquencyRangeEventSerializerTest.java |  4 ++-
 .../service/LoanAdjustmentServiceImplTest.java     |  4 +--
 .../LoanChargeWritePlatformServiceImplTest.java    |  2 +-
 19 files changed, 77 insertions(+), 60 deletions(-)

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 a11d7c7108..d97e419f8f 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<Long> {
         return maturityDate;
     }
 
-    public List<Long> findExistingTransactionIds() {
-        return getLoanTransactions().stream() //
-                .filter(loanTransaction -> loanTransaction.getId() != null) //
-                .map(LoanTransaction::getId) //
-                .collect(Collectors.toList());
-    }
-
     public List<Long> 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 8d9a1a0109..1bb0f618e9 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<LoanTransaction
             """)
     Optional<LocalDate> findLastTransactionDateForReprocessing(@Param("loan") 
Loan loan);
 
+    @Query("""
+            SELECT lt.id FROM LoanTransaction lt
+            WHERE lt.loan = :loan
+            AND lt.id IS NOT NULL
+            """)
+    List<Long> 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 4cd54591f1..d383641f56 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<LoanCharge> charges = loan.getActiveCharges();
@@ -101,7 +103,7 @@ public class LoanChargeService {
     public void makeChargePayment(final Loan loan, final Long chargeId, final 
List<Long> existingTransactionIds,
             final List<Long> 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 66b10bf245..9500471d95 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<Long> existingTransactionIds,
             final List<Long> 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<Long> existingTransactionIds,
             final List<Long> 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<Long> existingTransactionIds, final List<Long> 
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 90140a1716..44f5ea1a58 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<Long> existingTransactionIds, final List<Long> 
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 290b3e733d..4fdaaca1b0 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<Money> 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 6c22ce20ab..43e98b9eda 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> existingReversedTransactionIds = new 
ArrayList<>(loan.findExistingReversedTransactionIds());
         final Map<String, Object> 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 0818534108..89e54ff47d 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<Long> existingTransactionIds, final List<Long> 
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<Long> existingTransactionIds = new ArrayList<>();
         final List<Long> 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<Long> existingTransactionIds = new ArrayList<>();
         final List<Long> 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<Long> existingTransactionIds,
             final List<Long> 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 4a4f44e127..4113a842d4 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<Long> reversedTransactions = new 
ArrayList<>(loan.findExistingTransactionIds());
+            List<Long> 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 60de8d07e9..f93b3ec5f3 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+            final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
             final List<Long> 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 b50865a53e..885c983af2 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> 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 373b479028..a6ee2d6617 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<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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 aa18fdc618..32a242200e 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> existingReversedTransactionIds = new 
ArrayList<>(loan.findExistingReversedTransactionIds());
 
         boolean isAppliedOnBackDate = false;
@@ -841,7 +841,7 @@ public class LoanChargeWritePlatformServiceImpl implements 
LoanChargeWritePlatfo
         if (optPenaltyCharge.isEmpty()) {
             return;
         }
-        final List<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> 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<String, Object> changes, Loan loan, 
LoanTransaction loanTransaction,
             LoanChargePaidBy loanChargePaidBy) {
-        final List<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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<String, Object> changes, 
final Loan loan, final LoanTransaction loanTransaction,
             final LoanChargePaidBy loanChargePaidBy) {
 
-        final List<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+            final List<Long> 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 dae94b2101..79e241f8d5 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> existingReversedTransactionIds = new 
ArrayList<>(loan.findExistingReversedTransactionIds());
 
         final String noteText = command.stringValueOfParameterNamed("note");
@@ -1314,7 +1314,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
         }
         checkClientOrGroupActive(loan);
 
-        final List<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> existingReversedTransactionIds = 
loan.findExistingReversedTransactionIds();
 
         businessEventNotifierService.notifyPreBusinessEvent(new 
LoanChargebackTransactionBusinessEvent(loanTransaction));
@@ -1753,7 +1753,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
 
         businessEventNotifierService.notifyPreBusinessEvent(new 
LoanInitiateTransferBusinessEvent(loan));
 
-        final List<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> 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<Long> existingTransactionIds = new 
ArrayList<>(loan.findExistingTransactionIds());
+        final List<Long> existingTransactionIds = new 
ArrayList<>(loanTransactionRepository.findTransactionIdsByLoan(loan));
         final List<Long> 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<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> existingReversedTransactionIds = 
loan.findExistingReversedTransactionIds();
         final Map<String, Object> changes = new LinkedHashMap<>();
         LocalDate recalculateFrom = null;
@@ -2804,7 +2804,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
             loan.markAsChargedOff(transactionDate, currentUser, null);
         }
 
-        final List<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> 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<Long> existingTransactionIds = 
loan.findExistingTransactionIds();
+        final List<Long> existingTransactionIds = 
loanTransactionRepository.findTransactionIdsByLoan(loan);
         final List<Long> existingReversedTransactionIds = 
loan.findExistingReversedTransactionIds();
         // Create refund transaction(s)
         Pair<LoanTransaction, LoanTransaction> refundTransactions = 
loanAccountDomainService.makeRefund(loan, scheduleGeneratorDTO,
@@ -3058,7 +3058,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
         final Map<String, Object> 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<LoanTransaction> close(final Loan loan, final JsonCommand 
command, final Map<String, Object> changes,
             final List<Long> existingTransactionIds, final List<Long> 
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<Long> existingTransactionIds,
             final List<Long> 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<Long> 
existingTransactionIds, final List<Long> 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 0311d062b0..bd87d56377 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<Long> 
existingTransactionIds,
             final List<Long> 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 3dfa3bcf0d..8b26a75890 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 7f19ed333a..7b6e646212 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> 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 f9a6a9bde0..3f940d6bbb 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 d0fcf9c702..8624d5c996 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<Long> existingTransactionIds = new ArrayList<>();
         List<Long> 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<>());

Reply via email to