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 10aace440..d3c123267 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 @@ -25,6 +25,7 @@ import org.mifosng.platform.api.commands.LoanStateTransitionCommand; import org.mifosng.platform.api.commands.LoanTransactionCommand; import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; import org.mifosng.platform.api.commands.UndoStateTransitionCommand; +import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanAccountSummaryData; @@ -38,6 +39,7 @@ import org.mifosng.platform.api.data.NewLoanData; import org.mifosng.platform.api.infrastructure.ApiDataConversionService; import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService; import org.mifosng.platform.api.infrastructure.ApiParameterHelper; +import org.mifosng.platform.charge.service.ChargeReadPlatformService; import org.mifosng.platform.exceptions.UnrecognizedQueryParamException; import org.mifosng.platform.loan.service.CalculationPlatformService; import org.mifosng.platform.loan.service.LoanReadPlatformService; @@ -57,6 +59,9 @@ public class LoansApiResource { @Autowired private LoanWritePlatformService loanWritePlatformService; + @Autowired + private ChargeReadPlatformService chargeReadPlatformService; + @Autowired private CalculationPlatformService calculationPlatformService; @@ -118,11 +123,12 @@ public class LoansApiResource { Collection repaymentSchedule = null; LoanAccountSummaryData summary = null; LoanPermissionData permissions = null; - + Collection charges = null; + Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); if (!associationParameters.isEmpty()) { if (associationParameters.contains("all")) { - responseParameters.addAll(Arrays.asList("summary", "repaymentSchedule", "loanRepayments", "permissions", "convenienceData")); + responseParameters.addAll(Arrays.asList("summary", "repaymentSchedule", "loanRepayments", "permissions", "convenienceData", "charges")); } else { responseParameters.addAll(associationParameters); } @@ -134,9 +140,11 @@ public class LoansApiResource { boolean isWaiveAllowed = summary.isWaiveAllowed(loanBasicDetails.getInArrearsTolerance()); permissions = this.loanReadPlatformService.retrieveLoanPermissions(loanBasicDetails, isWaiveAllowed, loanRepayments.size()); + + charges = this.chargeReadPlatformService.retrieveLoanCharges(loanId); } - LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, summary, repaymentSchedule, loanRepayments, permissions); + LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, summary, repaymentSchedule, loanRepayments, permissions, charges); 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 661415a25..1aa92c244 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 @@ -49,6 +49,8 @@ public class LoanAccountData { private LoanConvenienceData convenienceData; + private Collection charges; + protected LoanAccountData() { // } @@ -57,11 +59,12 @@ public class LoanAccountData { LoanAccountSummaryData summary, Collection repaymentSchedule, Collection loanRepayments, - LoanPermissionData permissions) { + LoanPermissionData permissions, Collection charges) { this.summary = summary; this.repaymentSchedule = repaymentSchedule; this.loanRepayments = loanRepayments; this.permissions = permissions; + this.charges = charges; int maxSubmittedOnOffsetFromToday = basicDetails .getMaxSubmittedOnOffsetFromToday(); @@ -384,4 +387,11 @@ public class LoanAccountData { this.lifeCycleStatusId = lifeCycleStatusId; } + public Collection getCharges() { + return charges; + } + + public void setCharges(Collection charges) { + this.charges = charges; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java index 3a4181d70..c4e0957b6 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java @@ -436,13 +436,13 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { throw new InvalidJsonException(); } - Type typeOfMap = new TypeToken>(){}.getType(); - Map requestMap = gsonConverter.fromJson(json, typeOfMap); + Type typeOfMap = new TypeToken>(){}.getType(); + Map requestMap = gsonConverter.fromJson(json, typeOfMap); Set supportedParams = new HashSet( Arrays.asList("clientId", "productId", "externalId", "fundId", "transactionProcessingStrategyId", "principal", "inArrearsTolerance", "interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", - "loanTermFrequency", "loanTermFrequencyType", + "loanTermFrequency", "loanTermFrequencyType", "charges", "repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", "expectedDisbursementDate", "repaymentsStartingFromDate", "interestChargedFromDate", "submittedOnDate", "submittedOnNote", "locale", "dateFormat") @@ -487,7 +487,7 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { JsonElement element = parser.parse(json); if (element.isJsonObject()) { JsonObject object = element.getAsJsonObject(); - if (object.has("charges")) { + if (object.has("charges") && object.get("charges").isJsonArray()) { modifiedParameters.add("charges"); JsonArray array = object.get("charges").getAsJsonArray(); charges = new LoanChargeCommand[array.size()]; 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 185885e14..399847fc5 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 @@ -152,7 +152,7 @@ public class GoogleGsonApiJsonSerializerService implements "closedOnDate", "expectedMaturityDate", "lifeCycleStatusId", "lifeCycleStatusText", "lifeCycleStatusDate", "summary", "repaymentSchedule", - "loanRepayments", "permissions", "convenienceData")); + "loanRepayments", "permissions", "convenienceData", "charges")); 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 5d0f0d474..6ddda50d7 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 @@ -15,4 +15,6 @@ public interface ChargeReadPlatformService { Collection retrieveLoanApplicableCharges(); Collection retrieveLoanProductCharges(Long loanProductId); + + Collection retrieveLoanCharges(Long loanId); } 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 a00aab6b2..f3a905e01 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 @@ -105,6 +105,17 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService return this.jdbcTemplate.query(sql, rm, new Object[] {loanProductId}); } + @Override + public Collection retrieveLoanCharges(Long loanId) { + this.context.authenticatedUser(); + + ChargeMapper rm = new ChargeMapper(); + + String sql = "select " + rm.loanChargeSchema() + " where c.is_deleted=0 and lc.loan_id=?"; + + return this.jdbcTemplate.query(sql, rm, new Object[] {loanId}); + } + @Override public Collection retrieveLoanApplicableCharges() { this.context.authenticatedUser(); @@ -131,6 +142,16 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService return chargeSchema() + " join m_product_loan_charge plc on plc.charge_id = c.id"; } + public String loanChargeSchema(){ + return "c.id as id, c.name as name, lc.amount as amount, c.currency_code as currencyCode, " + + "c.charge_applies_to_enum as chargeAppliesTo, lc.charge_time_enum as chargeTime, " + + "lc.charge_calculation_enum as chargeCalculation, is_active as active, oc.name as currencyName, " + + "oc.decimal_places as currencyDecimalPlaces, oc.display_symbol as currencyDisplaySymbol, " + + "oc.internationalized_name_code as currencyNameCode from m_charge c " + + "join m_organisation_currency oc on c.currency_code = oc.code " + + "join m_loan_charge lc on lc.charge_id = c.id "; + } + @Override public ChargeData mapRow(ResultSet rs, int rowNum) throws SQLException { Long id = rs.getLong("id"); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanAssembler.java b/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanAssembler.java index 1a9ce34a8..9e7f6c2f0 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanAssembler.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/loan/service/LoanAssembler.java @@ -185,7 +185,7 @@ public class LoanAssembler { } charges.add(new LoanCharge(loan, charge, loanChargeCommand)); } - } else { + } else if (loanChargesArray == null) { for (Charge productCharge : product.getCharges()){ charges.add(new LoanCharge(loan, productCharge)); }