MIFOSX-32: continue WIP on abilit to modify loan application.

This commit is contained in:
Keith Woodlock
2012-09-05 23:19:08 +01:00
parent 6b2ec54a31
commit 29e36a0797
10 changed files with 325 additions and 176 deletions
@@ -1,8 +1,10 @@
package org.mifosng.platform.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ws.rs.Consumes;
@@ -26,24 +28,33 @@ import org.mifosng.platform.api.commands.LoanTransactionCommand;
import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand;
import org.mifosng.platform.api.commands.UndoStateTransitionCommand;
import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.CurrencyData;
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.LoanAccountData;
import org.mifosng.platform.api.data.LoanAccountSummaryData;
import org.mifosng.platform.api.data.LoanBasicDetailsData;
import org.mifosng.platform.api.data.LoanPermissionData;
import org.mifosng.platform.api.data.LoanProductLookup;
import org.mifosng.platform.api.data.LoanRepaymentPeriodData;
import org.mifosng.platform.api.data.LoanRepaymentTransactionData;
import org.mifosng.platform.api.data.LoanSchedule;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.NewLoanData;
import org.mifosng.platform.api.data.TransactionProcessingStrategyData;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService;
import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.charge.service.ChargeReadPlatformService;
import org.mifosng.platform.currency.service.CurrencyReadPlatformService;
import org.mifosng.platform.exceptions.UnrecognizedQueryParamException;
import org.mifosng.platform.fund.service.FundReadPlatformService;
import org.mifosng.platform.loan.service.CalculationPlatformService;
import org.mifosng.platform.loan.service.LoanReadPlatformService;
import org.mifosng.platform.loan.service.LoanWritePlatformService;
import org.mifosng.platform.loanproduct.service.LoanDropdownReadPlatformService;
import org.mifosng.platform.loanproduct.service.LoanProductReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@@ -58,7 +69,16 @@ public class LoansApiResource {
@Autowired
private LoanWritePlatformService loanWritePlatformService;
@Autowired
private LoanProductReadPlatformService loanProductReadPlatformService;
@Autowired
private LoanDropdownReadPlatformService dropdownReadPlatformService;
@Autowired
private FundReadPlatformService fundReadPlatformService;
@Autowired
private ChargeReadPlatformService chargeReadPlatformService;
@@ -70,7 +90,7 @@ public class LoansApiResource {
@Autowired
private ApiJsonSerializerService apiJsonSerializerService;
@GET
@Path("template")
@Consumes({ MediaType.APPLICATION_JSON })
@@ -110,7 +130,7 @@ public class LoansApiResource {
"repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType",
"submittedOnDate", "approvedOnDate", "expectedDisbursementDate", "actualDisbursementDate",
"expectedFirstRepaymentOnDate", "interestChargedFromDate", "closedOnDate", "expectedMaturityDate",
"lifeCycleStatusId", "lifeCycleStatusText", "lifeCycleStatusDate")
"status", "lifeCycleStatusDate")
);
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
@@ -138,15 +158,47 @@ public class LoansApiResource {
loanRepayments = this.loanReadPlatformService.retrieveLoanPayments(loanId);
repaymentSchedule = this.loanReadPlatformService.retrieveRepaymentSchedule(loanId);
summary = this.loanReadPlatformService.retrieveSummary(loanBasicDetails.getPrincipal(), repaymentSchedule, loanRepayments);
summary = this.loanReadPlatformService.retrieveSummary(loanBasicDetails.getCurrency(), repaymentSchedule, loanRepayments);
boolean isWaiveAllowed = summary.isWaiveAllowed(loanBasicDetails.getInArrearsTolerance());
boolean isWaiveAllowed = summary.isWaiveAllowed(loanBasicDetails.getCurrency(), loanBasicDetails.getInArrearsTolerance());
permissions = this.loanReadPlatformService.retrieveLoanPermissions(loanBasicDetails, isWaiveAllowed, loanRepayments.size());
charges = this.chargeReadPlatformService.retrieveLoanCharges(loanId);
}
LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, summary, repaymentSchedule, loanRepayments, permissions, charges);
Collection<LoanProductLookup> productOptions = new ArrayList<LoanProductLookup>();
List<EnumOptionData> loanTermFrequencyTypeOptions = new ArrayList<EnumOptionData>();
List<EnumOptionData> repaymentFrequencyTypeOptions = new ArrayList<EnumOptionData>();
Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions = new ArrayList<TransactionProcessingStrategyData>();
List<EnumOptionData> interestRateFrequencyTypeOptions = new ArrayList<EnumOptionData>();
List<EnumOptionData> amortizationTypeOptions = new ArrayList<EnumOptionData>();
List<EnumOptionData> interestTypeOptions = new ArrayList<EnumOptionData>();
List<EnumOptionData> interestCalculationPeriodTypeOptions = new ArrayList<EnumOptionData>();
Collection<FundData> fundOptions = new ArrayList<FundData>();
final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters());
if(template) {
responseParameters.addAll(Arrays.asList("productOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions",
"repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions"));
productOptions = this.loanProductReadPlatformService.retrieveAllLoanProductsForLookup();
loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions();
repaymentFrequencyTypeOptions = dropdownReadPlatformService.retrieveRepaymentFrequencyTypeOptions();
interestRateFrequencyTypeOptions = dropdownReadPlatformService.retrieveInterestRateFrequencyTypeOptions();
amortizationTypeOptions = dropdownReadPlatformService.retrieveLoanAmortizationTypeOptions();
interestTypeOptions = dropdownReadPlatformService.retrieveLoanInterestTypeOptions();
interestCalculationPeriodTypeOptions = dropdownReadPlatformService.retrieveLoanInterestRateCalculatedInPeriodOptions();
fundOptions = this.fundReadPlatformService.retrieveAllFunds();
transactionProcessingStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies();
}
LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, summary, repaymentSchedule, loanRepayments, permissions, charges,
productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions,
transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions,
fundOptions);
return this.apiJsonSerializerService.serialzieLoanAccountDataToJson(prettyPrint, responseParameters, loanAccount);
}
@@ -1,16 +1,10 @@
package org.mifosng.platform.api.data;
import java.io.Serializable;
public class EnumOptionData {
public class EnumOptionData implements Serializable {
private Long id;
private String code;
private String value;
protected EnumOptionData() {
//
}
private final Long id;
private final String code;
private final String value;
public EnumOptionData(final Long id, final String code, final String value) {
this.id = id;
@@ -19,26 +13,14 @@ public class EnumOptionData implements Serializable {
}
public Long getId() {
return this.id;
}
public void setId(final Long id) {
this.id = id;
}
public String getValue() {
return this.value;
}
public void setValue(final String value) {
this.value = value;
return id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
public String getValue() {
return value;
}
}
@@ -2,6 +2,7 @@ package org.mifosng.platform.api.data;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import org.joda.time.LocalDate;
@@ -17,45 +18,54 @@ public class LoanAccountData {
private final Long loanProductId;
private final String loanProductName;
private final String loanProductDescription;
private final Integer lifeCycleStatusId;
private final String lifeCycleStatusText;
private final LocalDate lifeCycleStatusDate;
private final EnumOptionData status;
private final Long fundId;
private final String fundName;
private final CurrencyData currency;
private final BigDecimal principal;
private final BigDecimal inArrearsTolerance;
private final Integer termFrequency;
private final EnumOptionData termPeriodFrequencyType;
private final Integer numberOfRepayments;
private final Integer repaymentEvery;
private final EnumOptionData repaymentFrequencyType;
private final Integer transactionStrategyId;
private final EnumOptionData amortizationType;
private final BigDecimal interestRatePerPeriod;
private final EnumOptionData interestRateFrequencyType;
private final BigDecimal annualInterestRate;
private final EnumOptionData interestType;
private final EnumOptionData interestCalculationPeriodType;
private Collection<ChargeData> charges;
private final LocalDate submittedOnDate;
private final LocalDate approvedOnDate;
private final LocalDate expectedDisbursementDate;
private final LocalDate actualDisbursementDate;
private final LocalDate expectedFirstRepaymentOnDate;
private final LocalDate repaymentsStartingFromDate;
private final LocalDate interestChargedFromDate;
private final LocalDate closedOnDate;
private final LocalDate expectedMaturityDate;
private final CurrencyData currency;
private final MoneyData principal;
private final MoneyData inArrearsTolerance;
private final Integer numberOfRepayments;
private final Integer repaymentEvery;
private final BigDecimal interestRatePerPeriod;
private final BigDecimal annualInterestRate;
private final EnumOptionData repaymentFrequencyType;
private final EnumOptionData interestRateFrequencyType;
private final EnumOptionData amortizationType;
private final EnumOptionData interestType;
private final EnumOptionData interestCalculationPeriodType;
private final LocalDate lifeCycleStatusDate;
// template
private final Collection<LoanProductLookup> productOptions;
private final List<EnumOptionData> termFrequencyTypeOptions;
private final List<EnumOptionData> repaymentFrequencyTypeOptions;
private final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions;
private final Collection<FundData> fundOptions;
// associations
private final LoanAccountSummaryData summary;
private final Collection<LoanRepaymentPeriodData> repaymentSchedule;
private final Collection<LoanRepaymentTransactionData> loanRepayments;
private final LoanPermissionData permissions;
private final LoanConvenienceData convenienceData;
private Collection<ChargeData> charges;
private final List<EnumOptionData> interestRateFrequencyTypeOptions;
public LoanAccountData(
final LoanBasicDetailsData basicDetails,
@@ -63,12 +73,24 @@ public class LoanAccountData {
final Collection<LoanRepaymentPeriodData> repaymentSchedule,
final Collection<LoanRepaymentTransactionData> loanRepayments,
final LoanPermissionData permissions,
final Collection<ChargeData> charges) {
final Collection<ChargeData> charges,
final Collection<LoanProductLookup> productOptions,
final List<EnumOptionData> termFrequencyTypeOptions,
final List<EnumOptionData> repaymentFrequencyTypeOptions,
final Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions,
final List<EnumOptionData> interestRateFrequencyTypeOptions,
final Collection<FundData> fundOptions) {
this.summary = summary;
this.repaymentSchedule = repaymentSchedule;
this.loanRepayments = loanRepayments;
this.permissions = permissions;
this.charges = charges;
this.productOptions = productOptions;
this.termFrequencyTypeOptions = termFrequencyTypeOptions;
this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions;
this.repaymentStrategyOptions = transactionProcessingStrategyOptions;
this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
this.fundOptions = fundOptions;
int maxSubmittedOnOffsetFromToday = basicDetails
.getMaxSubmittedOnOffsetFromToday();
@@ -104,16 +126,18 @@ public class LoanAccountData {
this.actualDisbursementDate = basicDetails.getActualDisbursementDate();
this.closedOnDate = basicDetails.getClosedOnDate();
this.expectedMaturityDate = basicDetails.getExpectedMaturityDate();
this.expectedFirstRepaymentOnDate = basicDetails
.getExpectedFirstRepaymentOnDate();
this.interestChargedFromDate = basicDetails
.getInterestChargedFromDate();
this.repaymentsStartingFromDate = basicDetails.getExpectedFirstRepaymentOnDate();
this.interestChargedFromDate = basicDetails.getInterestChargedFromDate();
this.currency = basicDetails.getCurrency();
this.principal = basicDetails.getPrincipal();
this.inArrearsTolerance = basicDetails.getInArrearsTolerance();
this.termFrequency = basicDetails.getTermFrequency();
this.termPeriodFrequencyType = basicDetails.getTermPeriodFrequencyType();
this.numberOfRepayments = basicDetails.getNumberOfRepayments();
this.repaymentEvery = basicDetails.getRepaymentEvery();
this.transactionStrategyId = basicDetails.getTransactionStrategyId();
this.interestRatePerPeriod = basicDetails.getInterestRatePerPeriod();
this.annualInterestRate = basicDetails.getAnnualInterestRate();
this.repaymentFrequencyType = basicDetails.getRepaymentFrequencyType();
@@ -123,8 +147,8 @@ public class LoanAccountData {
this.interestType = basicDetails.getInterestType();
this.interestCalculationPeriodType = basicDetails
.getInterestCalculationPeriodType();
this.lifeCycleStatusText = basicDetails.getLifeCycleStatusText();
this.lifeCycleStatusId = basicDetails.getLifeCycleStatusId();
this.status = basicDetails.getStatus();
this.lifeCycleStatusDate = basicDetails.getLifeCycleStatusDate();
}
@@ -155,6 +179,10 @@ public class LoanAccountData {
public String getLoanProductDescription() {
return loanProductDescription;
}
public EnumOptionData getStatus() {
return status;
}
public Long getFundId() {
return fundId;
@@ -179,9 +207,9 @@ public class LoanAccountData {
public LocalDate getActualDisbursementDate() {
return actualDisbursementDate;
}
public LocalDate getExpectedFirstRepaymentOnDate() {
return expectedFirstRepaymentOnDate;
public LocalDate getRepaymentsStartingFromDate() {
return repaymentsStartingFromDate;
}
public LocalDate getInterestChargedFromDate() {
@@ -200,12 +228,20 @@ public class LoanAccountData {
return currency;
}
public MoneyData getPrincipal() {
return principal;
public BigDecimal getPrincipal() {
return this.principal;
}
public MoneyData getInArrearsTolerance() {
return inArrearsTolerance;
public BigDecimal getInArrearsTolerance() {
return this.inArrearsTolerance;
}
public Integer getTermFrequency() {
return termFrequency;
}
public EnumOptionData getTermPeriodFrequencyType() {
return termPeriodFrequencyType;
}
public Integer getNumberOfRepayments() {
@@ -215,6 +251,10 @@ public class LoanAccountData {
public Integer getRepaymentEvery() {
return repaymentEvery;
}
public Integer getTransactionStrategyId() {
return transactionStrategyId;
}
public BigDecimal getInterestRatePerPeriod() {
return interestRatePerPeriod;
@@ -244,14 +284,6 @@ public class LoanAccountData {
return interestCalculationPeriodType;
}
public Integer getLifeCycleStatusId() {
return lifeCycleStatusId;
}
public String getLifeCycleStatusText() {
return lifeCycleStatusText;
}
public LocalDate getLifeCycleStatusDate() {
return lifeCycleStatusDate;
}
@@ -283,4 +315,28 @@ public class LoanAccountData {
public void setCharges(Collection<ChargeData> charges) {
this.charges = charges;
}
public Collection<LoanProductLookup> getProductOptions() {
return productOptions;
}
public List<EnumOptionData> getTermFrequencyTypeOptions() {
return termFrequencyTypeOptions;
}
public List<EnumOptionData> getRepaymentFrequencyTypeOptions() {
return repaymentFrequencyTypeOptions;
}
public Collection<TransactionProcessingStrategyData> getRepaymentStrategyOptions() {
return repaymentStrategyOptions;
}
public List<EnumOptionData> getInterestRateFrequencyTypeOptions() {
return interestRateFrequencyTypeOptions;
}
public Collection<FundData> getFundOptions() {
return fundOptions;
}
}
@@ -1,5 +1,7 @@
package org.mifosng.platform.api.data;
import java.math.BigDecimal;
public class LoanAccountSummaryData {
private MoneyData originalPrincipal;
@@ -46,7 +48,8 @@ public class LoanAccountSummaryData {
this.totalInArrears = totalInArrears;
}
public boolean isWaiveAllowed(MoneyData tolerance) {
public boolean isWaiveAllowed(final CurrencyData currency, final BigDecimal toleranceAmount) {
MoneyData tolerance = MoneyData.of(currency, toleranceAmount);
return this.totalOutstanding.isGreaterThanZero() && (tolerance.isGreaterThan(this.totalOutstanding) || tolerance.isEqualTo(this.totalOutstanding));
}
@@ -18,6 +18,7 @@ public class LoanBasicDetailsData {
private final String loanProductDescription;
private final Long fundId;
private final String fundName;
private final EnumOptionData status;
private final LocalDate submittedOnDate;
private final LocalDate approvedOnDate;
@@ -29,11 +30,14 @@ public class LoanBasicDetailsData {
private final LocalDate expectedMaturityDate;
private final CurrencyData currency;
private final MoneyData principal;
private final MoneyData inArrearsTolerance;
private final BigDecimal principal;
private final BigDecimal inArrearsTolerance;
private final Integer termFrequency;
private final EnumOptionData termPeriodFrequencyType;
private final Integer numberOfRepayments;
private final Integer repaymentEvery;
private final Integer transactionStrategyId;
private final BigDecimal interestRatePerPeriod;
private final BigDecimal annualInterestRate;
@@ -43,8 +47,6 @@ public class LoanBasicDetailsData {
private final EnumOptionData interestType;
private final EnumOptionData interestCalculationPeriodType;
private final Integer lifeCycleStatusId;
private final String lifeCycleStatusText;
private final LocalDate lifeCycleStatusDate;
public LoanBasicDetailsData(
@@ -64,8 +66,8 @@ public class LoanBasicDetailsData {
final LocalDate expectedFirstRepaymentOnDate,
final LocalDate interestChargedFromDate,
final CurrencyData currency,
final MoneyData principal,
final MoneyData inArrearsTolerance,
final BigDecimal principal,
final BigDecimal inArrearsTolerance,
final Integer numberOfRepayments,
final Integer repaymentEvery,
final BigDecimal interestRatePerPeriod,
@@ -75,9 +77,11 @@ public class LoanBasicDetailsData {
final EnumOptionData amortizationType,
final EnumOptionData interestType,
final EnumOptionData interestCalculationPeriodType,
final Integer lifeCycleStatusId,
final String lifeCycleStatusText,
final LocalDate lifeCycleStatusDate) {
final EnumOptionData status,
final LocalDate lifeCycleStatusDate,
final Integer termFrequency,
final EnumOptionData termPeriodFrequencyType,
final Integer transactionStrategyId) {
this.id = id;
this.externalId = externalId;
this.clientId = clientId;
@@ -107,9 +111,11 @@ public class LoanBasicDetailsData {
this.amortizationType = amortizationType;
this.interestType = interestType;
this.interestCalculationPeriodType = interestCalculationPeriodType;
this.lifeCycleStatusId = lifeCycleStatusId;
this.lifeCycleStatusText = lifeCycleStatusText;
this.status = status;
this.lifeCycleStatusDate = lifeCycleStatusDate;
this.termFrequency = termFrequency;
this.termPeriodFrequencyType = termPeriodFrequencyType;
this.transactionStrategyId = transactionStrategyId;
}
public int getMaxSubmittedOnOffsetFromToday() {
@@ -236,6 +242,18 @@ public class LoanBasicDetailsData {
public String getLoanProductDescription() {
return loanProductDescription;
}
public EnumOptionData getStatus() {
return status;
}
public Integer getTermFrequency() {
return termFrequency;
}
public EnumOptionData getTermPeriodFrequencyType() {
return termPeriodFrequencyType;
}
public LocalDate getSubmittedOnDate() {
return submittedOnDate;
@@ -273,11 +291,11 @@ public class LoanBasicDetailsData {
return currency;
}
public MoneyData getPrincipal() {
public BigDecimal getPrincipal() {
return principal;
}
public MoneyData getInArrearsTolerance() {
public BigDecimal getInArrearsTolerance() {
return inArrearsTolerance;
}
@@ -317,15 +335,11 @@ public class LoanBasicDetailsData {
return interestCalculationPeriodType;
}
public Integer getLifeCycleStatusId() {
return lifeCycleStatusId;
}
public String getLifeCycleStatusText() {
return lifeCycleStatusText;
}
public LocalDate getLifeCycleStatusDate() {
return lifeCycleStatusDate;
}
public Integer getTransactionStrategyId() {
return transactionStrategyId;
}
}
@@ -1,17 +1,17 @@
package org.mifosng.platform.api.data;
import java.io.Serializable;
/**
* 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 {
public class LoanProductLookup implements Serializable {
private final Long id;
private final String name;
private Long id;
private String name;
public LoanProductLookup() {
//
}
public LoanProductLookup(Long id, String name) {
public LoanProductLookup(final Long id, final String name) {
this.id = id;
this.name = name;
}
@@ -20,15 +20,7 @@ public class LoanProductLookup implements Serializable {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@@ -151,9 +151,11 @@ public class GoogleGsonApiJsonSerializerService implements
"expectedDisbursementDate", "actualDisbursementDate",
"expectedFirstRepaymentOnDate", "interestChargedFromDate",
"closedOnDate", "expectedMaturityDate",
"lifeCycleStatusId", "lifeCycleStatusText",
"status",
"lifeCycleStatusDate", "summary", "repaymentSchedule",
"loanRepayments", "permissions", "convenienceData", "charges"));
"loanRepayments", "permissions", "convenienceData", "charges",
"productOptions", "amortizationTypeOptions", "interestTypeOptions", "interestCalculationPeriodTypeOptions",
"repaymentFrequencyTypeOptions", "interestRateFrequencyTypeOptions", "fundOptions", "transactionProcessingStrategyOptions", "chargeOptions"));
private static final Set<String> LOAN_TRANSACTION_DATA_PARAMETERS = new HashSet<String>(
Arrays.asList("id", "transactionType", "date", "principal",
@@ -2,13 +2,13 @@ package org.mifosng.platform.loan.service;
import java.util.Collection;
import org.mifosng.platform.api.data.CurrencyData;
import org.mifosng.platform.api.data.LoanAccountSummaryData;
import org.mifosng.platform.api.data.LoanBasicDetailsData;
import org.mifosng.platform.api.data.LoanPermissionData;
import org.mifosng.platform.api.data.LoanRepaymentPeriodData;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.LoanRepaymentTransactionData;
import org.mifosng.platform.api.data.MoneyData;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.NewLoanData;
public interface LoanReadPlatformService {
@@ -19,7 +19,7 @@ public interface LoanReadPlatformService {
Collection<LoanRepaymentTransactionData> retrieveLoanPayments(Long loanId);
LoanAccountSummaryData retrieveSummary(MoneyData principal,
LoanAccountSummaryData retrieveSummary(CurrencyData currency,
Collection<LoanRepaymentPeriodData> repaymentSchedule,
Collection<LoanRepaymentTransactionData> loanRepayments);
@@ -17,8 +17,8 @@ import org.mifosng.platform.api.data.LoanPermissionData;
import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.LoanProductLookup;
import org.mifosng.platform.api.data.LoanRepaymentPeriodData;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.LoanRepaymentTransactionData;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.MoneyData;
import org.mifosng.platform.api.data.NewLoanData;
import org.mifosng.platform.charge.service.ChargeReadPlatformService;
@@ -33,7 +33,6 @@ import org.mifosng.platform.infrastructure.JdbcSupport;
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
import org.mifosng.platform.loan.domain.Loan;
import org.mifosng.platform.loan.domain.LoanRepository;
import org.mifosng.platform.loan.domain.LoanStatus;
import org.mifosng.platform.loan.domain.LoanTransaction;
import org.mifosng.platform.loan.domain.LoanTransactionRepository;
import org.mifosng.platform.loan.domain.LoanTransactionType;
@@ -114,14 +113,10 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
}
@Override
public LoanAccountSummaryData retrieveSummary(MoneyData principal,
Collection<LoanRepaymentPeriodData> repaymentSchedule,
Collection<LoanRepaymentTransactionData> loanRepayments) {
CurrencyData currencyData = new CurrencyData(
principal.getCurrencyCode(), principal.getDefaultName(),
principal.getDigitsAfterDecimal(),
principal.getDisplaySymbol(), principal.getNameCode());
public LoanAccountSummaryData retrieveSummary(
final CurrencyData currencyData,
final Collection<LoanRepaymentPeriodData> repaymentSchedule,
final Collection<LoanRepaymentTransactionData> loanRepayments) {
BigDecimal originalPrincipal = BigDecimal.ZERO;
BigDecimal principalPaid = BigDecimal.ZERO;
@@ -214,11 +209,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
LoanBasicDetailsData loanBasicDetails, boolean isWaiverAllowed,
int repaymentAndWaiveCount) {
boolean pendingApproval = (loanBasicDetails.getLifeCycleStatusId()
.equals(100));
boolean waitingForDisbursal = (loanBasicDetails.getLifeCycleStatusId()
.equals(200));
boolean isActive = (loanBasicDetails.getLifeCycleStatusId().equals(300));
boolean pendingApproval = (loanBasicDetails.getStatus().getId().equals(100L));
boolean waitingForDisbursal = (loanBasicDetails.getStatus().getId().equals(200L));
boolean isActive = (loanBasicDetails.getStatus().getId().equals(300L));
boolean waiveAllowed = isWaiverAllowed && isActive;
boolean makeRepaymentAllowed = isActive;
@@ -421,8 +414,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
+ " l.principal_amount as principal, l.arrearstolerance_amount as inArrearsTolerance, l.number_of_repayments as numberOfRepayments, l.repay_every as repaymentEvery,"
+ " l.nominal_interest_rate_per_period as interestRatePerPeriod, l.annual_nominal_interest_rate as annualInterestRate, "
+ " l.repayment_period_frequency_enum as repaymentFrequencyType, l.interest_period_frequency_enum as interestRateFrequencyType, "
+ " l.term_frequency as termFrequency, l.term_period_frequency_enum as termPeriodFrequencyType, "
+ " l.amortization_method_enum as amortizationType, l.interest_method_enum as interestType, l.interest_calculated_in_period_enum as interestCalculationPeriodType,"
+ " l.loan_status_id as lifeCycleStatusId, "
+ " l.loan_status_id as lifeCycleStatusId, l.loan_transaction_strategy_id as transactionStrategyId, "
+ " l.currency_code as currencyCode, l.currency_digits as currencyDigits, rc.`name` as currencyName, rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode"
+ " from m_loan l"
+ " join m_client c on c.id = l.client_id"
@@ -471,45 +465,37 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
LocalDate expectedMaturityDate = JdbcSupport.getLocalDate(rs,
"expectedMaturityDate");
BigDecimal principalBD = rs.getBigDecimal("principal");
MoneyData principal = MoneyData.of(currencyData, principalBD);
BigDecimal inArrearsToleranceBD = rs
.getBigDecimal("inArrearsTolerance");
MoneyData inArrearsTolerance = MoneyData.of(currencyData,
inArrearsToleranceBD);
BigDecimal principal = rs.getBigDecimal("principal");
BigDecimal inArrearsTolerance = rs.getBigDecimal("inArrearsTolerance");
Integer numberOfRepayments = JdbcSupport.getInteger(rs,
"numberOfRepayments");
Integer repaymentEvery = JdbcSupport.getInteger(rs,
"repaymentEvery");
BigDecimal interestRatePerPeriod = rs
.getBigDecimal("interestRatePerPeriod");
BigDecimal annualInterestRate = rs
.getBigDecimal("annualInterestRate");
Integer numberOfRepayments = JdbcSupport.getInteger(rs,"numberOfRepayments");
Integer repaymentEvery = JdbcSupport.getInteger(rs,"repaymentEvery");
BigDecimal interestRatePerPeriod = rs.getBigDecimal("interestRatePerPeriod");
BigDecimal annualInterestRate = rs.getBigDecimal("annualInterestRate");
int repaymentFrequencyTypeInt = JdbcSupport.getInteger(rs,
"repaymentFrequencyType");
int interestRateFrequencyTypeInt = JdbcSupport.getInteger(rs,
"interestRateFrequencyType");
int amortizationTypeInt = JdbcSupport.getInteger(rs,
"amortizationType");
Integer termFrequency = JdbcSupport.getInteger(rs,"termFrequency");
Integer termPeriodFrequencyTypeInt = JdbcSupport.getInteger(rs,"termPeriodFrequencyType");
EnumOptionData termPeriodFrequencyType = LoanEnumerations.termFrequencyType(termPeriodFrequencyTypeInt);
int repaymentFrequencyTypeInt = JdbcSupport.getInteger(rs,"repaymentFrequencyType");
EnumOptionData repaymentFrequencyType = LoanEnumerations.repaymentFrequencyType(repaymentFrequencyTypeInt);
int interestRateFrequencyTypeInt = JdbcSupport.getInteger(rs,"interestRateFrequencyType");
EnumOptionData interestRateFrequencyType = LoanEnumerations.interestRateFrequencyType(interestRateFrequencyTypeInt);
Integer transactionStrategyId = JdbcSupport.getInteger(rs,"transactionStrategyId");
int amortizationTypeInt = JdbcSupport.getInteger(rs,"amortizationType");
int interestTypeInt = JdbcSupport.getInteger(rs, "interestType");
int interestCalculationPeriodTypeInt = JdbcSupport.getInteger(rs,
"interestCalculationPeriodType");
EnumOptionData repaymentFrequencyType = LoanEnumerations
.repaymentFrequencyType(repaymentFrequencyTypeInt);
EnumOptionData interestRateFrequencyType = LoanEnumerations
.interestRateFrequencyType(interestRateFrequencyTypeInt);
EnumOptionData amortizationType = LoanEnumerations
.amortizationType(amortizationTypeInt);
EnumOptionData interestType = LoanEnumerations
.interestType(interestTypeInt);
EnumOptionData interestCalculationPeriodType = LoanEnumerations
.interestCalculationPeriodType(interestCalculationPeriodTypeInt);
int interestCalculationPeriodTypeInt = JdbcSupport.getInteger(rs,"interestCalculationPeriodType");
EnumOptionData amortizationType = LoanEnumerations.amortizationType(amortizationTypeInt);
EnumOptionData interestType = LoanEnumerations.interestType(interestTypeInt);
EnumOptionData interestCalculationPeriodType = LoanEnumerations.interestCalculationPeriodType(interestCalculationPeriodTypeInt);
Integer lifeCycleStatusId = JdbcSupport.getInteger(rs, "lifeCycleStatusId");
String lifeCycleStatusText = LoanStatus.fromInt(lifeCycleStatusId).getCode();
EnumOptionData status = LoanEnumerations.status(lifeCycleStatusId);
LocalDate lifeCycleStatusDate = submittedOnDate;
if (approvedOnDate != null) {
lifeCycleStatusDate = approvedOnDate;
@@ -523,7 +509,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
return new LoanBasicDetailsData(id, externalId, clientId, clientName,
loanProductId, loanProductName, loanProductDescription,
fundId, fundName, closedOnDate,
fundId, fundName,
closedOnDate,
submittedOnDate, approvedOnDate, expectedDisbursementDate,
actualDisbursementDate, expectedMaturityDate,
expectedFirstRepaymentOnDate, interestChargedFromDate,
@@ -532,8 +519,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
repaymentEvery, interestRatePerPeriod, annualInterestRate,
repaymentFrequencyType, interestRateFrequencyType,
amortizationType, interestType,
interestCalculationPeriodType, lifeCycleStatusId,
lifeCycleStatusText, lifeCycleStatusDate);
interestCalculationPeriodType,
status,
lifeCycleStatusDate, termFrequency, termPeriodFrequencyType, transactionStrategyId);
}
}
@@ -4,6 +4,7 @@ import org.mifosng.platform.api.data.EnumOptionData;
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.LoanStatus;
import org.mifosng.platform.loan.domain.LoanTransactionType;
import org.mifosng.platform.loan.domain.PeriodFrequencyType;
@@ -36,6 +37,30 @@ public class LoanEnumerations {
return optionData;
}
public static EnumOptionData termFrequencyType(final int id) {
return termFrequencyType(PeriodFrequencyType.fromInt(id));
}
public static EnumOptionData termFrequencyType(final PeriodFrequencyType type) {
final String codePrefix = "termFrequency.";
EnumOptionData optionData = null;
switch (type) {
case DAYS:
optionData = new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(), codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
break;
case WEEKS:
optionData = new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(), codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
break;
case MONTHS:
optionData = new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(), codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
break;
default:
optionData = new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(), "Invalid");
break;
}
return optionData;
}
public static EnumOptionData repaymentFrequencyType(final int id) {
return repaymentFrequencyType(PeriodFrequencyType.fromInt(id));
}
@@ -141,11 +166,11 @@ public class LoanEnumerations {
return optionData;
}
public static EnumOptionData transactionType(Integer id) {
public static EnumOptionData transactionType(final Integer id) {
return transactionType(LoanTransactionType.fromInt(id));
}
public static EnumOptionData transactionType(LoanTransactionType type) {
public static EnumOptionData transactionType(final LoanTransactionType type) {
EnumOptionData optionData = null;
switch (type) {
case DISBURSEMENT:
@@ -166,4 +191,39 @@ public class LoanEnumerations {
}
return optionData;
}
public static EnumOptionData status(final Integer statusId) {
return status(LoanStatus.fromInt(statusId));
}
public static EnumOptionData status(final LoanStatus status) {
EnumOptionData optionData = null;
switch (status) {
case SUBMITED_AND_PENDING_APPROVAL:
optionData = new EnumOptionData(LoanStatus.SUBMITED_AND_PENDING_APPROVAL.getValue().longValue(), LoanStatus.SUBMITED_AND_PENDING_APPROVAL.getCode(), "Submitted and pending approval");
break;
case APPROVED:
optionData = new EnumOptionData(LoanStatus.APPROVED.getValue().longValue(), LoanStatus.APPROVED.getCode(), "Approved");
break;
case ACTIVE:
optionData = new EnumOptionData(LoanStatus.ACTIVE.getValue().longValue(), LoanStatus.ACTIVE.getCode(), "Active");
break;
case REJECTED:
optionData = new EnumOptionData(LoanStatus.REJECTED.getValue().longValue(), LoanStatus.REJECTED.getCode(), "Rejected");
break;
case WITHDRAWN_BY_CLIENT:
optionData = new EnumOptionData(LoanStatus.WITHDRAWN_BY_CLIENT.getValue().longValue(), LoanStatus.WITHDRAWN_BY_CLIENT.getCode(), "Withdrawn by applicant");
break;
case CLOSED:
optionData = new EnumOptionData(LoanStatus.CLOSED.getValue().longValue(), LoanStatus.CLOSED.getCode(), "Closed");
break;
case OVERPAID:
optionData = new EnumOptionData(LoanStatus.OVERPAID.getValue().longValue(), LoanStatus.OVERPAID.getCode(), "Overpaid");
break;
default:
optionData = new EnumOptionData(LoanStatus.INVALID.getValue().longValue(), LoanStatus.INVALID.getCode(), "Invalid");
break;
}
return optionData;
}
}