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