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 07839951b9 FINERACT-2278: Rework 
raiseBusinessEventForAccrualTransactions to not use loan.getLoanTransactions()
07839951b9 is described below

commit 07839951b9a89c30e20fcb0b6c666957a276d2e3
Author: mariiaKraievska <[email protected]>
AuthorDate: Mon May 26 11:52:57 2025 +0300

    FINERACT-2278: Rework raiseBusinessEventForAccrualTransactions to not use 
loan.getLoanTransactions()
---
 .../domain/LoanTransactionRepository.java          | 20 ++++++++++++++++++
 ...AccrualTransactionBusinessEventServiceImpl.java | 24 ++++++++++++++--------
 .../starter/LoanAccountConfiguration.java          |  5 ++---
 3 files changed, 37 insertions(+), 12 deletions(-)

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 24256ea155..c4dc6bd606 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
@@ -37,6 +37,26 @@ public interface LoanTransactionRepository extends 
JpaRepository<LoanTransaction
 
     Optional<LoanTransaction> findByIdAndLoanId(Long transactionId, Long 
loanId);
 
+    @Query("""
+            SELECT lt FROM LoanTransaction lt
+            WHERE lt.loan.id = :loanId
+            AND lt.typeOf IN :transactionTypes
+            AND lt.id NOT IN :existingTransactionIds
+            AND lt.reversed = false
+            """)
+    List<LoanTransaction> 
findNewTransactionsByLoanIdAndTypeAndNotInIds(@Param("loanId") Long loanId,
+            @Param("transactionTypes") List<LoanTransactionType> 
transactionTypes,
+            @Param("existingTransactionIds") List<Long> 
existingTransactionIds);
+
+    @Query("""
+            SELECT lt FROM LoanTransaction lt
+            WHERE lt.loan.id = :loanId
+            AND lt.typeOf IN :transactionTypes
+            AND lt.reversed = false
+            """)
+    List<LoanTransaction> findNewTransactionsByLoanIdAndType(@Param("loanId") 
Long loanId,
+            @Param("transactionTypes") List<LoanTransactionType> 
transactionTypes);
+
     @Query("""
             SELECT new 
org.apache.fineract.portfolio.loanaccount.data.LoanScheduleDelinquencyData(
                 lt.loan.id,
diff --git 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
index bf96b21a6d..608d98a2a5 100644
--- 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
+++ 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
@@ -26,22 +26,28 @@ import 
org.apache.fineract.infrastructure.event.business.domain.loan.transaction
 import 
org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType;
 
 @RequiredArgsConstructor
 public class LoanAccrualTransactionBusinessEventServiceImpl implements 
LoanAccrualTransactionBusinessEventService {
 
     private final BusinessEventNotifierService businessEventNotifierService;
+    private final LoanTransactionRepository loanTransactionRepository;
 
     @Override
-    public void raiseBusinessEventForAccrualTransactions(Loan loan, List<Long> 
existingTransactionIds) {
-        for (final LoanTransaction transaction : loan.getLoanTransactions()) {
-            if (transaction.isNotReversed() && (transaction.isAccrual() || 
transaction.isAccrualAdjustment())
-                    && !existingTransactionIds.contains(transaction.getId())) {
-                LoanTransactionBusinessEvent businessEvent = 
transaction.isAccrual()
-                        ? new 
LoanAccrualTransactionCreatedBusinessEvent(transaction)
-                        : new 
LoanAccrualAdjustmentTransactionBusinessEvent(transaction);
-                
businessEventNotifierService.notifyPostBusinessEvent(businessEvent);
-            }
+    public void raiseBusinessEventForAccrualTransactions(final Loan loan, 
final List<Long> existingTransactionIds) {
+        final List<LoanTransactionType> transactionTypes = 
List.of(LoanTransactionType.ACCRUAL, LoanTransactionType.ACCRUAL_ADJUSTMENT);
+        final List<LoanTransaction> transactions = 
existingTransactionIds.isEmpty()
+                ? 
loanTransactionRepository.findNewTransactionsByLoanIdAndType(loan.getId(), 
transactionTypes)
+                : 
loanTransactionRepository.findNewTransactionsByLoanIdAndTypeAndNotInIds(loan.getId(),
 transactionTypes,
+                        existingTransactionIds);
+
+        for (final LoanTransaction transaction : transactions) {
+            final LoanTransactionBusinessEvent businessEvent = 
transaction.isAccrual()
+                    ? new 
LoanAccrualTransactionCreatedBusinessEvent(transaction)
+                    : new 
LoanAccrualAdjustmentTransactionBusinessEvent(transaction);
+            
businessEventNotifierService.notifyPostBusinessEvent(businessEvent);
         }
     }
 }
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 8b26a75890..615c81a041 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
@@ -196,9 +196,8 @@ public class LoanAccountConfiguration {
     @Bean
     @ConditionalOnMissingBean(LoanAccrualTransactionBusinessEventService.class)
     public LoanAccrualTransactionBusinessEventService 
loanAccrualTransactionBusinessEventService(
-
-            BusinessEventNotifierService businessEventNotifierService) {
-        return new 
LoanAccrualTransactionBusinessEventServiceImpl(businessEventNotifierService);
+            final BusinessEventNotifierService businessEventNotifierService, 
final LoanTransactionRepository loanTransactionRepository) {
+        return new 
LoanAccrualTransactionBusinessEventServiceImpl(businessEventNotifierService, 
loanTransactionRepository);
     }
 
     @Bean

Reply via email to