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 803709dee..1fbdbfa9b 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 @@ -137,14 +137,19 @@ public class LoansApiResource { Collection fundOptions = this.fundReadPlatformService.retrieveAllFunds(); Collection transactionProcessingStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies(); - LoanBasicDetailsData loanBasicDetails = this.loanReadPlatformService.retrieveClientAndProductDetails(clientId, productId); + Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(); + + LoanBasicDetailsData loanBasicDetails = this.loanReadPlatformService.retrieveClientAndProductDetails(clientId, productId); + if (loanBasicDetails.getCharges() != null) { + chargeOptions.removeAll(loanBasicDetails.getCharges()); + } final boolean convenienceDataRequired = false; - Collection charges = null; + Collection charges = loanBasicDetails.getCharges(); final LoanAccountData newLoanAccount = new LoanAccountData(loanBasicDetails, convenienceDataRequired, null, null, null, null, charges, productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions, - amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions); + amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions); return this.apiJsonSerializerService.serialzieLoanAccountDataToJson(prettyPrint, responseParameters, newLoanAccount); } @@ -213,6 +218,7 @@ public class LoansApiResource { Collection interestTypeOptions = new ArrayList(); Collection interestCalculationPeriodTypeOptions = new ArrayList(); Collection fundOptions = new ArrayList(); + Collection chargeOptions = null; final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters()); if(template) { @@ -230,12 +236,16 @@ public class LoansApiResource { fundOptions = this.fundReadPlatformService.retrieveAllFunds(); transactionProcessingStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies(); + chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(); + if (charges != null) { + chargeOptions.removeAll(charges); + } } final LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, convenienceDataRequired, summary, repaymentSchedule, loanRepayments, permissions, charges, productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions, - amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions); + amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions); return this.apiJsonSerializerService.serialzieLoanAccountDataToJson(prettyPrint, responseParameters, loanAccount); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java index 07e916cc9..e361c172b 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java @@ -37,8 +37,6 @@ public class LoanAccountData { private final EnumOptionData interestType; private final EnumOptionData interestCalculationPeriodType; - private Collection charges; - private final LocalDate submittedOnDate; private final LocalDate approvedOnDate; private final LocalDate expectedDisbursementDate; @@ -49,6 +47,14 @@ public class LoanAccountData { private final LocalDate expectedMaturityDate; private final LocalDate lifeCycleStatusDate; + // associations + private final LoanAccountSummaryData summary; + private final Collection repaymentSchedule; + private final Collection loanRepayments; + private final Collection charges; + private final LoanPermissionData permissions; + private final LoanConvenienceData convenienceData; + // template private final Collection productOptions; private final Collection termFrequencyTypeOptions; @@ -59,14 +65,7 @@ public class LoanAccountData { private final Collection interestTypeOptions; private final Collection interestCalculationPeriodTypeOptions; private final Collection fundOptions; - - // associations - private final LoanAccountSummaryData summary; - private final Collection repaymentSchedule; - private final Collection loanRepayments; - - private final LoanPermissionData permissions; - private final LoanConvenienceData convenienceData; + private final Collection chargeOptions; public LoanAccountData( final LoanBasicDetailsData basicDetails, @@ -84,7 +83,8 @@ public class LoanAccountData { final Collection amortizationTypeOptions, final Collection interestTypeOptions, final Collection interestCalculationPeriodTypeOptions, - final Collection fundOptions) { + final Collection fundOptions, + final Collection chargeOptions) { this.summary = summary; this.repaymentSchedule = repaymentSchedule; this.loanRepayments = loanRepayments; @@ -99,6 +99,7 @@ public class LoanAccountData { this.interestTypeOptions = interestTypeOptions; this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions; this.fundOptions = fundOptions; + this.chargeOptions = chargeOptions; if (convenienceDataRequired) { int maxSubmittedOnOffsetFromToday = basicDetails @@ -324,10 +325,6 @@ public class LoanAccountData { return this.charges; } - public void setCharges(Collection charges) { - this.charges = charges; - } - public Collection getProductOptions() { return productOptions; } @@ -363,4 +360,8 @@ public class LoanAccountData { public Collection getFundOptions() { return fundOptions; } + + public Collection getChargeOptions() { + return chargeOptions; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanBasicDetailsData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanBasicDetailsData.java index 74595df89..184ab424b 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanBasicDetailsData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanBasicDetailsData.java @@ -1,6 +1,7 @@ package org.mifosng.platform.api.data; import java.math.BigDecimal; +import java.util.Collection; import org.joda.time.DateTime; import org.joda.time.Days; @@ -49,6 +50,8 @@ public class LoanBasicDetailsData { private final LocalDate expectedMaturityDate; private final LocalDate lifeCycleStatusDate; + private final Collection charges; + public static LoanBasicDetailsData populateForNewLoanCreation(final Long clientId, final String clientName, final LocalDate expectedDisbursementDate) { return new LoanBasicDetailsData(clientId, clientName, expectedDisbursementDate); } @@ -64,7 +67,7 @@ public class LoanBasicDetailsData { termFrequency, termPeriodFrequencyType, product.getNumberOfRepayments(), product.getRepaymentEvery(), product.getRepaymentFrequencyType(), product.getTransactionProcessingStrategyId(), product.getAmortizationType(), product.getInterestRatePerPeriod(), product.getInterestRateFrequencyType(), product.getInterestType(), product.getInterestCalculationPeriodType(), - loanAccount.expectedDisbursementDate); + loanAccount.expectedDisbursementDate, product.getCharges()); } private LoanBasicDetailsData( @@ -82,7 +85,7 @@ public class LoanBasicDetailsData { final EnumOptionData interestRateFrequencyType, final EnumOptionData interestType, final EnumOptionData interestCalculationPeriodType, - final LocalDate expectedDisbursementDate) { + final LocalDate expectedDisbursementDate, final Collection charges) { this.id = null; this.externalId = null; this.clientId = clientId; @@ -127,6 +130,8 @@ public class LoanBasicDetailsData { this.repaymentsStartingFromDate = null; this.interestChargedFromDate = null; this.lifeCycleStatusDate = null; + + this.charges = charges; } private LoanBasicDetailsData(final Long clientId, final String clientName, final LocalDate expectedDisbursementDate) { @@ -168,6 +173,8 @@ public class LoanBasicDetailsData { this.expectedMaturityDate = null; this.repaymentsStartingFromDate = null; this.interestChargedFromDate = null; + + this.charges = null; } public LoanBasicDetailsData( @@ -202,7 +209,8 @@ public class LoanBasicDetailsData { final LocalDate lifeCycleStatusDate, final Integer termFrequency, final EnumOptionData termPeriodFrequencyType, - final Integer transactionStrategyId) { + final Integer transactionStrategyId, + final Collection charges) { this.id = id; this.externalId = externalId; this.clientId = clientId; @@ -237,6 +245,7 @@ public class LoanBasicDetailsData { this.termFrequency = termFrequency; this.termPeriodFrequencyType = termPeriodFrequencyType; this.transactionStrategyId = transactionStrategyId; + this.charges = charges; } public int getMaxSubmittedOnOffsetFromToday() { @@ -463,4 +472,8 @@ public class LoanBasicDetailsData { public Integer getTransactionStrategyId() { return transactionStrategyId; } + + public Collection getCharges() { + return charges; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanReadPlatformServiceImpl.java index 8d410773e..f8925cb3b 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanReadPlatformServiceImpl.java @@ -6,6 +6,7 @@ import java.sql.SQLException; import java.util.Collection; import org.joda.time.LocalDate; +import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.CurrencyData; import org.mifosng.platform.api.data.EnumOptionData; @@ -469,6 +470,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { lifeCycleStatusDate = closedOnDate; } + Collection charges = null; return new LoanBasicDetailsData(id, externalId, clientId, clientName, loanProductId, loanProductName, loanProductDescription, fundId, fundName, @@ -483,7 +485,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { amortizationType, interestType, interestCalculationPeriodType, status, - lifeCycleStatusDate, termFrequency, termPeriodFrequencyType, transactionStrategyId); + lifeCycleStatusDate, termFrequency, termPeriodFrequencyType, transactionStrategyId, charges); } }