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 3ff70c676..2f2d36835 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 @@ -130,7 +130,8 @@ public class LoansApiResource { boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); responseParameters.addAll(Arrays.asList("productOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions", - "repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions")); + "repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions", + "chargeTemplate")); // tempate related Collection productOptions = this.loanProductReadPlatformService.retrieveAllLoanProductsForLookup(); @@ -146,6 +147,7 @@ public class LoansApiResource { Collection transactionProcessingStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies(); Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(); + ChargeData chargeTemplate = this.chargeReadPlatformService.retrieveLoanChargeTemplate(); LoanBasicDetailsData loanBasicDetails = this.loanReadPlatformService.retrieveClientAndProductDetails(clientId, productId); if (loanBasicDetails.getCharges() != null) { @@ -166,7 +168,7 @@ public class LoansApiResource { final LoanAccountData newLoanAccount = new LoanAccountData(loanBasicDetails, convenienceDataRequired, null, null, null, null, charges, productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions, - amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, allowedLoanOfficers); + amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, chargeTemplate, allowedLoanOfficers); return this.apiJsonSerializerService.serialzieLoanAccountDataToJson(prettyPrint, responseParameters, newLoanAccount); } @@ -240,7 +242,8 @@ public class LoansApiResource { Collection interestCalculationPeriodTypeOptions = new ArrayList(); Collection fundOptions = new ArrayList(); Collection chargeOptions = null; - + ChargeData chargeTemplate = null; + final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters()); if(template) { responseParameters.addAll(Arrays.asList("productOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions", @@ -274,7 +277,7 @@ public class LoansApiResource { final LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, convenienceDataRequired, summary, repaymentSchedule, loanRepayments, permissions, charges, productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions, - amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, allowedLoanOfficers); + amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, chargeTemplate, allowedLoanOfficers); 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 519084953..0d3900306 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 @@ -68,6 +68,7 @@ public class LoanAccountData { private final Collection interestCalculationPeriodTypeOptions; private final Collection fundOptions; private final Collection chargeOptions; + private final ChargeData chargeTemplate; private final Collection loanOfficerOptions; public LoanAccountData( @@ -88,6 +89,7 @@ public class LoanAccountData { final Collection interestCalculationPeriodTypeOptions, final Collection fundOptions, final Collection chargeOptions, + final ChargeData chargeTemplate, final Collection loanOfficerOptions) { this.summary = summary; this.repaymentSchedule = repaymentSchedule; @@ -104,6 +106,7 @@ public class LoanAccountData { this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions; this.fundOptions = fundOptions; this.chargeOptions = chargeOptions; + this.chargeTemplate = chargeTemplate; this.loanOfficerOptions = loanOfficerOptions; if (convenienceDataRequired) { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java index f75fa34b9..31912de0a 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java @@ -151,7 +151,7 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ "loanRepayments", "permissions", "convenienceData", "charges", "productOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions", "repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions", - "loanOfficerId", "loanOfficerName", "loanOfficerOptions")); + "loanOfficerId", "loanOfficerName", "loanOfficerOptions", "chargeTemplate")); private static final Set LOAN_TRANSACTION_DATA_PARAMETERS = new HashSet( Arrays.asList("id", "transactionType", "date", "principal", diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformService.java index 6ddda50d7..aaf650c6e 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformService.java @@ -17,4 +17,6 @@ public interface ChargeReadPlatformService { Collection retrieveLoanProductCharges(Long loanProductId); Collection retrieveLoanCharges(Long loanId); + + ChargeData retrieveLoanChargeTemplate(); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java index f3a905e01..e2dce512c 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java @@ -127,6 +127,23 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService return this.jdbcTemplate.query(sql, rm, new Object[] {ChargeAppliesTo.LOAN.getValue()}); } + @Override + public ChargeData retrieveLoanChargeTemplate() { + this.context.authenticatedUser(); + + List allowedChargeCalculationTypeOptions = Arrays.asList( + chargeCalculationType(ChargeCalculationType.FLAT), + chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT), + chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST), + chargeCalculationType(ChargeCalculationType.PERCENT_OF_INTEREST) + ); + + List allowedChargeTimeOptions = Arrays.asList(chargeTimeType(ChargeTimeType.DISBURSEMENT)); + + return ChargeData.template(null, allowedChargeCalculationTypeOptions, + null, allowedChargeTimeOptions); + } + private static final class ChargeMapper implements RowMapper { public String chargeSchema(){