diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java index 6eaadb04f..7242a60d3 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java @@ -99,8 +99,7 @@ public class LoansApiResource { "repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", "submittedOnDate", "approvedOnDate", "expectedDisbursementDate", "actualDisbursementDate", "expectedFirstRepaymentOnDate", "interestChargedFromDate", "closedOnDate", "expectedMaturityDate", - "lifeCycleStatusId", "lifeCycleStatusText", "lifeCycleStatusDate", - "summary", "repaymentSchedule", "loanRepayments", "permissions", "convenienceData") + "lifeCycleStatusId", "lifeCycleStatusText", "lifeCycleStatusDate") ); Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); @@ -110,15 +109,28 @@ public class LoansApiResource { boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); LoanBasicDetailsData loanBasicDetails = this.loanReadPlatformService.retrieveLoanAccountDetails(loanId); + + Collection loanRepayments = null; + Collection repaymentSchedule = null; + LoanAccountSummaryData summary = null; + LoanPermissionData permissions = null; + + Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); + if (!associationParameters.isEmpty()) { + if (associationParameters.contains("all")) { + responseParameters.addAll(Arrays.asList("summary", "repaymentSchedule", "loanRepayments", "permissions", "convenienceData")); + } else { + responseParameters.addAll(associationParameters); + } + + loanRepayments = this.loanReadPlatformService.retrieveLoanPayments(loanId); + repaymentSchedule = this.loanReadPlatformService.retrieveRepaymentSchedule(loanId); - Collection loanRepayments = this.loanReadPlatformService.retrieveLoanPayments(loanId); - Collection repaymentSchedule = this.loanReadPlatformService.retrieveRepaymentSchedule(loanId); + summary = this.loanReadPlatformService.retrieveSummary(loanBasicDetails.getPrincipal(), repaymentSchedule, loanRepayments); - LoanAccountSummaryData summary = this.loanReadPlatformService.retrieveSummary(loanBasicDetails.getPrincipal(), repaymentSchedule, loanRepayments); - - LoanPermissionData permissions = this.loanReadPlatformService.retrieveLoanPermissions(loanBasicDetails, - summary.isWaiveAllowed(loanBasicDetails.getInArrearsTolerance()), - loanRepayments.size()); + boolean isWaiveAllowed = summary.isWaiveAllowed(loanBasicDetails.getInArrearsTolerance()); + permissions = this.loanReadPlatformService.retrieveLoanPermissions(loanBasicDetails, isWaiveAllowed, loanRepayments.size()); + } LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, summary, repaymentSchedule, loanRepayments, permissions); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiParameterHelper.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiParameterHelper.java index cbe093fe9..783f1659e 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiParameterHelper.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiParameterHelper.java @@ -22,6 +22,18 @@ public class ApiParameterHelper { return fields; } + public static Set extractAssociationsForResponseIfProvided(final MultivaluedMap queryParams) { + Set fields = new HashSet(); + String commaSerperatedParameters = ""; + if (queryParams.getFirst("associations") != null) { + commaSerperatedParameters = queryParams.getFirst("associations"); + if (StringUtils.isNotBlank(commaSerperatedParameters)) { + fields = new HashSet(Arrays.asList(commaSerperatedParameters.split("\\s*,\\s*"))); + } + } + return fields; + } + public static boolean prettyPrint(final MultivaluedMap queryParams) { boolean prettyPrint = false; if (queryParams.getFirst("pretty") != null) { @@ -39,4 +51,4 @@ public class ApiParameterHelper { } return template; } -} +} \ No newline at end of file