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 e169b5cd6 FINERACT-1971: Delinquency evaluation should be happen only 
for Active Loans
e169b5cd6 is described below

commit e169b5cd615e12a1f26f0f03f1583176cc863f22
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Wed Jan 17 11:05:08 2024 -0600

    FINERACT-1971: Delinquency evaluation should be happen only for Active Loans
---
 .../DelinquencyReadPlatformServiceImpl.java        |  5 ++
 .../DelinquencyBucketsIntegrationTest.java         | 66 +++++++++++++++++++++-
 2 files changed, 69 insertions(+), 2 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyReadPlatformServiceImpl.java
index ac8cca761..e12ab385b 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyReadPlatformServiceImpl.java
@@ -126,6 +126,11 @@ public class DelinquencyReadPlatformServiceImpl implements 
DelinquencyReadPlatfo
         if (optLoan.isPresent()) {
             final Loan loan = optLoan.get();
 
+            // If the Loan is not Active yet, return template data
+            if (loan.isSubmittedAndPendingApproval() || loan.isApproved()) {
+                return CollectionData.template();
+            }
+
             final List<LoanDelinquencyAction> savedDelinquencyList = 
retrieveLoanDelinquencyActions(loanId);
             List<LoanDelinquencyActionData> effectiveDelinquencyList = 
delinquencyEffectivePauseHelper
                     .calculateEffectiveDelinquencyList(savedDelinquencyList);
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 b8898ce00..80b8e9669 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
@@ -1571,6 +1571,58 @@ public class DelinquencyBucketsIntegrationTest {
         }
     }
 
+    @Test
+    public void testLoanClassificationOnyForActiveLoan() {
+
+        // Given
+        final LoanTransactionHelper loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+
+        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 and Loan account creation
+        final Integer clientId = ClientHelper.createClient(this.requestSpec, 
this.responseSpec, "01 January 2012");
+        final GetLoanProductsProductIdResponse getLoanProductsProductResponse 
= createLoanProduct(loanTransactionHelper,
+                Math.toIntExact(delinquencyBucket.getId()), null);
+        assertNotNull(getLoanProductsProductResponse);
+
+        final LocalDate todaysDate = Utils.getLocalDateOfTenant();
+        // Older date to have more than one overdue installment
+        LocalDate transactionDate = todaysDate.minusDays(37);
+        String operationDate = Utils.dateFormatter.format(transactionDate);
+
+        // Create Loan Application
+        final Integer loanId = createLoanApplication(loanTransactionHelper, 
clientId.toString(),
+                getLoanProductsProductResponse.getId().toString(), 
operationDate, null);
+
+        // Evaluate default delinquent values in No Active Loan
+        GetLoansLoanIdResponse getLoansLoanIdResponse = 
loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
+        assertNotNull(getLoansLoanIdResponse);
+        assertNotNull(getLoansLoanIdResponse.getDelinquent());
+        assertEquals(0, 
getLoansLoanIdResponse.getDelinquent().getDelinquentDays());
+        assertEquals(0, 
getLoansLoanIdResponse.getDelinquent().getDelinquentAmount());
+
+        // Loan Disbursement
+        disburseLoanAccount(loanTransactionHelper, loanId, operationDate);
+        // Evaluate default delinquent values in No Active Loan
+        getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, 
responseSpec, loanId);
+        assertNotNull(getLoansLoanIdResponse);
+        assertNotNull(getLoansLoanIdResponse.getDelinquent());
+        assertNotEquals(0, 
getLoansLoanIdResponse.getDelinquent().getDelinquentDays());
+        assertNotEquals(0, 
getLoansLoanIdResponse.getDelinquent().getDelinquentAmount());
+    }
+
     private GetLoanProductsProductIdResponse createLoanProduct(final 
LoanTransactionHelper loanTransactionHelper,
             final Integer delinquencyBucketId, final String 
inArrearsTolerance) {
         final HashMap<String, Object> loanProductMap = new 
LoanProductTestBuilder().withInArrearsTolerance(inArrearsTolerance).build(null,
@@ -1595,8 +1647,8 @@ public class DelinquencyBucketsIntegrationTest {
         return loanTransactionHelper.updateLoanProduct(id, requestModifyLoan);
     }
 
-    private Integer createLoanAccount(final LoanTransactionHelper 
loanTransactionHelper, final String clientId, final String loanProductId,
-            final String operationDate, final String inArrearsTolerance) {
+    private Integer createLoanApplication(final LoanTransactionHelper 
loanTransactionHelper, final String clientId,
+            final String loanProductId, final String operationDate, final 
String inArrearsTolerance) {
         final String loanApplicationJSON = new 
LoanApplicationTestBuilder().withPrincipal(principalAmount).withLoanTermFrequency("12")
                 
.withLoanTermFrequencyAsMonths().withNumberOfRepayments("12").withRepaymentEveryAfter("1")
                 .withRepaymentFrequencyTypeAsMonths() //
@@ -1608,7 +1660,17 @@ public class DelinquencyBucketsIntegrationTest {
                 .build(clientId, loanProductId, null);
         final Integer loanId = 
loanTransactionHelper.getLoanId(loanApplicationJSON);
         loanTransactionHelper.approveLoan(operationDate, principalAmount, 
loanId, null);
+        return loanId;
+    }
+
+    private void disburseLoanAccount(final LoanTransactionHelper 
loanTransactionHelper, final Integer loanId, final String operationDate) {
         
loanTransactionHelper.disburseLoanWithNetDisbursalAmount(operationDate, loanId, 
principalAmount);
+    }
+
+    private Integer createLoanAccount(final LoanTransactionHelper 
loanTransactionHelper, final String clientId, final String loanProductId,
+            final String operationDate, final String inArrearsTolerance) {
+        final Integer loanId = createLoanApplication(loanTransactionHelper, 
clientId, loanProductId, operationDate, inArrearsTolerance);
+        disburseLoanAccount(loanTransactionHelper, loanId, operationDate);
         return loanId;
     }
 

Reply via email to