updates for payment details

This commit is contained in:
Vishwas Babu AJ
2013-04-12 20:40:42 +05:30
parent 850981d4a9
commit 45bf43de5e
6 changed files with 136 additions and 92 deletions
@@ -7,6 +7,7 @@ package org.mifosplatform.portfolio.loanaccount.api;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ws.rs.Consumes;
@@ -26,12 +27,15 @@ import org.mifosplatform.commands.service.CommandWrapperBuilder;
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamException;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionData;
import org.mifosplatform.portfolio.loanaccount.domain.PaymentType;
import org.mifosplatform.portfolio.loanaccount.service.LoanReadPlatformService;
import org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@@ -104,9 +108,13 @@ public class LoanTransactionsApiResource {
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
final LoanTransactionData transactionData = this.loanReadPlatformService.retrieveLoanTransaction(loanId, transactionId);
LoanTransactionData transactionData = this.loanReadPlatformService.retrieveLoanTransaction(loanId, transactionId);
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (settings.isTemplate()) {
final List<EnumOptionData> paymentTypeOptions = LoanEnumerations.paymentTypes(PaymentType.values());
transactionData = LoanTransactionData.templateOnTop(transactionData, paymentTypeOptions);
}
return this.toApiJsonSerializer.serialize(settings, transactionData, RESPONSE_DATA_PARAMETERS);
}
@@ -150,10 +158,10 @@ public class LoanTransactionsApiResource {
CommandWrapperBuilder builder = new CommandWrapperBuilder().withJson(apiRequestBodyAsJson);
final CommandWrapper commandRequest = builder.adjustTransaction(loanId, transactionId).build();
final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
return this.toApiJsonSerializer.serialize(result);
}
}
@@ -6,8 +6,10 @@
package org.mifosplatform.portfolio.loanaccount.data;
import java.math.BigDecimal;
import java.util.List;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.organisation.monetary.data.CurrencyData;
/**
@@ -15,32 +17,42 @@ import org.mifosplatform.organisation.monetary.data.CurrencyData;
*/
public class LoanTransactionData {
@SuppressWarnings("unused")
private final Long id;
private final LoanTransactionEnumData type;
private final LocalDate date;
@SuppressWarnings("unused")
private final CurrencyData currency;
@SuppressWarnings("unused")
private final PaymentDetailData paymentDetailData;
@SuppressWarnings("unused")
private final BigDecimal amount;
@SuppressWarnings("unused")
private final BigDecimal principalPortion;
@SuppressWarnings("unused")
private final BigDecimal interestPortion;
@SuppressWarnings("unused")
private final BigDecimal feeChargesPortion;
@SuppressWarnings("unused")
private final BigDecimal penaltyChargesPortion;
// templates
final List<EnumOptionData> paymentTypeOptions;
public static LoanTransactionData templateOnTop(LoanTransactionData loanTransactionData, List<EnumOptionData> paymentTypeOptions) {
return new LoanTransactionData(loanTransactionData.id, loanTransactionData.type, loanTransactionData.paymentDetailData,
loanTransactionData.currency, loanTransactionData.date, loanTransactionData.amount, loanTransactionData.principalPortion,
loanTransactionData.interestPortion, loanTransactionData.feeChargesPortion, loanTransactionData.penaltyChargesPortion,
paymentTypeOptions);
}
public LoanTransactionData(final Long id, final LoanTransactionEnumData transactionType, final PaymentDetailData paymentDetailData,
final CurrencyData currency, final LocalDate date, final BigDecimal amount, final BigDecimal principalPortion,
final BigDecimal interestPortion, final BigDecimal feeChargesPortion, final BigDecimal penaltyChargesPortion) {
this(id, transactionType, paymentDetailData, currency, date, amount, principalPortion, interestPortion, feeChargesPortion,
penaltyChargesPortion, null);
}
public LoanTransactionData(final Long id, final LoanTransactionEnumData transactionType, final PaymentDetailData paymentDetailData,
final CurrencyData currency, final LocalDate date, final BigDecimal amount, final BigDecimal principalPortion,
final BigDecimal interestPortion, final BigDecimal feeChargesPortion, final BigDecimal penaltyChargesPortion,
final List<EnumOptionData> paymentTypeOptions) {
this.id = id;
this.type = transactionType;
this.paymentDetailData = paymentDetailData;
@@ -51,6 +63,7 @@ public class LoanTransactionData {
this.interestPortion = interestPortion;
this.feeChargesPortion = feeChargesPortion;
this.penaltyChargesPortion = penaltyChargesPortion;
this.paymentTypeOptions = paymentTypeOptions;
}
public LocalDate dateOf() {
@@ -10,6 +10,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.joda.time.Days;
import org.joda.time.LocalDate;
@@ -47,6 +48,7 @@ import org.mifosplatform.portfolio.loanaccount.exception.LoanTransactionNotFound
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanScheduleData;
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData;
import org.mifosplatform.portfolio.loanproduct.data.LoanProductData;
import org.mifosplatform.portfolio.loanproduct.service.LoanDropdownReadPlatformService;
import org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations;
import org.mifosplatform.portfolio.loanproduct.service.LoanProductReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -68,13 +70,15 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
private final ClientReadPlatformService clientReadPlatformService;
private final GroupReadPlatformService groupReadPlatformService;
private final LoanTransactionRepository loanTransactionRepository;
private final LoanDropdownReadPlatformService loanDropdownReadPlatformService;
@Autowired
public LoanReadPlatformServiceImpl(final PlatformSecurityContext context, final LoanRepository loanRepository,
final LoanTransactionRepository loanTransactionRepository,
final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository,
final LoanProductReadPlatformService loanProductReadPlatformService, final ClientReadPlatformService clientReadPlatformService,
final GroupReadPlatformService groupReadPlatformService, final TenantAwareRoutingDataSource dataSource) {
final GroupReadPlatformService groupReadPlatformService, final LoanDropdownReadPlatformService loanDropdownReadPlatformService,
final TenantAwareRoutingDataSource dataSource) {
this.context = context;
this.loanRepository = loanRepository;
this.loanTransactionRepository = loanTransactionRepository;
@@ -82,6 +86,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
this.loanProductReadPlatformService = loanProductReadPlatformService;
this.clientReadPlatformService = clientReadPlatformService;
this.groupReadPlatformService = groupReadPlatformService;
this.loanDropdownReadPlatformService = loanDropdownReadPlatformService;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@@ -210,8 +215,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
final Money possibleNextRepaymentAmount = loan.possibleNextRepaymentAmount();
final LoanTransactionEnumData transactionType = LoanEnumerations.transactionType(LoanTransactionType.REPAYMENT);
final List<EnumOptionData> paymentOptions = loanDropdownReadPlatformService.retrievePaymentTypeOptions();
return new LoanTransactionData(null, transactionType, null, currencyData, earliestUnpaidInstallmentDate,
possibleNextRepaymentAmount.getAmount(), null, null, null, null);
possibleNextRepaymentAmount.getAmount(), null, null, null, null, paymentOptions);
}
@Override
@@ -13,19 +13,21 @@ import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrateg
public interface LoanDropdownReadPlatformService {
List<EnumOptionData> retrieveLoanAmortizationTypeOptions();
List<EnumOptionData> retrieveLoanAmortizationTypeOptions();
List<EnumOptionData> retrieveLoanInterestTypeOptions();
List<EnumOptionData> retrieveLoanInterestRateCalculatedInPeriodOptions();
List<EnumOptionData> retrieveLoanInterestTypeOptions();
List<EnumOptionData> retrieveLoanTermFrequencyTypeOptions();
List<EnumOptionData> retrieveRepaymentFrequencyTypeOptions();
List<EnumOptionData> retrieveLoanInterestRateCalculatedInPeriodOptions();
List<EnumOptionData> retrieveInterestRateFrequencyTypeOptions();
List<EnumOptionData> retrieveLoanTermFrequencyTypeOptions();
Collection<TransactionProcessingStrategyData> retreiveTransactionProcessingStrategies();
List<EnumOptionData> retrieveAccountingRuleTypeOptions();
List<EnumOptionData> retrieveRepaymentFrequencyTypeOptions();
List<EnumOptionData> retrieveInterestRateFrequencyTypeOptions();
Collection<TransactionProcessingStrategyData> retreiveTransactionProcessingStrategies();
List<EnumOptionData> retrieveAccountingRuleTypeOptions();
List<EnumOptionData> retrievePaymentTypeOptions();
}
@@ -20,6 +20,7 @@ import java.util.List;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionProcessingStrategyRepository;
import org.mifosplatform.portfolio.loanaccount.domain.PaymentType;
import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrategyData;
import org.mifosplatform.portfolio.loanproduct.domain.AccountingRuleType;
import org.mifosplatform.portfolio.loanproduct.domain.AmortizationMethod;
@@ -33,88 +34,85 @@ import org.springframework.stereotype.Service;
@Service
public class LoanDropdownReadPlatformServiceImpl implements LoanDropdownReadPlatformService {
private final LoanTransactionProcessingStrategyRepository loanTransactionProcessingStrategyRepository;
private final LoanTransactionProcessingStrategyRepository loanTransactionProcessingStrategyRepository;
@Autowired
public LoanDropdownReadPlatformServiceImpl(final LoanTransactionProcessingStrategyRepository loanTransactionProcessingStrategyRepository) {
this.loanTransactionProcessingStrategyRepository = loanTransactionProcessingStrategyRepository;
}
@Override
public List<EnumOptionData> retrieveLoanAmortizationTypeOptions() {
@Autowired
public LoanDropdownReadPlatformServiceImpl(final LoanTransactionProcessingStrategyRepository loanTransactionProcessingStrategyRepository) {
this.loanTransactionProcessingStrategyRepository = loanTransactionProcessingStrategyRepository;
}
List<EnumOptionData> allowedAmortizationMethods = Arrays.asList(
amortizationType(AmortizationMethod.EQUAL_INSTALLMENTS),
amortizationType(AmortizationMethod.EQUAL_PRINCIPAL));
@Override
public List<EnumOptionData> retrieveLoanAmortizationTypeOptions() {
return allowedAmortizationMethods;
}
List<EnumOptionData> allowedAmortizationMethods = Arrays.asList(amortizationType(AmortizationMethod.EQUAL_INSTALLMENTS),
amortizationType(AmortizationMethod.EQUAL_PRINCIPAL));
@Override
public List<EnumOptionData> retrieveLoanInterestTypeOptions() {
List<EnumOptionData> allowedRepaymentScheduleCalculationMethods = Arrays
.asList(interestType(InterestMethod.FLAT),
interestType(InterestMethod.DECLINING_BALANCE));
return allowedAmortizationMethods;
}
return allowedRepaymentScheduleCalculationMethods;
}
@Override
public List<EnumOptionData> retrieveLoanInterestTypeOptions() {
List<EnumOptionData> allowedRepaymentScheduleCalculationMethods = Arrays.asList(interestType(InterestMethod.FLAT),
interestType(InterestMethod.DECLINING_BALANCE));
@Override
public List<EnumOptionData> retrieveLoanInterestRateCalculatedInPeriodOptions() {
return allowedRepaymentScheduleCalculationMethods;
}
List<EnumOptionData> allowedOptions = Arrays
.asList(interestCalculationPeriodType(InterestCalculationPeriodMethod.DAILY),
interestCalculationPeriodType(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD));
@Override
public List<EnumOptionData> retrieveLoanInterestRateCalculatedInPeriodOptions() {
return allowedOptions;
}
@Override
public List<EnumOptionData> retrieveLoanTermFrequencyTypeOptions() {
List<EnumOptionData> loanTermFrequencyOptions = Arrays.asList(
loanTermFrequencyType(PeriodFrequencyType.DAYS),
loanTermFrequencyType(PeriodFrequencyType.WEEKS),
loanTermFrequencyType(PeriodFrequencyType.MONTHS),
loanTermFrequencyType(PeriodFrequencyType.YEARS));
return loanTermFrequencyOptions;
}
List<EnumOptionData> allowedOptions = Arrays.asList(interestCalculationPeriodType(InterestCalculationPeriodMethod.DAILY),
interestCalculationPeriodType(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD));
@Override
public List<EnumOptionData> retrieveRepaymentFrequencyTypeOptions() {
return allowedOptions;
}
List<EnumOptionData> repaymentFrequencyOptions = Arrays.asList(
repaymentFrequencyType(PeriodFrequencyType.DAYS),
repaymentFrequencyType(PeriodFrequencyType.WEEKS),
repaymentFrequencyType(PeriodFrequencyType.MONTHS));
return repaymentFrequencyOptions;
}
@Override
public List<EnumOptionData> retrieveLoanTermFrequencyTypeOptions() {
List<EnumOptionData> loanTermFrequencyOptions = Arrays.asList(loanTermFrequencyType(PeriodFrequencyType.DAYS),
loanTermFrequencyType(PeriodFrequencyType.WEEKS), loanTermFrequencyType(PeriodFrequencyType.MONTHS),
loanTermFrequencyType(PeriodFrequencyType.YEARS));
return loanTermFrequencyOptions;
}
@Override
public List<EnumOptionData> retrieveInterestRateFrequencyTypeOptions() {
// support for monthly and annual percentage rate (MPR) and (APR)
List<EnumOptionData> interestRateFrequencyTypeOptions = Arrays.asList(
interestRateFrequencyType(PeriodFrequencyType.MONTHS),
interestRateFrequencyType(PeriodFrequencyType.YEARS));
return interestRateFrequencyTypeOptions;
}
@Override
public List<EnumOptionData> retrieveRepaymentFrequencyTypeOptions() {
@Override
public Collection<TransactionProcessingStrategyData> retreiveTransactionProcessingStrategies() {
Collection<TransactionProcessingStrategyData> strategyOptions = new ArrayList<TransactionProcessingStrategyData>();
List<LoanTransactionProcessingStrategy> strategies = this.loanTransactionProcessingStrategyRepository.findAll();
for (LoanTransactionProcessingStrategy strategy : strategies) {
strategyOptions.add(strategy.toData());
}
return strategyOptions;
}
List<EnumOptionData> repaymentFrequencyOptions = Arrays.asList(repaymentFrequencyType(PeriodFrequencyType.DAYS),
repaymentFrequencyType(PeriodFrequencyType.WEEKS), repaymentFrequencyType(PeriodFrequencyType.MONTHS));
return repaymentFrequencyOptions;
}
@Override
public List<EnumOptionData> retrieveInterestRateFrequencyTypeOptions() {
// support for monthly and annual percentage rate (MPR) and (APR)
List<EnumOptionData> interestRateFrequencyTypeOptions = Arrays.asList(interestRateFrequencyType(PeriodFrequencyType.MONTHS),
interestRateFrequencyType(PeriodFrequencyType.YEARS));
return interestRateFrequencyTypeOptions;
}
@Override
public Collection<TransactionProcessingStrategyData> retreiveTransactionProcessingStrategies() {
Collection<TransactionProcessingStrategyData> strategyOptions = new ArrayList<TransactionProcessingStrategyData>();
List<LoanTransactionProcessingStrategy> strategies = this.loanTransactionProcessingStrategyRepository.findAll();
for (LoanTransactionProcessingStrategy strategy : strategies) {
strategyOptions.add(strategy.toData());
}
return strategyOptions;
}
@Override
public List<EnumOptionData> retrieveAccountingRuleTypeOptions() {
List<EnumOptionData> accountingRuleTypeOptions = Arrays.asList(accountingRuleType(AccountingRuleType.NONE),
accountingRuleType(AccountingRuleType.CASH_BASED),accountingRuleType(AccountingRuleType.ACCRUAL_BASED));
accountingRuleType(AccountingRuleType.CASH_BASED), accountingRuleType(AccountingRuleType.ACCRUAL_BASED));
return accountingRuleTypeOptions;
}
@Override
public List<EnumOptionData> retrievePaymentTypeOptions() {
return LoanEnumerations.paymentTypes(PaymentType.values());
}
}
@@ -5,6 +5,9 @@
*/
package org.mifosplatform.portfolio.loanproduct.service;
import java.util.ArrayList;
import java.util.List;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.portfolio.loanaccount.data.LoanStatusEnumData;
import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionEnumData;
@@ -198,6 +201,20 @@ public class LoanEnumerations {
return optionData;
}
public static List<EnumOptionData> paymentTypes(final PaymentType[] paymentTypes) {
final List<EnumOptionData> optionDatas = new ArrayList<EnumOptionData>();
for (final PaymentType paymentType : paymentTypes) {
optionDatas.add(paymentType(paymentType));
}
return optionDatas;
}
public static EnumOptionData paymentType(final PaymentType paymentType) {
final EnumOptionData optionData = new EnumOptionData(paymentType.getValue().longValue(), paymentType.getCode(),
paymentType.toString());
return optionData;
}
public static EnumOptionData paymentType(final Integer id) {
PaymentType paymentType = PaymentType.fromInt(id);
EnumOptionData enumOptionData = new EnumOptionData(paymentType.getValue().longValue(), paymentType.getCode(), paymentType