diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformService.java index b58bc877e..b223a8830 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformService.java @@ -21,15 +21,30 @@ public interface ChargeReadPlatformService { ChargeData retrieveNewChargeDetails(); /** - * Returns all charges applicable for loans + * Returns all Fees (excluding penalties) applicable for loans + * + * @return + */ + Collection retrieveLoanApplicableFees(); + + /** + * Returns all charges applicable for a given loan account * - * @param feeChargesOnly - * If set to "true", only fees are returned * @param excludeChargeTimes * Excludes Given List of Charge Types from the response * @return */ - Collection retrieveLoanApplicableCharges(boolean feeChargesOnly, ChargeTimeType[] excludeChargeTimes); + Collection retrieveLoanAccountApplicableCharges(final Long loanId, ChargeTimeType[] excludeChargeTimes); + + /** + * Returns all charges applicable for a given loan product (filter based on + * Currency of Selected Loan Product) + * + * @param excludeChargeTimes + * Excludes Given List of Charge Types from the response + * @return + */ + Collection retrieveLoanProductApplicableCharges(final Long loanProductId, ChargeTimeType[] excludeChargeTimes); /** * Returns all Penalties applicable for loans @@ -62,14 +77,14 @@ public interface ChargeReadPlatformService { * @param feeChargesOnly * @return */ - Collection retrieveSavingsAccountApplicableCharges(boolean feeChargesOnly); + Collection retrieveSavingsApplicableCharges(boolean feeChargesOnly); /** * Returns all penalties applicable for savings * * @return */ - Collection retrieveSavingsAccountApplicablePenalties(); + Collection retrieveSavingsApplicablePenalties(); /** * Returns all charges applicable for a given savings product diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformServiceImpl.java index 8c10d8576..426c71e6a 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/charge/service/ChargeReadPlatformServiceImpl.java @@ -124,10 +124,20 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService } @Override - public Collection retrieveLoanApplicableCharges(final boolean feeChargesOnly, ChargeTimeType[] excludeChargeTimes) { + public Collection retrieveLoanApplicableFees() { + final ChargeMapper rm = new ChargeMapper(); + Object[] params = new Object[] { ChargeAppliesTo.LOAN.getValue() }; + String sql = "select " + rm.chargeSchema() + + " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=0 and c.charge_applies_to_enum=? order by c.name "; + + return this.jdbcTemplate.query(sql, rm, params); + } + + @Override + public Collection retrieveLoanAccountApplicableCharges(final Long loanId, ChargeTimeType[] excludeChargeTimes) { final ChargeMapper rm = new ChargeMapper(); String excludeClause = ""; - Object[] params = new Object[] { ChargeAppliesTo.LOAN.getValue() }; + Object[] params = new Object[] { loanId, ChargeAppliesTo.LOAN.getValue() }; if (excludeChargeTimes != null && excludeChargeTimes.length > 0) { excludeClause = " and c.charge_time_enum not in(?) "; StringBuilder sb = new StringBuilder(); @@ -137,15 +147,32 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService } sb.append(excludeChargeTimes[i].getValue()); } - params = new Object[] { ChargeAppliesTo.LOAN.getValue(), sb.toString() }; + params[2] = sb.toString(); } - String sql = "select " + rm.chargeSchema() + " where c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=?" - + excludeClause + " order by c.name "; - if (feeChargesOnly) { - sql = "select " + rm.chargeSchema() - + " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=0 and c.charge_applies_to_enum=? " + excludeClause - + "order by c.name "; + String sql = "select " + rm.chargeSchema() + " join m_loan la on la.currency_code = c.currency_code" + " where la.id=?" + + " and c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=?" + excludeClause + " order by c.name "; + + return this.jdbcTemplate.query(sql, rm, params); + } + + @Override + public Collection retrieveLoanProductApplicableCharges(final Long loanProductId, ChargeTimeType[] excludeChargeTimes) { + final ChargeMapper rm = new ChargeMapper(); + String excludeClause = ""; + Object[] params = new Object[] { loanProductId, ChargeAppliesTo.LOAN.getValue() }; + if (excludeChargeTimes != null && excludeChargeTimes.length > 0) { + excludeClause = " and c.charge_time_enum not in(?) "; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < excludeChargeTimes.length; i++) { + if (i != 0) { + sb.append(","); + } + sb.append(excludeChargeTimes[i].getValue()); + } + params[2] = sb.toString(); } + String sql = "select " + rm.chargeSchema() + " join m_product_loan lp on lp.currency_code = c.currency_code" + " where lp.id=?" + + " and c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=?" + excludeClause + " order by c.name "; return this.jdbcTemplate.query(sql, rm, params); } @@ -233,7 +260,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService } @Override - public Collection retrieveSavingsAccountApplicableCharges(final boolean feeChargesOnly) { + public Collection retrieveSavingsApplicableCharges(final boolean feeChargesOnly) { final ChargeMapper rm = new ChargeMapper(); String sql = "select " + rm.chargeSchema() @@ -247,7 +274,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService } @Override - public Collection retrieveSavingsAccountApplicablePenalties() { + public Collection retrieveSavingsApplicablePenalties() { final ChargeMapper rm = new ChargeMapper(); final String sql = "select " + rm.chargeSchema() diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoanChargesApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoanChargesApiResource.java index e21dbbe67..fd5c1c071 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoanChargesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoanChargesApiResource.java @@ -97,12 +97,11 @@ public class LoanChargesApiResource { @Path("template") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveTemplate(@Context final UriInfo uriInfo) { + public String retrieveTemplate(@PathParam("loanId") final Long loanId, @Context final UriInfo uriInfo) { this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); - final boolean feeChargesOnly = false; - final Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(feeChargesOnly, + final Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanAccountApplicableCharges(loanId, new ChargeTimeType[] { ChargeTimeType.OVERDUE_INSTALLMENT }); final LoanChargeData loanChargeTemplate = LoanChargeData.template(chargeOptions); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java index 0b4fbb219..2254fd10b 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java @@ -440,8 +440,7 @@ public class LoansApiResource { fundOptions = this.fundReadPlatformService.retrieveAllFunds(); repaymentStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies(); - final boolean feeChargesOnly = false; - chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(feeChargesOnly, + chargeOptions = this.chargeReadPlatformService.retrieveLoanAccountApplicableCharges(loanId, new ChargeTimeType[] { ChargeTimeType.OVERDUE_INSTALLMENT }); chargeTemplate = this.loanChargeReadPlatformService.retrieveLoanChargeTemplate(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 2ac8d4989..d70b961f3 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -1241,8 +1241,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final Collection loanPurposeOptions = this.codeValueReadPlatformService.retrieveCodeValuesByCode("LoanPurpose"); final Collection loanCollateralOptions = this.codeValueReadPlatformService .retrieveCodeValuesByCode("LoanCollateral"); - final boolean feeChargesOnly = false; - final Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(feeChargesOnly, + final Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanProductApplicableCharges(productId, new ChargeTimeType[] { ChargeTimeType.OVERDUE_INSTALLMENT }); Integer loanCycleCounter = null; if (loanProduct.useBorrowerCycle()) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/api/LoanProductsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/api/LoanProductsApiResource.java index 73991652c..2830122a0 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/api/LoanProductsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/api/LoanProductsApiResource.java @@ -234,8 +234,7 @@ public class LoanProductsApiResource { private LoanProductData handleTemplate(final LoanProductData productData) { - final boolean feeChargesOnly = true; - Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(feeChargesOnly, null); + Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableFees(); if (chargeOptions.isEmpty()) { chargeOptions = null; } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/FixedDepositProductsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/FixedDepositProductsApiResource.java index 4a660e84f..21f65a373 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/FixedDepositProductsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/FixedDepositProductsApiResource.java @@ -269,10 +269,10 @@ public class FixedDepositProductsApiResource { // charges final boolean feeChargesOnly = true; - Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicableCharges(feeChargesOnly); + Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsApplicableCharges(feeChargesOnly); chargeOptions = CollectionUtils.isEmpty(chargeOptions) ? null : chargeOptions; - Collection penaltyOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicablePenalties(); + Collection penaltyOptions = this.chargeReadPlatformService.retrieveSavingsApplicablePenalties(); penaltyOptions = CollectionUtils.isEmpty(penaltyOptions) ? null : penaltyOptions; // interest rate chart template diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/RecurringDepositProductsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/RecurringDepositProductsApiResource.java index d457e1eff..02e2ace89 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/RecurringDepositProductsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/RecurringDepositProductsApiResource.java @@ -265,10 +265,10 @@ public class RecurringDepositProductsApiResource { // charges final boolean feeChargesOnly = true; - Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicableCharges(feeChargesOnly); + Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsApplicableCharges(feeChargesOnly); chargeOptions = CollectionUtils.isEmpty(chargeOptions) ? null : chargeOptions; - Collection penaltyOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicablePenalties(); + Collection penaltyOptions = this.chargeReadPlatformService.retrieveSavingsApplicablePenalties(); penaltyOptions = CollectionUtils.isEmpty(penaltyOptions) ? null : penaltyOptions; final Collection periodFrequencyTypeOptions = this.dropdownReadPlatformService.retrievePeriodFrequencyTypeOptions(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsAccountChargesApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsAccountChargesApiResource.java index 2d42b365d..b358e2650 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsAccountChargesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsAccountChargesApiResource.java @@ -105,7 +105,7 @@ public class SavingsAccountChargesApiResource { this.context.authenticatedUser().validateHasReadPermission(SAVINGS_ACCOUNT_CHARGE_RESOURCE_NAME); final boolean feeChargesOnly = false; - final Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicableCharges(feeChargesOnly); + final Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsApplicableCharges(feeChargesOnly); final SavingsAccountChargeData savingsAccountChargeTemplate = SavingsAccountChargeData.template(chargeOptions); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsProductsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsProductsApiResource.java index 161fb0f91..2cc67ea9f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsProductsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/api/SavingsProductsApiResource.java @@ -238,10 +238,10 @@ public class SavingsProductsApiResource { // charges final boolean feeChargesOnly = true; - Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicableCharges(feeChargesOnly); + Collection chargeOptions = this.chargeReadPlatformService.retrieveSavingsApplicableCharges(feeChargesOnly); chargeOptions = CollectionUtils.isEmpty(chargeOptions) ? null : chargeOptions; - Collection penaltyOptions = this.chargeReadPlatformService.retrieveSavingsAccountApplicablePenalties(); + Collection penaltyOptions = this.chargeReadPlatformService.retrieveSavingsApplicablePenalties(); penaltyOptions = CollectionUtils.isEmpty(penaltyOptions) ? null : penaltyOptions; SavingsProductData savingsProductToReturn = null; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java index 3862fd946..f7ee1ff1d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java @@ -351,7 +351,7 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead final boolean feeChargesOnly = false; final Collection chargeOptions = this.chargeReadPlatformService - .retrieveSavingsAccountApplicableCharges(feeChargesOnly); + .retrieveSavingsApplicableCharges(feeChargesOnly); Collection fieldOfficerOptions = null; @@ -428,7 +428,7 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead final boolean feeChargesOnly = true; final Collection chargeOptions = this.chargeReadPlatformService - .retrieveSavingsAccountApplicableCharges(feeChargesOnly); + .retrieveSavingsApplicableCharges(feeChargesOnly); if (depositAccountType.isFixedDeposit()) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java index d78054c42..241ca7384 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java @@ -518,7 +518,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead final boolean feeChargesOnly = false; final Collection chargeOptions = this.chargeReadPlatformService - .retrieveSavingsAccountApplicableCharges(feeChargesOnly); + .retrieveSavingsApplicableCharges(feeChargesOnly); Collection fieldOfficerOptions = null; @@ -577,7 +577,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead final boolean feeChargesOnly = true; final Collection chargeOptions = this.chargeReadPlatformService - .retrieveSavingsAccountApplicableCharges(feeChargesOnly); + .retrieveSavingsApplicableCharges(feeChargesOnly); template = SavingsAccountData.withTemplateOptions(template, productOptions, fieldOfficerOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions,