updates for payment details
This commit is contained in:
+13
-5
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+21
-8
@@ -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() {
|
||||
|
||||
+8
-2
@@ -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
-11
@@ -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();
|
||||
}
|
||||
+64
-66
@@ -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());
|
||||
}
|
||||
}
|
||||
+17
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user