FINERACT-2354: Allow re-age today if the previous re-age was reversed

This commit is contained in:
Oleksii Novikov
2025-09-09 12:12:22 +02:00
committed by Adam Saghy
parent 5b1d72d15b
commit 7ee1919ddb
3 changed files with 34 additions and 85 deletions
@@ -314,36 +314,6 @@ public interface LoanTransactionRepository extends JpaRepository<LoanTransaction
Optional<LocalDate> findLastNonReversedTransactionDateByLoanAndTypes(@Param("loan") Loan loan,
@Param("types") Set<LoanTransactionType> types);
@Query("""
SELECT lt FROM LoanTransaction lt
WHERE lt.loan = :loan
AND (
(lt.reversed = true AND lt.id IN :existingTransactionIds AND lt.id NOT IN :existingReversedTransactionIds)
OR (lt.id NOT IN :existingTransactionIds)
)
""")
List<LoanTransaction> findTransactionsForAccountingBridge(@Param("loan") Loan loan,
@Param("existingTransactionIds") List<Long> existingTransactionIds,
@Param("existingReversedTransactionIds") List<Long> existingReversedTransactionIds);
@Query("""
SELECT lt FROM LoanTransaction lt
WHERE lt.loan = :loan
AND (
(lt.reversed = true AND lt.id IN :existingTransactionIds)
OR (lt.id NOT IN :existingTransactionIds)
)
""")
List<LoanTransaction> findTransactionsForAccountingBridge(@Param("loan") Loan loan,
@Param("existingTransactionIds") List<Long> existingTransactionIds);
@Query("""
SELECT lt FROM LoanTransaction lt
WHERE lt.loan = :loan
AND lt.reversed = false
""")
List<LoanTransaction> findNonReversedByLoan(@Param("loan") Loan loan);
@Query("""
SELECT lt FROM LoanTransaction lt
WHERE lt.loan = :loan
@@ -482,54 +452,14 @@ public interface LoanTransactionRepository extends JpaRepository<LoanTransaction
BigDecimal calculateTotalRecoveryPaymentAmount(@Param("loan") Loan loan);
@Query("""
SELECT lt FROM LoanTransaction lt
SELECT CASE WHEN COUNT(lt) > 0 THEN true ELSE false END
FROM LoanTransaction lt
WHERE lt.loan = :loan
AND (
(:dateComparison = 'BEFORE' AND lt.dateOf < :chargeOffDate) OR
(:dateComparison = 'EQUAL' AND lt.dateOf = :chargeOffDate) OR
(:dateComparison = 'AFTER' AND lt.dateOf > :chargeOffDate)
)
AND (
(lt.reversed = true AND lt.id IN :existingTransactionIds AND lt.id NOT IN :existingReversedTransactionIds)
OR (lt.id NOT IN :existingTransactionIds)
)
ORDER BY lt.dateOf, lt.createdDate, lt.id
""")
List<LoanTransaction> findTransactionsForChargeOffClassification(@Param("loan") Loan loan,
@Param("chargeOffDate") LocalDate chargeOffDate, @Param("dateComparison") String dateComparison,
@Param("existingTransactionIds") List<Long> existingTransactionIds,
@Param("existingReversedTransactionIds") List<Long> existingReversedTransactionIds);
@Query("""
SELECT lt FROM LoanTransaction lt
WHERE lt.loan = :loan
AND (
(:dateComparison = 'BEFORE' AND lt.dateOf < :chargeOffDate) OR
(:dateComparison = 'EQUAL' AND lt.dateOf = :chargeOffDate) OR
(:dateComparison = 'AFTER' AND lt.dateOf > :chargeOffDate)
)
AND (
(lt.reversed = true AND lt.id IN :existingTransactionIds)
OR (lt.id NOT IN :existingTransactionIds)
)
ORDER BY lt.dateOf, lt.createdDate, lt.id
""")
List<LoanTransaction> findTransactionsForChargeOffClassification(@Param("loan") Loan loan,
@Param("chargeOffDate") LocalDate chargeOffDate, @Param("dateComparison") String dateComparison,
@Param("existingTransactionIds") List<Long> existingTransactionIds);
@Query("""
SELECT lt FROM LoanTransaction lt
WHERE lt.loan = :loan
AND (
(:dateComparison = 'BEFORE' AND lt.dateOf < :chargeOffDate) OR
(:dateComparison = 'EQUAL' AND lt.dateOf = :chargeOffDate) OR
(:dateComparison = 'AFTER' AND lt.dateOf > :chargeOffDate)
)
AND lt.reversed = false
ORDER BY lt.dateOf, lt.createdDate, lt.id
AND lt.typeOf = :type
AND lt.dateOf = :transactionDate
""")
List<LoanTransaction> findTransactionsForChargeOffClassification(@Param("loan") Loan loan,
@Param("chargeOffDate") LocalDate chargeOffDate, @Param("dateComparison") String dateComparison);
boolean existsNonReversedByLoanAndTypeAndDate(@Param("loan") Loan loan, @Param("type") LoanTransactionType type,
@Param("transactionDate") LocalDate transactionDate);
}