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