Merge pull request #344 from vishwasbabu/mifosx-413

optionally fetch all penalty options as part of loan product creation
This commit is contained in:
Vishwas Babu A J
2013-06-07 21:28:37 -07:00
5 changed files with 33 additions and 9 deletions
@@ -194,6 +194,7 @@ public class ProductToGLAccountMappingWritePlatformServiceImpl implements Produc
loanProductToGLAccountMappingHelper.handleChangesToLoanProductToGLAccountMappings(loanProductId, changes, element,
accountingRuleType);
loanProductToGLAccountMappingHelper.updatePaymentChannelToFundSourceMappings(command, element, loanProductId, changes);
loanProductToGLAccountMappingHelper.updateChargesToIncomeAccountMappings(command, element, loanProductId, changes);
}
return changes;
}
@@ -19,5 +19,7 @@ public interface ChargeReadPlatformService {
Collection<ChargeData> retrieveLoanApplicableCharges(boolean feeChargesOnly);
Collection<ChargeData> retrieveLoanApplicablePenalties();
Collection<ChargeData> retrieveLoanProductCharges(Long loanProductId);
}
@@ -111,6 +111,17 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
return this.jdbcTemplate.query(sql, rm, new Object[] { ChargeAppliesTo.LOAN.getValue() });
}
@Override
public Collection<ChargeData> retrieveLoanApplicablePenalties() {
this.context.authenticatedUser();
final ChargeMapper rm = new ChargeMapper();
String sql = "select " + rm.chargeSchema()
+ " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=1 and c.charge_applies_to_enum=? order by c.name ";
return this.jdbcTemplate.query(sql, rm, new Object[] { ChargeAppliesTo.LOAN.getValue() });
}
private static final class ChargeMapper implements RowMapper<ChargeData> {
@@ -157,4 +168,5 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
active);
}
}
}
@@ -204,6 +204,11 @@ public class LoanProductsApiResource {
chargeOptions = null;
}
Collection<ChargeData> penaltyOptions = this.chargeReadPlatformService.retrieveLoanApplicablePenalties();
if (penaltyOptions.isEmpty()) {
penaltyOptions = null;
}
final Collection<CurrencyData> currencyOptions = currencyReadPlatformService.retrieveAllowedCurrencies();
final List<EnumOptionData> amortizationTypeOptions = dropdownReadPlatformService.retrieveLoanAmortizationTypeOptions();
final List<EnumOptionData> interestTypeOptions = dropdownReadPlatformService.retrieveLoanInterestTypeOptions();
@@ -227,8 +232,9 @@ public class LoanProductsApiResource {
List<EnumOptionData> accountingRuleTypeOptions = accountingDropdownReadPlatformService.retrieveAccountingRuleTypeOptions();
return new LoanProductData(productData, chargeOptions, paymentTypeOptions, currencyOptions, amortizationTypeOptions,
interestTypeOptions, interestCalculationPeriodTypeOptions, repaymentFrequencyTypeOptions, interestRateFrequencyTypeOptions,
fundOptions, transactionProcessingStrategyOptions, accountOptions, accountingRuleTypeOptions);
return new LoanProductData(productData, chargeOptions, penaltyOptions, paymentTypeOptions, currencyOptions,
amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, repaymentFrequencyTypeOptions,
interestRateFrequencyTypeOptions, fundOptions, transactionProcessingStrategyOptions, accountOptions,
accountingRuleTypeOptions);
}
}
@@ -89,6 +89,8 @@ public class LoanProductData {
private final Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions;
private final Collection<ChargeData> chargeOptions;
@SuppressWarnings("unused")
private final Collection<ChargeData> penaltyOptions;
@SuppressWarnings("unused")
private final List<EnumOptionData> accountingRuleOptions;
@SuppressWarnings("unused")
private final Map<String, List<GLAccountData>> accountingMappingOptions;
@@ -269,6 +271,7 @@ public class LoanProductData {
this.accountingRule = accountingType;
this.chargeOptions = null;
this.penaltyOptions = null;
this.paymentTypeOptions = null;
this.currencyOptions = null;
this.fundOptions = null;
@@ -288,11 +291,11 @@ public class LoanProductData {
}
public LoanProductData(final LoanProductData productData, final Collection<ChargeData> chargeOptions,
final Collection<CodeValueData> paymentTypeOptions, final Collection<CurrencyData> currencyOptions,
final List<EnumOptionData> amortizationTypeOptions, final List<EnumOptionData> interestTypeOptions,
final List<EnumOptionData> interestCalculationPeriodTypeOptions, final List<EnumOptionData> repaymentFrequencyTypeOptions,
final List<EnumOptionData> interestRateFrequencyTypeOptions, final Collection<FundData> fundOptions,
final Collection<TransactionProcessingStrategyData> transactionStrategyOptions,
final Collection<ChargeData> penaltyOptions, final Collection<CodeValueData> paymentTypeOptions,
final Collection<CurrencyData> currencyOptions, final List<EnumOptionData> amortizationTypeOptions,
final List<EnumOptionData> interestTypeOptions, final List<EnumOptionData> interestCalculationPeriodTypeOptions,
final List<EnumOptionData> repaymentFrequencyTypeOptions, final List<EnumOptionData> interestRateFrequencyTypeOptions,
final Collection<FundData> fundOptions, final Collection<TransactionProcessingStrategyData> transactionStrategyOptions,
final Map<String, List<GLAccountData>> accountingMappingOptions, final List<EnumOptionData> accountingRuleOptions) {
this.id = productData.id;
this.name = productData.name;
@@ -326,6 +329,7 @@ public class LoanProductData {
this.penaltyToIncomeAccountMappings = productData.penaltyToIncomeAccountMappings;
this.chargeOptions = chargeOptions;
this.penaltyOptions = penaltyOptions;
this.paymentTypeOptions = paymentTypeOptions;
this.currencyOptions = currencyOptions;
this.currency = productData.currency;
@@ -355,7 +359,6 @@ public class LoanProductData {
this.accountingMappingOptions = accountingMappingOptions;
this.accountingRuleOptions = accountingRuleOptions;
}
private Collection<ChargeData> nullIfEmpty(final Collection<ChargeData> charges) {