FINERACT-2278: Rework raiseBusinessEventForAccrualTransactions to not use loan.getLoanTransactions()
This commit is contained in:
committed by
Adam Saghy
parent
8b86229a3e
commit
07839951b9
+20
@@ -37,6 +37,26 @@ public interface LoanTransactionRepository extends JpaRepository<LoanTransaction
|
|||||||
|
|
||||||
Optional<LoanTransaction> findByIdAndLoanId(Long transactionId, Long loanId);
|
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("""
|
@Query("""
|
||||||
SELECT new org.apache.fineract.portfolio.loanaccount.data.LoanScheduleDelinquencyData(
|
SELECT new org.apache.fineract.portfolio.loanaccount.data.LoanScheduleDelinquencyData(
|
||||||
lt.loan.id,
|
lt.loan.id,
|
||||||
|
|||||||
+15
-9
@@ -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.infrastructure.event.business.service.BusinessEventNotifierService;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
|
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
|
@RequiredArgsConstructor
|
||||||
public class LoanAccrualTransactionBusinessEventServiceImpl implements LoanAccrualTransactionBusinessEventService {
|
public class LoanAccrualTransactionBusinessEventServiceImpl implements LoanAccrualTransactionBusinessEventService {
|
||||||
|
|
||||||
private final BusinessEventNotifierService businessEventNotifierService;
|
private final BusinessEventNotifierService businessEventNotifierService;
|
||||||
|
private final LoanTransactionRepository loanTransactionRepository;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void raiseBusinessEventForAccrualTransactions(Loan loan, List<Long> existingTransactionIds) {
|
public void raiseBusinessEventForAccrualTransactions(final Loan loan, final List<Long> existingTransactionIds) {
|
||||||
for (final LoanTransaction transaction : loan.getLoanTransactions()) {
|
final List<LoanTransactionType> transactionTypes = List.of(LoanTransactionType.ACCRUAL, LoanTransactionType.ACCRUAL_ADJUSTMENT);
|
||||||
if (transaction.isNotReversed() && (transaction.isAccrual() || transaction.isAccrualAdjustment())
|
final List<LoanTransaction> transactions = existingTransactionIds.isEmpty()
|
||||||
&& !existingTransactionIds.contains(transaction.getId())) {
|
? loanTransactionRepository.findNewTransactionsByLoanIdAndType(loan.getId(), transactionTypes)
|
||||||
LoanTransactionBusinessEvent businessEvent = transaction.isAccrual()
|
: loanTransactionRepository.findNewTransactionsByLoanIdAndTypeAndNotInIds(loan.getId(), transactionTypes,
|
||||||
? new LoanAccrualTransactionCreatedBusinessEvent(transaction)
|
existingTransactionIds);
|
||||||
: new LoanAccrualAdjustmentTransactionBusinessEvent(transaction);
|
|
||||||
businessEventNotifierService.notifyPostBusinessEvent(businessEvent);
|
for (final LoanTransaction transaction : transactions) {
|
||||||
}
|
final LoanTransactionBusinessEvent businessEvent = transaction.isAccrual()
|
||||||
|
? new LoanAccrualTransactionCreatedBusinessEvent(transaction)
|
||||||
|
: new LoanAccrualAdjustmentTransactionBusinessEvent(transaction);
|
||||||
|
businessEventNotifierService.notifyPostBusinessEvent(businessEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -196,9 +196,8 @@ public class LoanAccountConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean(LoanAccrualTransactionBusinessEventService.class)
|
@ConditionalOnMissingBean(LoanAccrualTransactionBusinessEventService.class)
|
||||||
public LoanAccrualTransactionBusinessEventService loanAccrualTransactionBusinessEventService(
|
public LoanAccrualTransactionBusinessEventService loanAccrualTransactionBusinessEventService(
|
||||||
|
final BusinessEventNotifierService businessEventNotifierService, final LoanTransactionRepository loanTransactionRepository) {
|
||||||
BusinessEventNotifierService businessEventNotifierService) {
|
return new LoanAccrualTransactionBusinessEventServiceImpl(businessEventNotifierService, loanTransactionRepository);
|
||||||
return new LoanAccrualTransactionBusinessEventServiceImpl(businessEventNotifierService);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
Reference in New Issue
Block a user