Cocoa-Puffs commented on code in PR #6109:
URL: https://github.com/apache/fineract/pull/6109#discussion_r3549966827


##########
fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/repository/WorkingCapitalLoanTransactionRepository.java:
##########
@@ -89,4 +90,11 @@ BigDecimal sumBreachRelevantPaid(@Param("wcLoanId") Long 
wcLoanId,
             @Param("transactionTypes") Collection<LoanTransactionType> 
transactionTypes, @Param("fromDate") LocalDate fromDate,
             @Param("toDate") LocalDate toDate);
 
+    @Query("""
+            SELECT t.transactionDate, SUM(t.transactionAmount)
+            FROM WorkingCapitalLoanTransaction t
+            WHERE t.reversed = FALSE
+            GROUP BY t.transactionDate
+            """)
+    List<TransactionDateAndAmountHolder> fetchTransactionDateAndAmount();

Review Comment:
   Should we filter for loan id here?



##########
fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanActiveBreachResetResolver.java:
##########
@@ -38,72 +33,26 @@ public class WorkingCapitalLoanActiveBreachResetResolver {
 
     private final WorkingCapitalLoanBreachActionRepository 
breachActionRepository;
 
-    public Optional<WorkingCapitalLoanBreachAction> 
findLatestActiveReset(final Long workingCapitalLoanId) {
-        return findLatestActiveReset(workingCapitalLoanId, null);
+    private Optional<WorkingCapitalLoanBreachAction> 
findLatestActiveReset(final Long workingCapitalLoanId) {
+        return 
breachActionRepository.findLatestActiveReset(workingCapitalLoanId);
     }
 
-    public Optional<LocalDate> findLatestActiveResetDate(final Long 
workingCapitalLoanId) {
-        return 
findLatestActiveReset(workingCapitalLoanId).map(WorkingCapitalLoanBreachAction::getStartDate);
-    }
-
-    public Optional<WorkingCapitalLoanBreachAction> 
findLatestActiveReset(final Long workingCapitalLoanId,
-            final Long maxActionIdExclusive) {
+    public Optional<WorkingCapitalLoanBreachAction> findLatestReset(final Long 
workingCapitalLoanId) {
         if (workingCapitalLoanId == null) {
             return Optional.empty();
         }
-        final List<WorkingCapitalLoanBreachAction> actions = 
loadActions(workingCapitalLoanId, maxActionIdExclusive);
-        final Optional<Long> latestActiveResetId = 
findLatestActiveResetId(actions);
-        return latestActiveResetId
-                .flatMap(activeResetId -> actions.stream().filter(action -> 
Objects.equals(action.getId(), activeResetId)).findFirst());
+        return breachActionRepository.findLatestReset(workingCapitalLoanId);
     }
 
     public boolean hasActiveReset(final Long workingCapitalLoanId) {
         return findLatestActiveReset(workingCapitalLoanId).isPresent();
     }
 
     public boolean existsActiveResetInPeriod(final Long workingCapitalLoanId, 
final LocalDate fromDate, final LocalDate toDate) {
-        if (workingCapitalLoanId == null || fromDate == null || toDate == 
null) {
-            return false;
-        }
-        final List<WorkingCapitalLoanBreachAction> actions = 
loadActions(workingCapitalLoanId, null);
-        final Set<Long> activeResetIds = findActiveResetIds(actions);
-        return actions.stream().filter(action -> 
WorkingCapitalLoanBreachActionType.RESET.equals(action.getAction()))
-                .filter(action -> action.getId() != null && 
activeResetIds.contains(action.getId()))
-                .anyMatch(action -> isDateWithinPeriod(action.getStartDate(), 
fromDate, toDate));
-    }
-
-    private List<WorkingCapitalLoanBreachAction> loadActions(final Long 
workingCapitalLoanId, final Long maxActionIdExclusive) {
-        return 
breachActionRepository.findByWorkingCapitalLoanIdOrderById(workingCapitalLoanId).stream()
-                .filter(action -> action.getId() != null && 
(maxActionIdExclusive == null || action.getId() < maxActionIdExclusive))
-                .toList();
-    }
-
-    private Optional<Long> findLatestActiveResetId(final 
List<WorkingCapitalLoanBreachAction> actions) {
-        final Deque<Long> activeResetIds = buildActiveResetStack(actions);
-        return activeResetIds.isEmpty() ? Optional.empty() : 
Optional.of(activeResetIds.peekLast());
+        AtomicBoolean exists = new AtomicBoolean(false);
+        
findLatestActiveReset(workingCapitalLoanId).ifPresent(workingCapitalLoanBreachAction
 -> {
+            
exists.set(DateUtils.isDateInRangeInclusive(workingCapitalLoanBreachAction.getStartDate(),
 fromDate, toDate));
+        });
+        return exists.get();

Review Comment:
   Instead of the atomic boolean maybe we could do
   
   `return findLatestActiveReset(workingCapitalLoanId).filter(a -> 
DateUtils.isDateInRangeInclusive(a.getStartDate(), fromDate, 
toDate)).isPresent();`



##########
fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleServiceImpl.java:
##########


Review Comment:
   I think we should add `period.setReset(false)`. If JPA generates the insert 
with reset = null explicitly instead of omitting the field, it will fail 
because of the non null constraint.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to