mifosx-92: tidy up loan product in prep for tranche loans.

This commit is contained in:
Keith Woodlock
2012-10-11 17:59:13 +01:00
parent 90f78597d9
commit ab9497c985
12 changed files with 437 additions and 516 deletions
@@ -3,6 +3,7 @@ package org.mifosng.platform.api;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
@@ -14,17 +15,23 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.api.commands.LoanProductCommand; import org.mifosng.platform.api.commands.LoanProductCommand;
import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.CurrencyData;
import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.EntityIdentifier;
import org.mifosng.platform.api.data.EnumOptionData;
import org.mifosng.platform.api.data.FundData;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.TransactionProcessingStrategyData;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService; import org.mifosng.platform.api.infrastructure.ApiDataConversionService;
import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService; import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
import org.mifosng.platform.api.infrastructure.ApiParameterHelper; import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.charge.service.ChargeReadPlatformService; import org.mifosng.platform.charge.service.ChargeReadPlatformService;
import org.mifosng.platform.currency.service.CurrencyReadPlatformService;
import org.mifosng.platform.fund.service.FundReadPlatformService;
import org.mifosng.platform.loanproduct.service.LoanDropdownReadPlatformService;
import org.mifosng.platform.loanproduct.service.LoanProductReadPlatformService; import org.mifosng.platform.loanproduct.service.LoanProductReadPlatformService;
import org.mifosng.platform.loanproduct.service.LoanProductWritePlatformService; import org.mifosng.platform.loanproduct.service.LoanProductWritePlatformService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -51,16 +58,38 @@ public class LoanProductsApiResource {
@Autowired @Autowired
private ApiJsonSerializerService apiJsonSerializerService; private ApiJsonSerializerService apiJsonSerializerService;
@Autowired
private CurrencyReadPlatformService currencyReadPlatformService;
@Autowired
private FundReadPlatformService fundReadPlatformService;
@Autowired
private LoanDropdownReadPlatformService dropdownReadPlatformService;
private final Set<String> typicalResponseParameters = new HashSet<String>(
Arrays.asList("id", "name", "description",
"fundId", "fundName",
"transactionProcessingStrategyId", "transactionProcessingStrategyName",
"principal", "inArrearsTolerance",
"numberOfRepayments", "repaymentEvery",
"interestRatePerPeriod", "annualInterestRate",
"repaymentFrequencyType", "interestRateFrequencyType",
"amortizationType", "interestType", "interestCalculationPeriodType",
"charges",
"createdOn", "lastModifedOn")
);
@POST @POST
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
public Response createLoanProduct(final String jsonRequestBody) { public String createLoanProduct(final String jsonRequestBody) {
final LoanProductCommand command = this.apiDataConversionService.convertJsonToLoanProductCommand(null, jsonRequestBody); final LoanProductCommand command = this.apiDataConversionService.convertJsonToLoanProductCommand(null, jsonRequestBody);
EntityIdentifier entityIdentifier = this.loanProductWritePlatformService.createLoanProduct(command); final EntityIdentifier identifier = this.loanProductWritePlatformService.createLoanProduct(command);
return Response.ok().entity(entityIdentifier).build(); return apiJsonSerializerService.serializeEntityIdentifier(identifier);
} }
@GET @GET
@@ -68,52 +97,31 @@ public class LoanProductsApiResource {
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
public String retrieveAllLoanProducts(@Context final UriInfo uriInfo) { public String retrieveAllLoanProducts(@Context final UriInfo uriInfo) {
Set<String> typicalResponseParameters = new HashSet<String>( final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
Arrays.asList("id", "name", "description", "fundId", "fundName", "principal", "inArrearsTolerance", "numberOfRepayments",
"repaymentEvery", "interestRatePerPeriod", "annualInterestRate",
"repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType",
"charges", "createdOn", "lastModifedOn")
);
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) { if (responseParameters.isEmpty()) {
responseParameters.addAll(typicalResponseParameters); responseParameters.addAll(typicalResponseParameters);
} }
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
Collection<LoanProductData> products = this.loanProductReadPlatformService.retrieveAllLoanProducts(); final Collection<LoanProductData> products = this.loanProductReadPlatformService.retrieveAllLoanProducts();
return this.apiJsonSerializerService.serializeLoanProductDataToJson(prettyPrint, responseParameters, products); return this.apiJsonSerializerService.serializeLoanProductDataToJson(prettyPrint, responseParameters, products);
} }
/*
* see
* http://stackoverflow.com/questions/5250074/what-uri-can-be-used-to-request
* -a-default-resource
*/
@GET @GET
@Path("template") @Path("template")
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
public String retrieveNewLoanProductDetails(@Context final UriInfo uriInfo) { public String retrieveNewLoanProductDetails(@Context final UriInfo uriInfo) {
// TODO - KW - every addition of a parameter here requires same addition in supported params used in 'apiDataConversionService' method. final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
Set<String> typicalResponseParameters = new HashSet<String>(
Arrays.asList("id", "name", "description", "fundId", "fundName", "transactionProcessingStrategyId", "transactionProcessingStrategyName",
"principal", "inArrearsTolerance", "numberOfRepayments",
"repaymentEvery", "interestRatePerPeriod", "annualInterestRate",
"repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", "charges",
"createdOn", "lastModifedOn","currencyOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions",
"repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions")
);
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) { if (responseParameters.isEmpty()) {
responseParameters.addAll(typicalResponseParameters); responseParameters.addAll(typicalResponseParameters);
} }
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveNewLoanProductDetails(); LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveNewLoanProductDetails();
loanProduct = handleTemplate(loanProduct, responseParameters);
return this.apiJsonSerializerService.serializeLoanProductDataToJson(prettyPrint, responseParameters, loanProduct); return this.apiJsonSerializerService.serializeLoanProductDataToJson(prettyPrint, responseParameters, loanProduct);
} }
@@ -124,30 +132,16 @@ public class LoanProductsApiResource {
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
public String retrieveLoanProductDetails(@PathParam("productId") final Long productId, @Context final UriInfo uriInfo) { public String retrieveLoanProductDetails(@PathParam("productId") final Long productId, @Context final UriInfo uriInfo) {
Set<String> typicalResponseParameters = new HashSet<String>( final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
Arrays.asList("id", "name", "description", "fundId", "fundName",
"transactionProcessingStrategyId", "transactionProcessingStrategyName",
"principal", "inArrearsTolerance", "numberOfRepayments",
"repaymentEvery", "interestRatePerPeriod", "annualInterestRate",
"repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType",
"interestCalculationPeriodType", "charges",
"createdOn", "lastModifedOn")
);
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) { if (responseParameters.isEmpty()) {
responseParameters.addAll(typicalResponseParameters); responseParameters.addAll(typicalResponseParameters);
} }
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters()); final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters());
LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId); LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId);
if (template) { if (template) {
responseParameters.addAll(Arrays.asList("currencyOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions", loanProduct = handleTemplate(loanProduct, responseParameters);
"repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions"));
Collection<ChargeData> chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges();
chargeOptions.removeAll(loanProduct.getCharges());
loanProduct.setChargeOptions(chargeOptions);
} }
return this.apiJsonSerializerService.serializeLoanProductDataToJson(prettyPrint, responseParameters, loanProduct); return this.apiJsonSerializerService.serializeLoanProductDataToJson(prettyPrint, responseParameters, loanProduct);
@@ -157,12 +151,35 @@ public class LoanProductsApiResource {
@Path("{productId}") @Path("{productId}")
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
public Response updateLoanProduct(@PathParam("productId") final Long productId, final String jsonRequestBody) { public String updateLoanProduct(@PathParam("productId") final Long productId, final String jsonRequestBody) {
LoanProductCommand command = this.apiDataConversionService.convertJsonToLoanProductCommand(productId, jsonRequestBody); final LoanProductCommand command = this.apiDataConversionService.convertJsonToLoanProductCommand(productId, jsonRequestBody);
EntityIdentifier entityIdentifier = this.loanProductWritePlatformService.updateLoanProduct(command); final EntityIdentifier identifier = this.loanProductWritePlatformService.updateLoanProduct(command);
return Response.ok().entity(entityIdentifier).build(); return apiJsonSerializerService.serializeEntityIdentifier(identifier);
}
private LoanProductData handleTemplate(final LoanProductData productData, final Set<String> responseParameters) {
responseParameters.addAll(Arrays.asList("currencyOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions",
"repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions"));
Collection<ChargeData> chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges();
chargeOptions.removeAll(productData.charges());
List<CurrencyData> currencyOptions = currencyReadPlatformService.retrieveAllowedCurrencies();
List<EnumOptionData> amortizationTypeOptions = dropdownReadPlatformService.retrieveLoanAmortizationTypeOptions();
List<EnumOptionData> interestTypeOptions = dropdownReadPlatformService.retrieveLoanInterestTypeOptions();
List<EnumOptionData> interestCalculationPeriodTypeOptions = dropdownReadPlatformService.retrieveLoanInterestRateCalculatedInPeriodOptions();
List<EnumOptionData> loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions();
List<EnumOptionData> repaymentFrequencyTypeOptions = dropdownReadPlatformService.retrieveRepaymentFrequencyTypeOptions();
List<EnumOptionData> interestRateFrequencyTypeOptions = dropdownReadPlatformService.retrieveInterestRateFrequencyTypeOptions();
Collection<FundData> fundOptions = this.fundReadPlatformService.retrieveAllFunds();
Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies();
return new LoanProductData(productData, chargeOptions, currencyOptions, amortizationTypeOptions, interestTypeOptions,
interestCalculationPeriodTypeOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, interestRateFrequencyTypeOptions, fundOptions, transactionProcessingStrategyOptions);
} }
} }
@@ -37,7 +37,7 @@ import org.mifosng.platform.api.data.LoanAccountData;
import org.mifosng.platform.api.data.LoanBasicDetailsData; import org.mifosng.platform.api.data.LoanBasicDetailsData;
import org.mifosng.platform.api.data.LoanChargeData; import org.mifosng.platform.api.data.LoanChargeData;
import org.mifosng.platform.api.data.LoanPermissionData; import org.mifosng.platform.api.data.LoanPermissionData;
import org.mifosng.platform.api.data.LoanProductLookup; import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.LoanTransactionData; import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.LoanTransactionNewData; import org.mifosng.platform.api.data.LoanTransactionNewData;
import org.mifosng.platform.api.data.MoneyData; import org.mifosng.platform.api.data.MoneyData;
@@ -134,7 +134,7 @@ public class LoansApiResource {
"chargeTemplate", "charges")); "chargeTemplate", "charges"));
// tempate related // tempate related
Collection<LoanProductLookup> productOptions = this.loanProductReadPlatformService.retrieveAllLoanProductsForLookup(); Collection<LoanProductData> productOptions = this.loanProductReadPlatformService.retrieveAllLoanProductsForLookup();
Collection<EnumOptionData>loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions(); Collection<EnumOptionData>loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions();
Collection<EnumOptionData>repaymentFrequencyTypeOptions = dropdownReadPlatformService.retrieveRepaymentFrequencyTypeOptions(); Collection<EnumOptionData>repaymentFrequencyTypeOptions = dropdownReadPlatformService.retrieveRepaymentFrequencyTypeOptions();
Collection<EnumOptionData>interestRateFrequencyTypeOptions = dropdownReadPlatformService.retrieveInterestRateFrequencyTypeOptions(); Collection<EnumOptionData>interestRateFrequencyTypeOptions = dropdownReadPlatformService.retrieveInterestRateFrequencyTypeOptions();
@@ -237,7 +237,7 @@ public class LoansApiResource {
} }
} }
Collection<LoanProductLookup> productOptions = new ArrayList<LoanProductLookup>(); Collection<LoanProductData> productOptions = new ArrayList<LoanProductData>();
Collection<EnumOptionData> loanTermFrequencyTypeOptions = null; Collection<EnumOptionData> loanTermFrequencyTypeOptions = null;
Collection<EnumOptionData> repaymentFrequencyTypeOptions = new ArrayList<EnumOptionData>(); Collection<EnumOptionData> repaymentFrequencyTypeOptions = new ArrayList<EnumOptionData>();
Collection<TransactionProcessingStrategyData> repaymentStrategyOptions = null; Collection<TransactionProcessingStrategyData> repaymentStrategyOptions = null;
@@ -1,8 +1,9 @@
package org.mifosng.platform.api.data; package org.mifosng.platform.api.data;
import java.io.Serializable; /**
* Immutable data object representing currency.
public class CurrencyData implements Serializable { */
public class CurrencyData {
private final String code; private final String code;
private final String name; private final String name;
@@ -11,6 +12,10 @@ public class CurrencyData implements Serializable {
private final String nameCode; private final String nameCode;
private final String displayLabel; private final String displayLabel;
public static CurrencyData blank() {
return new CurrencyData("", "", 0, "", "");
}
public CurrencyData(final String code, final String name, final int decimalPlaces, final String displaySymbol, final String nameCode) { public CurrencyData(final String code, final String name, final int decimalPlaces, final String displaySymbol, final String nameCode) {
this.code = code; this.code = code;
this.name = name; this.name = name;
@@ -63,7 +63,7 @@ public class LoanAccountData {
// template // template
private final Collection<StaffData> loanOfficerOptions; private final Collection<StaffData> loanOfficerOptions;
private final Collection<LoanProductLookup> productOptions; private final Collection<LoanProductData> productOptions;
private final Collection<EnumOptionData> termFrequencyTypeOptions; private final Collection<EnumOptionData> termFrequencyTypeOptions;
private final Collection<EnumOptionData> repaymentFrequencyTypeOptions; private final Collection<EnumOptionData> repaymentFrequencyTypeOptions;
private final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions; private final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions;
@@ -82,7 +82,7 @@ public class LoanAccountData {
final Collection<LoanTransactionNewData> transactions, final Collection<LoanTransactionNewData> transactions,
final LoanPermissionData permissions, final LoanPermissionData permissions,
final Collection<LoanChargeData> charges, final Collection<LoanChargeData> charges,
final Collection<LoanProductLookup> productOptions, final Collection<LoanProductData> productOptions,
final Collection<EnumOptionData> termFrequencyTypeOptions, final Collection<EnumOptionData> termFrequencyTypeOptions,
final Collection<EnumOptionData> repaymentFrequencyTypeOptions, final Collection<EnumOptionData> repaymentFrequencyTypeOptions,
final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions, final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions,
@@ -77,7 +77,7 @@ public class LoanBasicDetailsData {
final EnumOptionData termPeriodFrequencyType = product.getRepaymentFrequencyType(); final EnumOptionData termPeriodFrequencyType = product.getRepaymentFrequencyType();
final Collection<LoanChargeData> charges = new ArrayList<LoanChargeData>(); final Collection<LoanChargeData> charges = new ArrayList<LoanChargeData>();
for (ChargeData charge : product.getCharges()) { for (ChargeData charge : product.charges()) {
charges.add(LoanChargeData.newChargeDetails(charge.getId(), charge.getName(), charge.getCurrency(), charges.add(LoanChargeData.newChargeDetails(charge.getId(), charge.getName(), charge.getCurrency(),
charge.getAmount(), charge.getChargeTimeType(), charge.getChargeCalculationType())); charge.getAmount(), charge.getChargeTimeType(), charge.getChargeCalculationType()));
} }
@@ -6,76 +6,161 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.mifosng.platform.loan.domain.AmortizationMethod;
import org.mifosng.platform.loan.domain.InterestCalculationPeriodMethod;
import org.mifosng.platform.loan.domain.InterestMethod;
import org.mifosng.platform.loan.domain.PeriodFrequencyType;
import org.mifosng.platform.loanproduct.service.LoanEnumerations;
/**
* Immutable data object to represent loan products.
*/
public class LoanProductData { public class LoanProductData {
private Long id; private final Long id;
private String name; private final String name;
private String description; private final String description;
private Long fundId; private final Long fundId;
private String fundName; private final String fundName;
private Long transactionProcessingStrategyId; private final Long transactionProcessingStrategyId;
private String transactionProcessingStrategyName; private final String transactionProcessingStrategyName;
private CurrencyData currency; private final CurrencyData currency;
private BigDecimal principal; private final BigDecimal principal;
private BigDecimal inArrearsTolerance; private final BigDecimal inArrearsTolerance;
private Integer numberOfRepayments; private final Integer numberOfRepayments;
private Integer loanTermFrequency; private final Integer loanTermFrequency;
private Integer repaymentEvery; private final Integer repaymentEvery;
private BigDecimal interestRatePerPeriod = BigDecimal.ZERO; private final BigDecimal interestRatePerPeriod;
private BigDecimal annualInterestRate = BigDecimal.ZERO; private final BigDecimal annualInterestRate;
private EnumOptionData loanTermFrequencyType; private final EnumOptionData loanTermFrequencyType;
private EnumOptionData repaymentFrequencyType; private final EnumOptionData repaymentFrequencyType;
private EnumOptionData interestRateFrequencyType; private final EnumOptionData interestRateFrequencyType;
private EnumOptionData amortizationType; private final EnumOptionData amortizationType;
private EnumOptionData interestType; private final EnumOptionData interestType;
private EnumOptionData interestCalculationPeriodType; private final EnumOptionData interestCalculationPeriodType;
private Collection<ChargeData> charges; private final Collection<ChargeData> charges;
private DateTime createdOn; private final DateTime createdOn;
private DateTime lastModifedOn; private final DateTime lastModifedOn;
private List<CurrencyData> currencyOptions = new ArrayList<CurrencyData>(); private final List<CurrencyData> currencyOptions;
private Collection<FundData> fundOptions = new ArrayList<FundData>(); private final Collection<FundData> fundOptions;
private Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions = new ArrayList<TransactionProcessingStrategyData>(); private final Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions;
private List<EnumOptionData> amortizationTypeOptions = new ArrayList<EnumOptionData>(); private final List<EnumOptionData> amortizationTypeOptions;
private List<EnumOptionData> interestTypeOptions = new ArrayList<EnumOptionData>(); private final List<EnumOptionData> interestTypeOptions;
private List<EnumOptionData> interestCalculationPeriodTypeOptions = new ArrayList<EnumOptionData>(); private final List<EnumOptionData> interestCalculationPeriodTypeOptions;
private List<EnumOptionData> repaymentFrequencyTypeOptions = new ArrayList<EnumOptionData>(); private final List<EnumOptionData> repaymentFrequencyTypeOptions;
private List<EnumOptionData> interestRateFrequencyTypeOptions = new ArrayList<EnumOptionData>(); private final List<EnumOptionData> interestRateFrequencyTypeOptions;
private List<EnumOptionData> loanTermFrequencyTypeOptions = new ArrayList<EnumOptionData>(); private final List<EnumOptionData> loanTermFrequencyTypeOptions;
private Collection<ChargeData> chargeOptions = new ArrayList<ChargeData>(); private final Collection<ChargeData> chargeOptions;
public LoanProductData() { /**
// * Used when returning lookup information about loan product for dropdowns.
*/
public static LoanProductData lookup(final Long id, final String name) {
final DateTime createdOn = null;
final DateTime lastModifedOn = null;
final String description = null;
final CurrencyData currency = null;
final BigDecimal principal = null;
final BigDecimal tolerance = null;
final Integer numberOfRepayments = null;
final Integer loanTermFrequency = null;
final Integer repaymentEvery = null;
final BigDecimal interestRatePerPeriod = null;
final BigDecimal annualInterestRate = null;
final EnumOptionData loanTermFrequencyType = null;
final EnumOptionData repaymentFrequencyType = null;
final EnumOptionData interestRateFrequencyType = null;
final EnumOptionData amortizationType = null;
final EnumOptionData interestType = null;
final EnumOptionData interestCalculationPeriodType = null;
final Long fundId = null;
final String fundName = null;
final Long transactionProcessingStrategyId = null;
final String transactionProcessingStrategyName = null;
final Collection<ChargeData> charges = null;
return new LoanProductData(createdOn, lastModifedOn, id, name, description, currency, principal, tolerance,
numberOfRepayments, loanTermFrequency, repaymentEvery, interestRatePerPeriod, annualInterestRate,
loanTermFrequencyType, repaymentFrequencyType, interestRateFrequencyType,
amortizationType, interestType, interestCalculationPeriodType,
fundId, fundName, transactionProcessingStrategyId, transactionProcessingStrategyName, charges);
} }
public LoanProductData(DateTime createdOn, DateTime lastModifedOn, Long id, public static LoanProductData sensibleDefaultsForNewLoanProductCreation() {
String name, String description, MoneyData principal,
MoneyData tolerance, Integer numberOfRepayments, final DateTime createdOn = null;
Integer loanTermFrequency, final DateTime lastModifedOn = null;
Integer repaymentEvery, BigDecimal interestRatePerPeriod, final Long id = null;
BigDecimal annualInterestRate, final String name = null;
EnumOptionData loanTermFrequencyType, final String description = null;
EnumOptionData repaymentFrequencyType, final CurrencyData currency = CurrencyData.blank();
EnumOptionData interestRateFrequencyType, final BigDecimal principal = null;
EnumOptionData amortizationType, EnumOptionData interestType, final BigDecimal tolerance = null;
EnumOptionData interestCalculationPeriodType, Long fundId, final Integer numberOfRepayments = null;
String fundName, Long transactionProcessingStrategyId, String transactionProcessingStrategyName) { final Integer loanTermFrequency = null;
final Integer repaymentEvery = null;
final BigDecimal interestRatePerPeriod = null;
final BigDecimal annualInterestRate = null;
final EnumOptionData loanTermFrequencyType = LoanEnumerations.loanTermFrequencyType(PeriodFrequencyType.MONTHS);
final EnumOptionData repaymentFrequencyType = LoanEnumerations.repaymentFrequencyType(PeriodFrequencyType.MONTHS);
final EnumOptionData interestRateFrequencyType = LoanEnumerations.interestRateFrequencyType(PeriodFrequencyType.MONTHS);
final EnumOptionData amortizationType = LoanEnumerations.amortizationType(AmortizationMethod.EQUAL_INSTALLMENTS);
final EnumOptionData interestType = LoanEnumerations.interestType(InterestMethod.DECLINING_BALANCE);
final EnumOptionData interestCalculationPeriodType = LoanEnumerations.interestCalculationPeriodType(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD);
final Long fundId = null;
final String fundName = null;
final Long transactionProcessingStrategyId = null;
final String transactionProcessingStrategyName = null;
final Collection<ChargeData> charges = null;
return new LoanProductData(createdOn, lastModifedOn, id, name, description, currency, principal, tolerance,
numberOfRepayments, loanTermFrequency, repaymentEvery, interestRatePerPeriod, annualInterestRate,
loanTermFrequencyType, repaymentFrequencyType, interestRateFrequencyType,
amortizationType, interestType, interestCalculationPeriodType,
fundId, fundName, transactionProcessingStrategyId, transactionProcessingStrategyName, charges);
}
public LoanProductData(
final DateTime createdOn,
final DateTime lastModifedOn,
final Long id,
final String name,
final String description,
final CurrencyData currency,
final BigDecimal principal,
final BigDecimal tolerance,
final Integer numberOfRepayments,
final Integer loanTermFrequency,
final Integer repaymentEvery,
final BigDecimal interestRatePerPeriod,
final BigDecimal annualInterestRate,
final EnumOptionData loanTermFrequencyType,
final EnumOptionData repaymentFrequencyType,
final EnumOptionData interestRateFrequencyType,
final EnumOptionData amortizationType,
final EnumOptionData interestType,
final EnumOptionData interestCalculationPeriodType,
final Long fundId,
final String fundName,
final Long transactionProcessingStrategyId,
final String transactionProcessingStrategyName,
final Collection<ChargeData> charges) {
this.createdOn = createdOn; this.createdOn = createdOn;
this.lastModifedOn = lastModifedOn; this.lastModifedOn = lastModifedOn;
this.id = id; this.id = id;
this.name = name; this.name = name;
this.description = description; this.description = description;
this.currency = new CurrencyData(principal.getCurrencyCode(), principal.getDefaultName(), principal.getDigitsAfterDecimal(), principal.getDisplaySymbol(), principal.getNameCode()); this.currency = currency;
this.principal = principal.getAmount(); this.principal = principal;
this.inArrearsTolerance = tolerance.getAmount(); this.inArrearsTolerance = tolerance;
this.numberOfRepayments = numberOfRepayments; this.numberOfRepayments = numberOfRepayments;
this.loanTermFrequency = loanTermFrequency; this.loanTermFrequency = loanTermFrequency;
this.repaymentEvery = repaymentEvery; this.repaymentEvery = repaymentEvery;
@@ -91,286 +176,210 @@ public class LoanProductData {
this.fundName = fundName; this.fundName = fundName;
this.transactionProcessingStrategyId = transactionProcessingStrategyId; this.transactionProcessingStrategyId = transactionProcessingStrategyId;
this.transactionProcessingStrategyName = transactionProcessingStrategyName; this.transactionProcessingStrategyName = transactionProcessingStrategyName;
this.charges = charges;
this.chargeOptions = null;
this.currencyOptions = null;
this.fundOptions = null;
this.transactionProcessingStrategyOptions = null;
this.amortizationTypeOptions = null;
this.interestTypeOptions = null;
this.interestCalculationPeriodTypeOptions = null;
this.loanTermFrequencyTypeOptions = null;
this.repaymentFrequencyTypeOptions = null;
this.interestRateFrequencyTypeOptions = null;
}
public LoanProductData(
final LoanProductData productData,
final Collection<ChargeData> chargeOptions,
final List<CurrencyData> currencyOptions,
final List<EnumOptionData> amortizationTypeOptions,
final List<EnumOptionData> interestTypeOptions,
final List<EnumOptionData> interestCalculationPeriodTypeOptions,
final List<EnumOptionData> loanTermFrequencyTypeOptions,
final List<EnumOptionData> repaymentFrequencyTypeOptions,
final List<EnumOptionData> interestRateFrequencyTypeOptions,
final Collection<FundData> fundOptions,
final Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions) {
this.createdOn = productData.createdOn;
this.lastModifedOn = productData.lastModifedOn;
this.id = productData.id;
this.name = productData.name;
this.description = productData.description;
this.principal = productData.principal;
this.inArrearsTolerance = productData.inArrearsTolerance;
this.numberOfRepayments = productData.numberOfRepayments;
this.loanTermFrequency = productData.loanTermFrequency;
this.repaymentEvery = productData.repaymentEvery;
this.interestRatePerPeriod = productData.interestRatePerPeriod;
this.annualInterestRate = productData.annualInterestRate;
this.loanTermFrequencyType = productData.loanTermFrequencyType;
this.repaymentFrequencyType = productData.repaymentFrequencyType;
this.interestRateFrequencyType = productData.interestRateFrequencyType;
this.amortizationType = productData.amortizationType;
this.interestType = productData.interestType;
this.interestCalculationPeriodType = productData.interestCalculationPeriodType;
this.fundId = productData.fundId;
this.fundName = productData.fundName;
this.transactionProcessingStrategyId = productData.transactionProcessingStrategyId;
this.transactionProcessingStrategyName = productData.transactionProcessingStrategyName;
this.charges = null;
this.chargeOptions = chargeOptions;
this.currencyOptions = currencyOptions;
if (this.currencyOptions.size() == 1) {
this.currency = this.currencyOptions.get(0);
} else {
this.currency = productData.currency;
}
this.fundOptions = fundOptions;
this.transactionProcessingStrategyOptions = transactionProcessingStrategyOptions;
this.amortizationTypeOptions = amortizationTypeOptions;
this.interestTypeOptions = interestTypeOptions;
this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions;
this.loanTermFrequencyTypeOptions = loanTermFrequencyTypeOptions;
this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions;
this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
}
public Collection<ChargeData> charges() {
Collection<ChargeData> chargesLocal = new ArrayList<ChargeData>();
if (this.charges != null) {
chargesLocal = this.charges;
}
return chargesLocal;
} }
public Long getId() { public Long getId() {
return id; return id;
} }
public void setId(Long id) {
this.id = id;
}
public String getName() { public String getName() {
return name; return name;
} }
public void setName(String name) {
this.name = name;
}
public String getDescription() { public String getDescription() {
return description; return description;
} }
public void setDescription(String description) {
this.description = description;
}
public Long getFundId() { public Long getFundId() {
return fundId; return fundId;
} }
public void setFundId(Long fundId) {
this.fundId = fundId;
}
public String getFundName() { public String getFundName() {
return fundName; return fundName;
} }
public void setFundName(String fundName) {
this.fundName = fundName;
}
public Long getTransactionProcessingStrategyId() { public Long getTransactionProcessingStrategyId() {
return transactionProcessingStrategyId; return transactionProcessingStrategyId;
} }
public void setTransactionProcessingStrategyId(Long transactionProcessingStrategyId) {
this.transactionProcessingStrategyId = transactionProcessingStrategyId;
}
public String getTransactionProcessingStrategyName() { public String getTransactionProcessingStrategyName() {
return transactionProcessingStrategyName; return transactionProcessingStrategyName;
} }
public void setTransactionProcessingStrategyName(
String transactionProcessingStrategyName) {
this.transactionProcessingStrategyName = transactionProcessingStrategyName;
}
public CurrencyData getCurrency() { public CurrencyData getCurrency() {
return currency; return currency;
} }
public void setCurrency(CurrencyData currency) {
this.currency = currency;
}
public BigDecimal getPrincipal() { public BigDecimal getPrincipal() {
return principal; return principal;
} }
public void setPrincipal(BigDecimal principal) {
this.principal = principal;
}
public BigDecimal getInArrearsTolerance() { public BigDecimal getInArrearsTolerance() {
return inArrearsTolerance; return inArrearsTolerance;
} }
public void setInArrearsTolerance(BigDecimal inArrearsTolerance) {
this.inArrearsTolerance = inArrearsTolerance;
}
public Integer getNumberOfRepayments() { public Integer getNumberOfRepayments() {
return numberOfRepayments; return numberOfRepayments;
} }
public void setNumberOfRepayments(Integer numberOfRepayments) {
this.numberOfRepayments = numberOfRepayments;
}
public Integer getLoanTermFrequency() { public Integer getLoanTermFrequency() {
return loanTermFrequency; return loanTermFrequency;
} }
public void setLoanTermFrequency(Integer loanTermFrequency) {
this.loanTermFrequency = loanTermFrequency;
}
public Integer getRepaymentEvery() { public Integer getRepaymentEvery() {
return repaymentEvery; return repaymentEvery;
} }
public void setRepaymentEvery(Integer repaymentEvery) {
this.repaymentEvery = repaymentEvery;
}
public BigDecimal getInterestRatePerPeriod() { public BigDecimal getInterestRatePerPeriod() {
return interestRatePerPeriod; return interestRatePerPeriod;
} }
public void setInterestRatePerPeriod(BigDecimal interestRatePerPeriod) {
this.interestRatePerPeriod = interestRatePerPeriod;
}
public BigDecimal getAnnualInterestRate() { public BigDecimal getAnnualInterestRate() {
return annualInterestRate; return annualInterestRate;
} }
public void setAnnualInterestRate(BigDecimal annualInterestRate) { public EnumOptionData getLoanTermFrequencyType() {
this.annualInterestRate = annualInterestRate; return loanTermFrequencyType;
}
public DateTime getCreatedOn() {
return createdOn;
}
public void setCreatedOn(DateTime createdOn) {
this.createdOn = createdOn;
}
public DateTime getLastModifedOn() {
return lastModifedOn;
}
public void setLastModifedOn(DateTime lastModifedOn) {
this.lastModifedOn = lastModifedOn;
} }
public EnumOptionData getRepaymentFrequencyType() { public EnumOptionData getRepaymentFrequencyType() {
return repaymentFrequencyType; return repaymentFrequencyType;
} }
public void setRepaymentFrequencyType(EnumOptionData repaymentFrequencyType) {
this.repaymentFrequencyType = repaymentFrequencyType;
}
public EnumOptionData getInterestRateFrequencyType() { public EnumOptionData getInterestRateFrequencyType() {
return interestRateFrequencyType; return interestRateFrequencyType;
} }
public void setInterestRateFrequencyType(
EnumOptionData interestRateFrequencyType) {
this.interestRateFrequencyType = interestRateFrequencyType;
}
public EnumOptionData getAmortizationType() { public EnumOptionData getAmortizationType() {
return amortizationType; return amortizationType;
} }
public void setAmortizationType(EnumOptionData amortizationType) {
this.amortizationType = amortizationType;
}
public EnumOptionData getInterestType() { public EnumOptionData getInterestType() {
return interestType; return interestType;
} }
public void setInterestType(EnumOptionData interestType) {
this.interestType = interestType;
}
public EnumOptionData getInterestCalculationPeriodType() { public EnumOptionData getInterestCalculationPeriodType() {
return interestCalculationPeriodType; return interestCalculationPeriodType;
} }
public void setInterestCalculationPeriodType( public DateTime getCreatedOn() {
EnumOptionData interestCalculationPeriodType) { return createdOn;
this.interestCalculationPeriodType = interestCalculationPeriodType;
} }
public List<EnumOptionData> getRepaymentFrequencyTypeOptions() { public DateTime getLastModifedOn() {
return repaymentFrequencyTypeOptions; return lastModifedOn;
}
public void setRepaymentFrequencyTypeOptions(
List<EnumOptionData> repaymentFrequencyTypeOptions) {
this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions;
}
public List<EnumOptionData> getInterestRateFrequencyTypeOptions() {
return interestRateFrequencyTypeOptions;
}
public void setInterestRateFrequencyTypeOptions(
List<EnumOptionData> interestRateFrequencyTypeOptions) {
this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
}
public EnumOptionData getLoanTermFrequencyType() {
return loanTermFrequencyType;
}
public void setLoanTermFrequencyType(EnumOptionData loanTermFrequencyType) {
this.loanTermFrequencyType = loanTermFrequencyType;
}
public List<EnumOptionData> getLoanTermFrequencyTypeOptions() {
return loanTermFrequencyTypeOptions;
}
public void setLoanTermFrequencyTypeOptions(
List<EnumOptionData> loanTermFrequencyTypeOptions) {
this.loanTermFrequencyTypeOptions = loanTermFrequencyTypeOptions;
} }
public List<CurrencyData> getCurrencyOptions() { public List<CurrencyData> getCurrencyOptions() {
return currencyOptions; return currencyOptions;
} }
public void setCurrencyOptions(List<CurrencyData> currencyOptions) {
this.currencyOptions = currencyOptions;
}
public Collection<FundData> getFundOptions() { public Collection<FundData> getFundOptions() {
return fundOptions; return fundOptions;
} }
public void setFundOptions(Collection<FundData> fundOptions) {
this.fundOptions = fundOptions;
}
public Collection<TransactionProcessingStrategyData> getTransactionProcessingStrategyOptions() { public Collection<TransactionProcessingStrategyData> getTransactionProcessingStrategyOptions() {
return transactionProcessingStrategyOptions; return transactionProcessingStrategyOptions;
} }
public void setTransactionProcessingStrategyOptions(
Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions) {
this.transactionProcessingStrategyOptions = transactionProcessingStrategyOptions;
}
public List<EnumOptionData> getAmortizationTypeOptions() { public List<EnumOptionData> getAmortizationTypeOptions() {
return amortizationTypeOptions; return amortizationTypeOptions;
} }
public void setAmortizationTypeOptions(
List<EnumOptionData> amortizationTypeOptions) {
this.amortizationTypeOptions = amortizationTypeOptions;
}
public List<EnumOptionData> getInterestTypeOptions() { public List<EnumOptionData> getInterestTypeOptions() {
return interestTypeOptions; return interestTypeOptions;
} }
public void setInterestTypeOptions(List<EnumOptionData> interestTypeOptions) {
this.interestTypeOptions = interestTypeOptions;
}
public List<EnumOptionData> getInterestCalculationPeriodTypeOptions() { public List<EnumOptionData> getInterestCalculationPeriodTypeOptions() {
return interestCalculationPeriodTypeOptions; return interestCalculationPeriodTypeOptions;
} }
public void setInterestCalculationPeriodTypeOptions( public List<EnumOptionData> getRepaymentFrequencyTypeOptions() {
List<EnumOptionData> interestCalculationPeriodTypeOptions) { return repaymentFrequencyTypeOptions;
this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions;
} }
public Collection<ChargeData> getCharges() { public List<EnumOptionData> getInterestRateFrequencyTypeOptions() {
return charges; return interestRateFrequencyTypeOptions;
} }
public void setCharges(Collection<ChargeData> charges) { public List<EnumOptionData> getLoanTermFrequencyTypeOptions() {
this.charges = charges; return loanTermFrequencyTypeOptions;
} }
public Collection<ChargeData> getChargeOptions() { public Collection<ChargeData> getChargeOptions() {
return chargeOptions; return chargeOptions;
} }
public void setChargeOptions(Collection<ChargeData> chargeOptions) {
this.chargeOptions = chargeOptions;
}
} }
@@ -1,26 +0,0 @@
package org.mifosng.platform.api.data;
/**
* Immutable data object used for basic loan product info for lookup situations.
*
* TODO - kw - this can be replace and the normal {@link LoanProductData} used where only id and name are populated as google gson does
* not return null attributes/parameters.
*/
public class LoanProductLookup {
private final Long id;
private final String name;
public LoanProductLookup(final Long id, final String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
}
@@ -4,6 +4,10 @@ import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
/**
* @deprecated - Want to remove this and its usage around loans in full. In its place we just pass back a {@link BigDecimal} for the amount and a {@link CurrencyData} is also passed back.
*/
@Deprecated
public class MoneyData implements Serializable, Comparable<MoneyData> { public class MoneyData implements Serializable, Comparable<MoneyData> {
private String currencyCode; private String currencyCode;
@@ -335,23 +335,23 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
throw new InvalidJsonException(); throw new InvalidJsonException();
} }
Type typeOfMap = new TypeToken<Map<String, Object>>(){}.getType(); final Type typeOfMap = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap); final Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
Set<String> supportedParams = new HashSet<String>( final Set<String> supportedParams = new HashSet<String>(
Arrays.asList("name", "officeId", "externalId", "clientMembers") Arrays.asList("name", "officeId", "externalId", "clientMembers")
); );
checkForUnsupportedParameters(requestMap, supportedParams); checkForUnsupportedParameters(requestMap, supportedParams);
Set<String> modifiedParameters = new HashSet<String>(); final Set<String> modifiedParameters = new HashSet<String>();
Long officeId = extractLongParameter("officeId", requestMap, modifiedParameters); final Long officeId = extractLongParameter("officeId", requestMap, modifiedParameters);
String externalId = extractStringParameter("externalId", requestMap, modifiedParameters); final String externalId = extractStringParameter("externalId", requestMap, modifiedParameters);
String name = extractStringParameter("name", requestMap, modifiedParameters); final String name = extractStringParameter("name", requestMap, modifiedParameters);
// check array // check array
JsonParser parser = new JsonParser(); final JsonParser parser = new JsonParser();
String[] clientMembers = null; String[] clientMembers = null;
JsonElement element = parser.parse(json); JsonElement element = parser.parse(json);
@@ -378,44 +378,54 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
throw new InvalidJsonException(); throw new InvalidJsonException();
} }
Type typeOfMap = new TypeToken<Map<String, Object>>(){}.getType(); final Type typeOfMap = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> requestMap = gsonConverter.fromJson(json, typeOfMap); final Map<String, Object> requestMap = gsonConverter.fromJson(json, typeOfMap);
Set<String> supportedParams = new HashSet<String>( // FIXME - A - LoanProduct - KW - Do we add support for "overpaidTolerance" parameter?
Arrays.asList("name", "description", "fundId", "transactionProcessingStrategyId", "currencyCode", "digitsAfterDecimal", final Set<String> supportedParams = new HashSet<String>(
"principal", "inArrearsTolerance", "interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", Arrays.asList("name", "description", "fundId", "transactionProcessingStrategyId",
"repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", "currencyCode", "digitsAfterDecimal",
"principal", "inArrearsTolerance",
"interestRatePerPeriod", "repaymentEvery", "numberOfRepayments",
"repaymentFrequencyType", "interestRateFrequencyType",
"amortizationType", "interestType", "interestCalculationPeriodType",
"charges", "locale") "charges", "locale")
); );
checkForUnsupportedParameters(requestMap, supportedParams); checkForUnsupportedParameters(requestMap, supportedParams);
Set<String> modifiedParameters = new HashSet<String>(); final JsonParser parser = new JsonParser();
final JsonElement element = parser.parse(json);
final JsonParserHelper helper = new JsonParserHelper();
String name = extractStringParameter("name", requestMap, modifiedParameters); final Set<String> modifiedParameters = new HashSet<String>();
String description = extractStringParameter("description", requestMap, modifiedParameters); final String name = helper.extractStringNamed("name", element, modifiedParameters);
Long fundId = extractLongParameter("fundId", requestMap, modifiedParameters); final String description = helper.extractStringNamed("description", element, modifiedParameters);
Long transactionProcessingStrategyId = extractLongParameter("transactionProcessingStrategyId", requestMap, modifiedParameters); final Long fundId = helper.extractLongNamed("fundId", element, modifiedParameters);
String currencyCode = extractStringParameter("currencyCode", requestMap, modifiedParameters);
Integer digitsAfterDecimalValue = extractIntegerParameter("digitsAfterDecimal", requestMap, modifiedParameters);
BigDecimal principalValue = extractBigDecimalParameter("principal", requestMap, modifiedParameters);
BigDecimal inArrearsToleranceValue = extractBigDecimalParameter("inArrearsTolerance", requestMap, modifiedParameters);
BigDecimal interestRatePerPeriodValue = extractBigDecimalParameter("interestRatePerPeriod", requestMap, modifiedParameters);
Integer repaymentEveryValue = extractIntegerParameter("repaymentEvery", requestMap, modifiedParameters); final Long transactionProcessingStrategyId = helper.extractLongNamed("transactionProcessingStrategyId", element, modifiedParameters);
Integer numberOfRepaymentsValue = extractIntegerParameter("numberOfRepayments", requestMap, modifiedParameters);
Integer repaymentFrequencyTypeValue = extractIntegerParameter("repaymentFrequencyType", requestMap, modifiedParameters);
Integer interestRateFrequencyTypeValue = extractIntegerParameter("interestRateFrequencyType", requestMap, modifiedParameters); final String currencyCode = helper.extractStringNamed("currencyCode", element, modifiedParameters);
Integer amortizationTypeValue = extractIntegerParameter("amortizationType", requestMap, modifiedParameters); final Integer digitsAfterDecimal = helper.extractIntegerNamed("digitsAfterDecimal", element, modifiedParameters);
Integer interestTypeValue = extractIntegerParameter("interestType", requestMap, modifiedParameters);
Integer interestCalculationPeriodTypeValue = extractIntegerParameter("interestCalculationPeriodType", requestMap, modifiedParameters);
// check array final BigDecimal principal = helper.extractBigDecimalNamed("principal", element, modifiedParameters);
JsonParser parser = new JsonParser(); final BigDecimal inArrearsTolerance = helper.extractBigDecimalNamed("inArrearsTolerance", element, modifiedParameters);
final BigDecimal interestRatePerPeriod = helper.extractBigDecimalNamed("interestRatePerPeriod", element, modifiedParameters);
final Integer repaymentEvery = helper.extractIntegerNamed("repaymentEvery", element, modifiedParameters);
final Integer numberOfRepayments = helper.extractIntegerNamed("numberOfRepayments", element, modifiedParameters);
final Integer repaymentFrequencyType = helper.extractIntegerNamed("repaymentFrequencyType", element, modifiedParameters);
// FIXME - A - LoanProduct - KW - should loan term fields be part of product also as are basic part of 'loan terms'
// final Integer loanTermFrequency = helper.extractIntegerNamed("loanTermFrequency", element, modifiedParameters);
// final Integer loanTermFrequencyType = helper.extractIntegerNamed("loanTermFrequencyType", element, modifiedParameters);
final Integer interestRateFrequencyType = helper.extractIntegerNamed("interestRateFrequencyType", element, modifiedParameters);
final Integer amortizationType = helper.extractIntegerNamed("amortizationType", element, modifiedParameters);
final Integer interestType = helper.extractIntegerNamed("interestType", element, modifiedParameters);
final Integer interestCalculationPeriodType = helper.extractIntegerNamed("interestCalculationPeriodType", element, modifiedParameters);
// FIXME - A - LoanProduct - KW - product charges at present dont allow for adding 'charge' to loan product and setting its 'amount', might this be needed?
// loan product charges
String[] charges = null; String[] charges = null;
JsonElement element = parser.parse(json);
if (element.isJsonObject()) { if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject(); JsonObject object = element.getAsJsonObject();
if (object.has("charges")) { if (object.has("charges")) {
@@ -427,11 +437,10 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
} }
} }
} }
//
return new LoanProductCommand(modifiedParameters, resourceIdentifier, name, description, fundId, transactionProcessingStrategyId, return new LoanProductCommand(modifiedParameters, resourceIdentifier, name, description, fundId, transactionProcessingStrategyId,
currencyCode, digitsAfterDecimalValue, principalValue, inArrearsToleranceValue, numberOfRepaymentsValue, repaymentEveryValue, interestRatePerPeriodValue, currencyCode, digitsAfterDecimal, principal, inArrearsTolerance, numberOfRepayments, repaymentEvery, interestRatePerPeriod,
repaymentFrequencyTypeValue, interestRateFrequencyTypeValue, amortizationTypeValue, interestTypeValue, interestCalculationPeriodTypeValue, charges); repaymentFrequencyType, interestRateFrequencyType, amortizationType, interestType, interestCalculationPeriodType, charges);
} }
@Override @Override
@@ -441,10 +450,10 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
throw new InvalidJsonException(); throw new InvalidJsonException();
} }
Type typeOfMap = new TypeToken<Map<String, Object>>(){}.getType(); final Type typeOfMap = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> requestMap = gsonConverter.fromJson(json, typeOfMap); final Map<String, Object> requestMap = gsonConverter.fromJson(json, typeOfMap);
Set<String> supportedParams = new HashSet<String>( final Set<String> supportedParams = new HashSet<String>(
Arrays.asList("clientId", "groupId", "productId", "externalId", "fundId", "transactionProcessingStrategyId", Arrays.asList("clientId", "groupId", "productId", "externalId", "fundId", "transactionProcessingStrategyId",
"principal", "inArrearsTolerance", "interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", "principal", "inArrearsTolerance", "interestRatePerPeriod", "repaymentEvery", "numberOfRepayments",
"loanTermFrequency", "loanTermFrequencyType", "charges", "loanTermFrequency", "loanTermFrequencyType", "charges",
@@ -455,11 +464,11 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
checkForUnsupportedParameters(requestMap, supportedParams); checkForUnsupportedParameters(requestMap, supportedParams);
Set<String> modifiedParameters = new HashSet<String>(); final Set<String> modifiedParameters = new HashSet<String>();
JsonParser parser = new JsonParser(); final JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json); final JsonElement element = parser.parse(json);
JsonParserHelper helper = new JsonParserHelper(); final JsonParserHelper helper = new JsonParserHelper();
final Long clientId = helper.extractLongNamed("clientId", element, modifiedParameters); final Long clientId = helper.extractLongNamed("clientId", element, modifiedParameters);
final Long groupId = helper.extractLongNamed("groupId", element, modifiedParameters); final Long groupId = helper.extractLongNamed("groupId", element, modifiedParameters);
@@ -46,18 +46,16 @@ public class JsonParserHelper {
return longValue; return longValue;
} }
public String extractStringNamed(final String parameterName, public String extractStringNamed(final String parameterName, final JsonElement element, final Set<String> modifiedParameters) {
final JsonElement element, final Set<String> modifiedParameters) {
String stringValue = null; String stringValue = null;
if (element.isJsonObject()) { if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject(); JsonObject object = element.getAsJsonObject();
if (object.has(parameterName) if (object.has(parameterName) && object.get(parameterName).isJsonPrimitive()) {
&& object.get(parameterName).isJsonPrimitive()) {
modifiedParameters.add(parameterName); modifiedParameters.add(parameterName);
JsonPrimitive primitive = object.get(parameterName) final JsonPrimitive primitive = object.get(parameterName).getAsJsonPrimitive();
.getAsJsonPrimitive(); final String valueAsString = primitive.getAsString();
if (StringUtils.isNotBlank(stringValue)) { if (StringUtils.isNotBlank(valueAsString)) {
stringValue = primitive.getAsString(); stringValue = valueAsString;
} }
} }
} }
@@ -3,13 +3,12 @@ package org.mifosng.platform.loanproduct.service;
import java.util.Collection; import java.util.Collection;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.LoanProductLookup;
public interface LoanProductReadPlatformService { public interface LoanProductReadPlatformService {
Collection<LoanProductData> retrieveAllLoanProducts(); Collection<LoanProductData> retrieveAllLoanProducts();
Collection<LoanProductLookup> retrieveAllLoanProductsForLookup(); Collection<LoanProductData> retrieveAllLoanProductsForLookup();
LoanProductData retrieveLoanProduct(Long productId); LoanProductData retrieveLoanProduct(Long productId);
@@ -4,27 +4,16 @@ import java.math.BigDecimal;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.CurrencyData; import org.mifosng.platform.api.data.CurrencyData;
import org.mifosng.platform.api.data.EnumOptionData; import org.mifosng.platform.api.data.EnumOptionData;
import org.mifosng.platform.api.data.FundData;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.LoanProductLookup;
import org.mifosng.platform.api.data.MoneyData;
import org.mifosng.platform.api.data.TransactionProcessingStrategyData;
import org.mifosng.platform.charge.service.ChargeReadPlatformService; import org.mifosng.platform.charge.service.ChargeReadPlatformService;
import org.mifosng.platform.currency.service.CurrencyReadPlatformService;
import org.mifosng.platform.exceptions.LoanProductNotFoundException; import org.mifosng.platform.exceptions.LoanProductNotFoundException;
import org.mifosng.platform.fund.service.FundReadPlatformService;
import org.mifosng.platform.infrastructure.JdbcSupport; import org.mifosng.platform.infrastructure.JdbcSupport;
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource; import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
import org.mifosng.platform.loan.domain.AmortizationMethod;
import org.mifosng.platform.loan.domain.InterestCalculationPeriodMethod;
import org.mifosng.platform.loan.domain.InterestMethod;
import org.mifosng.platform.loan.domain.PeriodFrequencyType;
import org.mifosng.platform.security.PlatformSecurityContext; import org.mifosng.platform.security.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
@@ -36,24 +25,15 @@ import org.springframework.stereotype.Service;
public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatformService { public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatformService {
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
private final CurrencyReadPlatformService currencyReadPlatformService;
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
private final LoanDropdownReadPlatformService dropdownReadPlatformService;
private final FundReadPlatformService fundReadPlatformService;
private final ChargeReadPlatformService chargeReadPlatformService; private final ChargeReadPlatformService chargeReadPlatformService;
@Autowired @Autowired
public LoanProductReadPlatformServiceImpl( public LoanProductReadPlatformServiceImpl(
final PlatformSecurityContext context, final PlatformSecurityContext context,
final CurrencyReadPlatformService currencyReadPlatformService,
final FundReadPlatformService fundReadPlatformService,
final LoanDropdownReadPlatformService dropdownReadPlatformService,
final ChargeReadPlatformService chargeReadPlatformService, final ChargeReadPlatformService chargeReadPlatformService,
final TenantAwareRoutingDataSource dataSource) { final TenantAwareRoutingDataSource dataSource) {
this.context = context; this.context = context;
this.currencyReadPlatformService = currencyReadPlatformService;
this.fundReadPlatformService = fundReadPlatformService;
this.dropdownReadPlatformService = dropdownReadPlatformService;
this.chargeReadPlatformService = chargeReadPlatformService; this.chargeReadPlatformService = chargeReadPlatformService;
this.jdbcTemplate = new JdbcTemplate(dataSource); this.jdbcTemplate = new JdbcTemplate(dataSource);
} }
@@ -62,19 +42,14 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
public LoanProductData retrieveLoanProduct(final Long loanProductId) { public LoanProductData retrieveLoanProduct(final Long loanProductId) {
try { try {
LoanProductMapper rm = new LoanProductMapper(); final Collection<ChargeData> charges = this.chargeReadPlatformService.retrieveLoanProductCharges(loanProductId);
String sql = "select " + rm.loanProductSchema()
+ " where lp.id = ?";
LoanProductData productData = this.jdbcTemplate.queryForObject(sql, final LoanProductMapper rm = new LoanProductMapper(charges);
rm, new Object[] { loanProductId }); final String sql = "select " + rm.loanProductSchema() + " where lp.id = ?";
Collection<ChargeData> charges = this.chargeReadPlatformService.retrieveLoanProductCharges(loanProductId);
productData.setCharges(charges);
populateProductDataWithDropdownOptions(productData); return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { loanProductId });
return productData;
} catch (EmptyResultDataAccessException e) { } catch (EmptyResultDataAccessException e) {
throw new LoanProductNotFoundException(loanProductId); throw new LoanProductNotFoundException(loanProductId);
} }
@@ -85,69 +60,37 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
this.context.authenticatedUser(); this.context.authenticatedUser();
LoanProductMapper rm = new LoanProductMapper(); final LoanProductMapper rm = new LoanProductMapper(null);
String sql = "select " + rm.loanProductSchema(); final String sql = "select " + rm.loanProductSchema();
Collection<LoanProductData> loanProducts = this.jdbcTemplate.query(sql, rm, new Object[] {}); return this.jdbcTemplate.query(sql, rm, new Object[] {});
for (LoanProductData loanProduct : loanProducts){
Collection<ChargeData> charges = this.chargeReadPlatformService.retrieveLoanProductCharges(loanProduct.getId());
loanProduct.setCharges(charges);
}
return loanProducts;
} }
@Override @Override
public Collection<LoanProductLookup> retrieveAllLoanProductsForLookup() { public Collection<LoanProductData> retrieveAllLoanProductsForLookup() {
this.context.authenticatedUser(); this.context.authenticatedUser();
LoanProductLookupMapper rm = new LoanProductLookupMapper(); final LoanProductLookupMapper rm = new LoanProductLookupMapper();
String sql = "select " + rm.loanProductLookupSchema(); final String sql = "select " + rm.loanProductLookupSchema();
return this.jdbcTemplate.query(sql, rm, new Object[] {}); return this.jdbcTemplate.query(sql, rm, new Object[] {});
} }
@Override @Override
public LoanProductData retrieveNewLoanProductDetails() { public LoanProductData retrieveNewLoanProductDetails() {
return LoanProductData.sensibleDefaultsForNewLoanProductCreation();
LoanProductData productData = new LoanProductData();
productData.setAmortizationType(LoanEnumerations.amortizationType(AmortizationMethod.EQUAL_INSTALLMENTS));
productData.setInterestType(LoanEnumerations.interestType(InterestMethod.DECLINING_BALANCE));
productData.setLoanTermFrequencyType(LoanEnumerations.loanTermFrequencyType(PeriodFrequencyType.MONTHS));
productData.setRepaymentFrequencyType(LoanEnumerations.repaymentFrequencyType(PeriodFrequencyType.MONTHS));
productData.setInterestRateFrequencyType(LoanEnumerations.interestRateFrequencyType(PeriodFrequencyType.MONTHS));
productData.setInterestCalculationPeriodType(LoanEnumerations.interestCalculationPeriodType(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD));
productData.setChargeOptions(this.chargeReadPlatformService.retrieveLoanApplicableCharges());
populateProductDataWithDropdownOptions(productData);
productData.setPrincipal(BigDecimal.ZERO);
productData.setInArrearsTolerance(BigDecimal.ZERO);
CurrencyData currency = new CurrencyData("", "", 0, "", "");
productData.setCurrency(currency);
if (productData.getCurrencyOptions().size() == 1) {
currency = productData.getCurrencyOptions().get(0);
productData.setCurrency(currency);
}
return productData;
} }
private static final class LoanProductMapper implements private static final class LoanProductMapper implements
RowMapper<LoanProductData> { RowMapper<LoanProductData> {
public LoanProductMapper() { private final Collection<ChargeData> charges;
public LoanProductMapper(final Collection<ChargeData> charges) {
this.charges = charges;
} }
public String loanProductSchema() { public String loanProductSchema() {
@@ -170,115 +113,78 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
public LoanProductData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) public LoanProductData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum)
throws SQLException { throws SQLException {
Long id = rs.getLong("id"); final Long id = rs.getLong("id");
String name = rs.getString("name"); final String name = rs.getString("name");
String description = rs.getString("description"); final String description = rs.getString("description");
final Long fundId = JdbcSupport.getLong(rs, "fundId");
final String fundName = rs.getString("fundName");
final Long transactionStrategyId = JdbcSupport.getLong(rs, "transactionStrategyId");
final String transactionStrategyName = rs.getString("transactionStrategyName");
Long fundId = JdbcSupport.getLong(rs, "fundId"); final String currencyCode = rs.getString("currencyCode");
String fundName = rs.getString("fundName"); final String currencyName = rs.getString("currencyName");
final String currencyNameCode = rs.getString("currencyNameCode");
final String currencyDisplaySymbol = rs.getString("currencyDisplaySymbol");
final Integer currencyDigits = JdbcSupport.getInteger(rs, "currencyDigits");
Long transactionStrategyId = JdbcSupport.getLong(rs, "transactionStrategyId"); final CurrencyData currency = new CurrencyData(currencyCode,
String transactionStrategyName = rs.getString("transactionStrategyName");
String currencyCode = rs.getString("currencyCode");
String currencyName = rs.getString("currencyName");
String currencyNameCode = rs.getString("currencyNameCode");
String currencyDisplaySymbol = rs
.getString("currencyDisplaySymbol");
Integer currencyDigits = JdbcSupport.getInteger(rs,
"currencyDigits");
CurrencyData currencyData = new CurrencyData(currencyCode,
currencyName, currencyDigits, currencyDisplaySymbol, currencyName, currencyDigits, currencyDisplaySymbol,
currencyNameCode); currencyNameCode);
BigDecimal principal = rs.getBigDecimal("principal"); final BigDecimal principal = rs.getBigDecimal("principal");
BigDecimal tolerance = rs.getBigDecimal("tolerance"); final BigDecimal tolerance = rs.getBigDecimal("tolerance");
MoneyData principalMoney = MoneyData.of(currencyData, principal); final Integer numberOfRepayments = JdbcSupport.getInteger(rs,"numberOfRepayments");
MoneyData toleranceMoney = MoneyData.of(currencyData, tolerance); final Integer repaymentEvery = JdbcSupport.getInteger(rs, "repaidEvery");
final Integer loanTermFrequency = repaymentEvery * numberOfRepayments;
final BigDecimal interestRatePerPeriod = rs.getBigDecimal("interestRatePerPeriod");
final BigDecimal annualInterestRate = rs.getBigDecimal("annualInterestRate");
Integer numberOfRepayments = JdbcSupport.getInteger(rs,"numberOfRepayments"); final int repaymentFrequencyTypeId = JdbcSupport.getInteger(rs, "repaymentPeriodFrequency");
Integer repaymentEvery = JdbcSupport.getInteger(rs, "repaidEvery"); final EnumOptionData repaymentFrequencyType = LoanEnumerations.repaymentFrequencyType(repaymentFrequencyTypeId);
Integer loanTermFrequency = repaymentEvery * numberOfRepayments;
BigDecimal interestRatePerPeriod = rs.getBigDecimal("interestRatePerPeriod");
BigDecimal annualInterestRate = rs.getBigDecimal("annualInterestRate");
int repaymentFrequencyTypeId = JdbcSupport.getInteger(rs, "repaymentPeriodFrequency"); final EnumOptionData loanTermFrequencyType = LoanEnumerations.loanTermFrequencyType(repaymentFrequencyTypeId);
EnumOptionData repaymentFrequencyType = LoanEnumerations.repaymentFrequencyType(repaymentFrequencyTypeId);
EnumOptionData loanTermFrequencyType = LoanEnumerations.loanTermFrequencyType(repaymentFrequencyTypeId); final int amortizationTypeId = JdbcSupport.getInteger(rs, "amortizationMethod");
final EnumOptionData amortizationType = LoanEnumerations.amortizationType(amortizationTypeId);
int amortizationTypeId = JdbcSupport.getInteger(rs, final int interestRateFrequencyTypeId = JdbcSupport.getInteger(rs,"interestRatePerPeriodFreq");
"amortizationMethod"); final EnumOptionData interestRateFrequencyType = LoanEnumerations.interestRateFrequencyType(interestRateFrequencyTypeId);
EnumOptionData amortizationType = LoanEnumerations
.amortizationType(amortizationTypeId);
int interestRateFrequencyTypeId = JdbcSupport.getInteger(rs,"interestRatePerPeriodFreq"); final int interestTypeId = JdbcSupport.getInteger(rs, "interestMethod");
EnumOptionData interestRateFrequencyType = LoanEnumerations.interestRateFrequencyType(interestRateFrequencyTypeId); final EnumOptionData interestType = LoanEnumerations.interestType(interestTypeId);
int interestTypeId = JdbcSupport.getInteger(rs, "interestMethod"); final int interestCalculationPeriodTypeId = JdbcSupport.getInteger(rs,"interestCalculationInPeriodMethod");
EnumOptionData interestType = LoanEnumerations.interestType(interestTypeId); final EnumOptionData interestCalculationPeriodType = LoanEnumerations.interestCalculationPeriodType(interestCalculationPeriodTypeId);
int interestCalculationPeriodTypeId = JdbcSupport.getInteger(rs, final DateTime createdOn = JdbcSupport.getDateTime(rs, "createdon");
"interestCalculationInPeriodMethod"); final DateTime lastModifedOn = JdbcSupport.getDateTime(rs, "modifiedon");
EnumOptionData interestCalculationPeriodType = LoanEnumerations
.interestCalculationPeriodType(interestCalculationPeriodTypeId);
DateTime createdOn = JdbcSupport.getDateTime(rs, "createdon");
DateTime lastModifedOn = JdbcSupport.getDateTime(rs, "modifiedon");
return new LoanProductData(createdOn, lastModifedOn, id, name, return new LoanProductData(createdOn, lastModifedOn, id, name,
description, principalMoney, toleranceMoney, description, currency, principal, tolerance,
numberOfRepayments, loanTermFrequency, repaymentEvery, interestRatePerPeriod, numberOfRepayments, loanTermFrequency, repaymentEvery, interestRatePerPeriod,
annualInterestRate, loanTermFrequencyType, repaymentFrequencyType, annualInterestRate, loanTermFrequencyType, repaymentFrequencyType,
interestRateFrequencyType, amortizationType, interestType, interestRateFrequencyType, amortizationType, interestType,
interestCalculationPeriodType, fundId, fundName, transactionStrategyId, transactionStrategyName); interestCalculationPeriodType, fundId, fundName, transactionStrategyId, transactionStrategyName, this.charges);
} }
} }
private static final class LoanProductLookupMapper implements private static final class LoanProductLookupMapper implements
RowMapper<LoanProductLookup> { RowMapper<LoanProductData> {
public String loanProductLookupSchema() { public String loanProductLookupSchema() {
return "lp.id as id, lp.name as name from m_product_loan lp"; return "lp.id as id, lp.name as name from m_product_loan lp";
} }
@Override @Override
public LoanProductLookup mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) public LoanProductData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum)
throws SQLException { throws SQLException {
Long id = rs.getLong("id"); final Long id = rs.getLong("id");
String name = rs.getString("name"); final String name = rs.getString("name");
return new LoanProductLookup(id, name); return LoanProductData.lookup(id, name);
} }
} }
private void populateProductDataWithDropdownOptions(final LoanProductData productData) {
List<CurrencyData> currencyOptions = currencyReadPlatformService.retrieveAllowedCurrencies();
List<EnumOptionData> amortizationTypeOptions = dropdownReadPlatformService.retrieveLoanAmortizationTypeOptions();
List<EnumOptionData> interestTypeOptions = dropdownReadPlatformService.retrieveLoanInterestTypeOptions();
List<EnumOptionData> interestCalculationPeriodTypeOptions = dropdownReadPlatformService.retrieveLoanInterestRateCalculatedInPeriodOptions();
List<EnumOptionData> loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions();
List<EnumOptionData> repaymentFrequencyTypeOptions = dropdownReadPlatformService.retrieveRepaymentFrequencyTypeOptions();
List<EnumOptionData> interestRateFrequencyTypeOptions = dropdownReadPlatformService.retrieveInterestRateFrequencyTypeOptions();
Collection<FundData> fundOptions = this.fundReadPlatformService.retrieveAllFunds();
Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies();
productData.setCurrencyOptions(currencyOptions);
productData.setAmortizationTypeOptions(amortizationTypeOptions);
productData.setInterestTypeOptions(interestTypeOptions);
productData.setInterestCalculationPeriodTypeOptions(interestCalculationPeriodTypeOptions);
productData.setLoanTermFrequencyTypeOptions(loanTermFrequencyTypeOptions);
productData.setRepaymentFrequencyTypeOptions(repaymentFrequencyTypeOptions);
productData.setInterestRateFrequencyTypeOptions(interestRateFrequencyTypeOptions);
productData.setFundOptions(fundOptions);
productData.setTransactionProcessingStrategyOptions(transactionProcessingStrategyOptions);
}
} }