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();
+        });
+    }
 }

Reply via email to