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 fc0fee1e6 FINERACT-1971: Delinquency evaluation should be happen only 
for Active loans in COB
fc0fee1e6 is described below

commit fc0fee1e6aa9a6c35e0f3690c17f0df44c142176
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Wed Feb 28 19:19:26 2024 -0600

    FINERACT-1971: Delinquency evaluation should be happen only for Active 
loans in COB
---
 .../DelinquencyWritePlatformServiceImpl.java       |  8 ++-
 .../DelinquencyBucketsIntegrationTest.java         | 60 +++++++++++++++++++++-
 2 files changed, 66 insertions(+), 2 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java
index 29451c169..185ef2875 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java
@@ -160,7 +160,13 @@ public class DelinquencyWritePlatformServiceImpl 
implements DelinquencyWritePlat
         if (loan == null) {
             loan = 
this.loanRepository.findOneWithNotFoundDetection(loanScheduleDelinquencyData.getLoanId());
         }
-        final CollectionData collectionData = 
loanDelinquencyDomainService.getOverdueCollectionData(loan, 
effectiveDelinquencyList);
+        CollectionData collectionData = null;
+        // If the Loan is not Active yet, return template data
+        if (loan.isSubmittedAndPendingApproval() || loan.isApproved()) {
+            collectionData = CollectionData.template();
+        } else {
+            collectionData = 
loanDelinquencyDomainService.getOverdueCollectionData(loan, 
effectiveDelinquencyList);
+        }
         log.debug("Delinquency {}", collectionData);
         return new LoanScheduleDelinquencyData(loan.getId(), 
collectionData.getDelinquentDate(), collectionData.getDelinquentDays(), loan);
     }
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
index 9b3953a6d..6743b0007 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
@@ -1580,7 +1580,7 @@ public class DelinquencyBucketsIntegrationTest {
     }
 
     @Test
-    public void testLoanClassificationOnyForActiveLoan() {
+    public void testLoanClassificationOnlyForActiveLoan() {
 
         // Given
         final LoanTransactionHelper loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
@@ -1631,6 +1631,64 @@ public class DelinquencyBucketsIntegrationTest {
         assertNotEquals(0, 
getLoansLoanIdResponse.getDelinquent().getDelinquentAmount());
     }
 
+    @Test
+    public void testLoanClassificationOnlyForActiveLoanWithCOB() {
+        try {
+            GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, 
responseSpec, Boolean.TRUE);
+            final String operationDate = "01 January 2012";
+
+            LocalDate bussinesLocalDate = 
Utils.getDateAsLocalDate(operationDate);
+            log.info("Current date {}", bussinesLocalDate);
+            BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, 
BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
+
+            // Given
+            final LoanTransactionHelper loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+            final SchedulerJobHelper schedulerJobHelper = new 
SchedulerJobHelper(requestSpec);
+
+            ArrayList<Integer> rangeIds = new ArrayList<>();
+            // First Range
+            String jsonRange = DelinquencyRangesHelper.getAsJSON(4, 30);
+            PostDelinquencyRangeResponse delinquencyRangeResponse = 
DelinquencyRangesHelper.createDelinquencyRange(requestSpec,
+                    responseSpec, jsonRange);
+            rangeIds.add(delinquencyRangeResponse.getResourceId());
+
+            String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
+            PostDelinquencyBucketResponse delinquencyBucketResponse = 
DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
+                    responseSpec, jsonBucket);
+            assertNotNull(delinquencyBucketResponse);
+            final GetDelinquencyBucketsResponse delinquencyBucket = 
DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
+                    delinquencyBucketResponse.getResourceId());
+
+            // Client creation
+            final Integer clientId = 
ClientHelper.createClient(this.requestSpec, this.responseSpec, operationDate);
+            final GetLoanProductsProductIdResponse 
getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
+                    Math.toIntExact(delinquencyBucket.getId()), null);
+            assertNotNull(getLoanProductsProductResponse);
+
+            // Create Loan Application
+            final Integer loanId = 
createLoanApplication(loanTransactionHelper, clientId.toString(),
+                    getLoanProductsProductResponse.getId().toString(), 
operationDate, null);
+
+            // run cob for business date 01 January 2012
+            final String jobName = "Loan COB";
+            bussinesLocalDate = Utils.getDateAsLocalDate(operationDate);
+            BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, 
BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
+            schedulerJobHelper.executeAndAwaitJob(jobName);
+
+            // Loan delinquency data
+            GetLoansLoanIdResponse getLoansLoanIdResponse = 
loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
+            loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
+            GetLoansLoanIdDelinquencySummary delinquent = 
getLoansLoanIdResponse.getDelinquent();
+            assertNotNull(getLoansLoanIdResponse);
+            assertNotNull(delinquent);
+            assertEquals(0, delinquent.getDelinquentDays());
+            assertEquals(0, delinquent.getDelinquentAmount());
+
+        } finally {
+            GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, 
responseSpec, Boolean.FALSE);
+        }
+    }
+
     private GetLoanProductsProductIdResponse createLoanProduct(final 
LoanTransactionHelper loanTransactionHelper,
             final Integer delinquencyBucketId, final String 
inArrearsTolerance) {
         final HashMap<String, Object> loanProductMap = new 
LoanProductTestBuilder().withInArrearsTolerance(inArrearsTolerance).build(null,

Reply via email to