This is an automated email from the ASF dual-hosted git repository.
arnold 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 fd45f43f36 FINERACT-2235: fix loan list assotiations flag for loans
without summary
fd45f43f36 is described below
commit fd45f43f3685cbb4d7d2d88cd5b25295d0baa2b3
Author: CsengeSóti <[email protected]>
AuthorDate: Tue Apr 22 18:03:07 2025 +0200
FINERACT-2235: fix loan list assotiations flag for loans without summary
---
.../loanaccount/api/LoansApiResource.java | 26 +++++----
.../loan/LoanApiIntegrationTest.java | 65 ++++++++++++++++++++++
2 files changed, 79 insertions(+), 12 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
index 6e3a24403b..04dde09757 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
@@ -495,18 +495,20 @@ public class LoansApiResource {
final Set<String> associationParameters =
ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters());
if
(associationParameters.contains(DataTableApiConstant.summaryAssociateParamName))
{
loanBasicDetails.getPageItems().forEach(i -> {
- Collection<DisbursementData> disbursementData =
this.loanReadPlatformService.retrieveLoanDisbursementDetails(i.getId());
- final RepaymentScheduleRelatedLoanData
repaymentScheduleRelatedData = new RepaymentScheduleRelatedLoanData(
- i.getTimeline().getExpectedDisbursementDate(),
i.getTimeline().getActualDisbursementDate(), i.getCurrency(),
- i.getPrincipal(), i.getInArrearsTolerance(),
i.getFeeChargesAtDisbursementCharged());
- final LoanScheduleData repaymentSchedule =
this.loanReadPlatformService.retrieveRepaymentSchedule(i.getId(),
- repaymentScheduleRelatedData, disbursementData,
i.isInterestRecalculationEnabled(),
-
LoanScheduleType.fromEnumOptionData(i.getLoanScheduleType()));
- LoanSummaryDataProvider loanSummaryDataProvider =
loanSummaryProviderDelegate
-
.resolveLoanSummaryDataProvider(i.getTransactionProcessingStrategyCode());
-
i.setSummary(loanSummaryDataProvider.withTransactionAmountsSummary(i.getId(),
i.getSummary(), repaymentSchedule,
-
loanSummaryBalancesRepository.retrieveLoanSummaryBalancesByTransactionType(i.getId(),
-
LoanApiConstants.LOAN_SUMMARY_TRANSACTION_TYPES)));
+ if (i.getSummary() != null) {
+ Collection<DisbursementData> disbursementData =
this.loanReadPlatformService.retrieveLoanDisbursementDetails(i.getId());
+ final RepaymentScheduleRelatedLoanData
repaymentScheduleRelatedData = new RepaymentScheduleRelatedLoanData(
+ i.getTimeline().getExpectedDisbursementDate(),
i.getTimeline().getActualDisbursementDate(), i.getCurrency(),
+ i.getPrincipal(), i.getInArrearsTolerance(),
i.getFeeChargesAtDisbursementCharged());
+ final LoanScheduleData repaymentSchedule =
this.loanReadPlatformService.retrieveRepaymentSchedule(i.getId(),
+ repaymentScheduleRelatedData, disbursementData,
i.isInterestRecalculationEnabled(),
+
LoanScheduleType.fromEnumOptionData(i.getLoanScheduleType()));
+ LoanSummaryDataProvider loanSummaryDataProvider =
loanSummaryProviderDelegate
+
.resolveLoanSummaryDataProvider(i.getTransactionProcessingStrategyCode());
+
i.setSummary(loanSummaryDataProvider.withTransactionAmountsSummary(i.getId(),
i.getSummary(), repaymentSchedule,
+
loanSummaryBalancesRepository.retrieveLoanSummaryBalancesByTransactionType(i.getId(),
+
LoanApiConstants.LOAN_SUMMARY_TRANSACTION_TYPES)));
+ }
});
}
final ApiRequestJsonSerializationSettings settings =
this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/loan/LoanApiIntegrationTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/loan/LoanApiIntegrationTest.java
index 6724346b71..60c25468af 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/loan/LoanApiIntegrationTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/loan/LoanApiIntegrationTest.java
@@ -213,4 +213,69 @@ public class LoanApiIntegrationTest extends
BaseLoanIntegrationTest {
assertThat(totalUnpaidPayableDueInterest).isEqualByComparingTo(BigDecimal.valueOf(509.59));
});
}
+
+ @Test
+ public void test_retrieveLoansWithSummaryWithoutDisbursement_Works() {
+ AtomicLong createdLoanId = new AtomicLong();
+
+ runAt("01 January 2023", () -> {
+ // Create Client
+ Long clientId =
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+
+ int numberOfRepayments = 3;
+ int repaymentEvery = 1;
+
+ // Create Loan Product
+ PostLoanProductsRequest product =
createOnePeriod30DaysLongNoInterestPeriodicAccrualProduct() //
+ .numberOfRepayments(numberOfRepayments) //
+ .repaymentEvery(repaymentEvery) //
+ .installmentAmountInMultiplesOf(null) //
+
.repaymentFrequencyType(RepaymentFrequencyType.MONTHS.longValue()) //
+ .interestType(InterestType.DECLINING_BALANCE)//
+ .interestRatePerPeriod(10.0)//
+
.interestCalculationPeriodType(InterestCalculationPeriodType.DAILY)//
+
.interestRecalculationCompoundingMethod(InterestRecalculationCompoundingMethod.NONE)//
+
.rescheduleStrategyMethod(RescheduleStrategyMethod.ADJUST_LAST_UNPAID_PERIOD)//
+ .isInterestRecalculationEnabled(true)//
+ .recalculationRestFrequencyInterval(1)//
+
.recalculationRestFrequencyType(RecalculationRestFrequencyType.DAILY)//
+
.rescheduleStrategyMethod(RescheduleStrategyMethod.REDUCE_EMI_AMOUNT)//
+ .allowPartialPeriodInterestCalcualtion(false)//
+ .disallowExpectedDisbursements(false)//
+ .allowApprovedDisbursedAmountsOverApplied(false)//
+ .overAppliedNumber(null)//
+ .overAppliedCalculationType(null)//
+ .multiDisburseLoan(null);//
+
+ PostLoanProductsResponse loanProductResponse =
loanProductHelper.createLoanProduct(product);
+ Long loanProductId = loanProductResponse.getResourceId();
+
+ // Apply and Approve Loan
+ double amount = 5000.0;
+
+ PostLoansRequest applicationRequest = applyLoanRequest(clientId,
loanProductId, "01 January 2023", amount, numberOfRepayments)//
+ .repaymentEvery(repaymentEvery)//
+ .interestRatePerPeriod(BigDecimal.valueOf(10.0))//
+ .loanTermFrequency(numberOfRepayments)//
+ .repaymentFrequencyType(RepaymentFrequencyType.MONTHS)//
+ .loanTermFrequencyType(RepaymentFrequencyType.MONTHS)//
+ .interestType(InterestType.DECLINING_BALANCE)//
+
.interestCalculationPeriodType(InterestCalculationPeriodType.DAILY);//
+
+ PostLoansResponse postLoansResponse =
loanTransactionHelper.applyLoan(applicationRequest);
+
+ PostLoansLoanIdResponse approvedLoanResult =
loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(),
+ approveLoanRequest(amount, "01 January 2023"));
+
+ Long loanId = approvedLoanResult.getLoanId();
+ createdLoanId.getAndSet(loanId);
+ });
+ runAt("01 February 2023", () -> {
+ long loanId = createdLoanId.get();
+ GetLoansLoanIdResponse loanResponse =
loanTransactionHelper.getLoanDetails(loanId);
+ GetLoansResponse loansLoanIdResponse =
loanTransactionHelper.retrieveAllLoans(loanResponse.getAccountNo(), "summary",
null);
+ assertThat(loansLoanIdResponse.getPageItems()).isNotNull();
+
assertThat(loansLoanIdResponse.getPageItems().iterator().next().getSummary()).isNull();
+ });
+ }
}