adamsaghy commented on code in PR #3515:
URL: https://github.com/apache/fineract/pull/3515#discussion_r1371840166


##########
fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java:
##########
@@ -382,4 +408,96 @@ public int compare(DelinquencyRange o1, DelinquencyRange 
o2) {
         return ranges;
     }
 
+    private void applyDelinquencyDetailsForLoanInstallments(final Loan loan, 
final DelinquencyBucket delinquencyBucket,
+            final Map<Long, CollectionData> installmentsCollectionData) {
+        for (Map.Entry<Long, CollectionData> installmentCollectionData : 
installmentsCollectionData.entrySet()) {
+            Optional<LoanRepaymentScheduleInstallment> installment = 
loan.getRepaymentScheduleInstallments().stream()
+                    .filter(instalment -> 
instalment.getId().equals(installmentCollectionData.getKey())).findFirst();
+            if (installment.isPresent()) {
+                setInstallmentDelinquencyDetails(loan, installment.get(), 
delinquencyBucket, installmentCollectionData.getValue());
+            }
+        }
+    }
+
+    private void setInstallmentDelinquencyDetails(final Loan loan, final 
LoanRepaymentScheduleInstallment installment,
+            final DelinquencyBucket delinquencyBucket, final CollectionData 
installmentDelinquencyData) {
+        DelinquencyRange delinquencyRangeForInstallment = 
getInstallmentDelinquencyRange(delinquencyBucket,
+                installmentDelinquencyData.getDelinquentDays());
+        setDelinquencyDetailsForInstallment(loan, installment, 
installmentDelinquencyData, delinquencyRangeForInstallment);
+    }
+
+    private DelinquencyRange getInstallmentDelinquencyRange(final 
DelinquencyBucket delinquencyBucket, Long overDueDays) {
+        DelinquencyRange delinquencyRangeForInstallment = null;
+        if (overDueDays > 0) {
+            // Sort the ranges based on the minAgeDays
+            final List<DelinquencyRange> ranges = 
sortDelinquencyRangesByMinAge(delinquencyBucket.getRanges());
+            for (final DelinquencyRange delinquencyRange : ranges) {
+                if (delinquencyRange.getMaximumAgeDays() == null) { // Last 
Range in the Bucket
+                    if (delinquencyRange.getMinimumAgeDays() <= overDueDays) {
+                        delinquencyRangeForInstallment = delinquencyRange;
+                        break;
+                    }
+                } else {
+                    if (delinquencyRange.getMinimumAgeDays() <= overDueDays && 
delinquencyRange.getMaximumAgeDays() >= overDueDays) {
+                        delinquencyRangeForInstallment = delinquencyRange;
+                        break;
+                    }
+                }
+            }
+
+        }
+        return delinquencyRangeForInstallment;
+    }
+
+    private void setDelinquencyDetailsForInstallment(final Loan loan, final 
LoanRepaymentScheduleInstallment installment,
+            CollectionData installmentDelinquencyData, final DelinquencyRange 
delinquencyRangeForInstallment) {
+        List<LoanInstallmentDelinquencyTag> installmentDelinquencyTags = new 
ArrayList<>();
+        LocalDate delinquencyCalculationDate = 
DateUtils.getBusinessLocalDate();
+
+        Optional<LoanInstallmentDelinquencyTag> 
currentInstallmentDelinquencyTag = loanInstallmentDelinquencyTagRepository

Review Comment:
   `currentInstallmentDelinquencyTag` is kind of meaningles... please review 
this logic again



##########
fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java:
##########
@@ -382,4 +408,96 @@ public int compare(DelinquencyRange o1, DelinquencyRange 
o2) {
         return ranges;
     }
 
+    private void applyDelinquencyDetailsForLoanInstallments(final Loan loan, 
final DelinquencyBucket delinquencyBucket,
+            final Map<Long, CollectionData> installmentsCollectionData) {
+        for (Map.Entry<Long, CollectionData> installmentCollectionData : 
installmentsCollectionData.entrySet()) {
+            Optional<LoanRepaymentScheduleInstallment> installment = 
loan.getRepaymentScheduleInstallments().stream()
+                    .filter(instalment -> 
instalment.getId().equals(installmentCollectionData.getKey())).findFirst();
+            if (installment.isPresent()) {
+                setInstallmentDelinquencyDetails(loan, installment.get(), 
delinquencyBucket, installmentCollectionData.getValue());
+            }
+        }
+    }
+
+    private void setInstallmentDelinquencyDetails(final Loan loan, final 
LoanRepaymentScheduleInstallment installment,
+            final DelinquencyBucket delinquencyBucket, final CollectionData 
installmentDelinquencyData) {
+        DelinquencyRange delinquencyRangeForInstallment = 
getInstallmentDelinquencyRange(delinquencyBucket,
+                installmentDelinquencyData.getDelinquentDays());
+        setDelinquencyDetailsForInstallment(loan, installment, 
installmentDelinquencyData, delinquencyRangeForInstallment);
+    }
+
+    private DelinquencyRange getInstallmentDelinquencyRange(final 
DelinquencyBucket delinquencyBucket, Long overDueDays) {
+        DelinquencyRange delinquencyRangeForInstallment = null;
+        if (overDueDays > 0) {
+            // Sort the ranges based on the minAgeDays
+            final List<DelinquencyRange> ranges = 
sortDelinquencyRangesByMinAge(delinquencyBucket.getRanges());
+            for (final DelinquencyRange delinquencyRange : ranges) {
+                if (delinquencyRange.getMaximumAgeDays() == null) { // Last 
Range in the Bucket
+                    if (delinquencyRange.getMinimumAgeDays() <= overDueDays) {
+                        delinquencyRangeForInstallment = delinquencyRange;
+                        break;
+                    }
+                } else {
+                    if (delinquencyRange.getMinimumAgeDays() <= overDueDays && 
delinquencyRange.getMaximumAgeDays() >= overDueDays) {
+                        delinquencyRangeForInstallment = delinquencyRange;
+                        break;
+                    }
+                }
+            }
+
+        }
+        return delinquencyRangeForInstallment;
+    }
+
+    private void setDelinquencyDetailsForInstallment(final Loan loan, final 
LoanRepaymentScheduleInstallment installment,
+            CollectionData installmentDelinquencyData, final DelinquencyRange 
delinquencyRangeForInstallment) {
+        List<LoanInstallmentDelinquencyTag> installmentDelinquencyTags = new 
ArrayList<>();
+        LocalDate delinquencyCalculationDate = 
DateUtils.getBusinessLocalDate();
+
+        Optional<LoanInstallmentDelinquencyTag> 
currentInstallmentDelinquencyTag = loanInstallmentDelinquencyTagRepository

Review Comment:
   `currentInstallmentDelinquencyTag` is kind of meaningless... please review 
this logic again



-- 
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