MIFOSX-1918

This commit is contained in:
Vishwas Babu A J
2015-04-05 13:53:43 -07:00
parent 52b82f32d0
commit 91f21707ab
13 changed files with 117 additions and 117 deletions
+5 -5
View File
@@ -11696,7 +11696,7 @@ GET https://DomainName/api/v1/loanproducts
}, },
"preCloseInterestCalculationStrategy": { "preCloseInterestCalculationStrategy": {
"id":1, "id":1,
"code":"loanPreCloseInterestCalculationStrategy.tillPreClosureDate", "code":"loanPreClosureInterestCalculationStrategy.tillPreClosureDate",
"value":"Till preclose Date" "value":"Till preclose Date"
}, },
"isArrearsBasedOnOriginalSchedule" : true "isArrearsBasedOnOriginalSchedule" : true
@@ -11803,7 +11803,7 @@ GET https://DomainName/api/v1/loanproducts/template
"value": "Reduce EMI amount" "value": "Reduce EMI amount"
},"preCloseInterestCalculationStrategy": { },"preCloseInterestCalculationStrategy": {
"id":1, "id":1,
"code":"loanPreCloseInterestCalculationStrategy.tillPreClosureDate", "code":"loanPreClosureInterestCalculationStrategy.tillPreClosureDate",
"value":"Till preclose Date" "value":"Till preclose Date"
} }
}, },
@@ -11841,15 +11841,15 @@ GET https://DomainName/api/v1/loanproducts/template
"value": "Months" "value": "Months"
} }
], ],
"preCloseInterestCalculationStrategyOptions": [ "preClosureInterestCalculationStrategyOptions": [
{ {
"id":1, "id":1,
"code":"loanPreCloseInterestCalculationStrategy.tillPreClosureDate", "code":"loanPreClosureInterestCalculationStrategy.tillPreClosureDate",
"value":"Till preclose Date" "value":"Till preclose Date"
}, },
{ {
"id":2, "id":2,
"code":"loanPreCloseInterestCalculationStrategy.tillRestFrequencyDate", "code":"loanPreClosureInterestCalculationStrategy.tillRestFrequencyDate",
"value":"Till rest Frequency Date" "value":"Till rest Frequency Date"
} }
], ],
@@ -153,7 +153,7 @@ public class LoanProductTestBuilder {
map.put("recalculationRestFrequencyType", recalculationRestFrequencyType); map.put("recalculationRestFrequencyType", recalculationRestFrequencyType);
map.put("recalculationRestFrequencyInterval", recalculationRestFrequencyInterval); map.put("recalculationRestFrequencyInterval", recalculationRestFrequencyInterval);
map.put("recalculationRestFrequencyDate", recalculationRestFrequencyDate); map.put("recalculationRestFrequencyDate", recalculationRestFrequencyDate);
map.put("preCloseInterestCalculationStrategy", preCloseInterestCalculationStrategy); map.put("preClosureInterestCalculationStrategy", preCloseInterestCalculationStrategy);
if (isArrearsBasedOnOriginalSchedule != null) { if (isArrearsBasedOnOriginalSchedule != null) {
map.put("isArrearsBasedOnOriginalSchedule", isArrearsBasedOnOriginalSchedule); map.put("isArrearsBasedOnOriginalSchedule", isArrearsBasedOnOriginalSchedule);
} }
@@ -301,7 +301,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
currency, installments); currency, installments);
if (unprocessed.isGreaterThanZero()) { if (unprocessed.isGreaterThanZero()) {
if (loanApplicationTerms.getPreCloseInterestCalculationStrategy().calculateTillRestFrequencyEnabled()) { if (loanApplicationTerms.getPreClosureInterestCalculationStrategy().calculateTillRestFrequencyEnabled()) {
LocalDate applicableDate = getNextRestScheduleDate(detail.getTransactionDate().minusDays(1), LocalDate applicableDate = getNextRestScheduleDate(detail.getTransactionDate().minusDays(1),
loanApplicationTerms, holidayDetailDTO); loanApplicationTerms, holidayDetailDTO);
checkForOutstanding = detail.getTransactionDate().isEqual(applicableDate); checkForOutstanding = detail.getTransactionDate().isEqual(applicableDate);
@@ -355,7 +355,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
// apply interest calculation as per // apply interest calculation as per
// configuration // configuration
if (!outstandingBalance.isGreaterThan(unprocessed) if (!outstandingBalance.isGreaterThan(unprocessed)
&& !loanApplicationTerms.getPreCloseInterestCalculationStrategy() && !loanApplicationTerms.getPreClosureInterestCalculationStrategy()
.calculateTillRestFrequencyEnabled()) { .calculateTillRestFrequencyEnabled()) {
LocalDate calculateTill = detail.getTransactionDate(); LocalDate calculateTill = detail.getTransactionDate();
@@ -516,7 +516,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
if (outstandingBalance.isLessThan(interestForThisinstallment) if (outstandingBalance.isLessThan(interestForThisinstallment)
&& !scheduledDueDate.equals(detail.getTransactionDate())) { && !scheduledDueDate.equals(detail.getTransactionDate())) {
LocalDate calculateTill = detail.getTransactionDate(); LocalDate calculateTill = detail.getTransactionDate();
if (loanApplicationTerms.getPreCloseInterestCalculationStrategy().calculateTillRestFrequencyEnabled()) { if (loanApplicationTerms.getPreClosureInterestCalculationStrategy().calculateTillRestFrequencyEnabled()) {
calculateTill = getNextRestScheduleDate(calculateTill.minusDays(1), loanApplicationTerms, calculateTill = getNextRestScheduleDate(calculateTill.minusDays(1), loanApplicationTerms,
holidayDetailDTO); holidayDetailDTO);
} }
@@ -1603,7 +1603,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
calculateInterestFrom = periodStartDateApplicableForInterest; calculateInterestFrom = periodStartDateApplicableForInterest;
} }
LocalDate calculateTill = onDate; LocalDate calculateTill = onDate;
if (loanApplicationTerms.getPreCloseInterestCalculationStrategy().calculateTillRestFrequencyEnabled()) { if (loanApplicationTerms.getPreClosureInterestCalculationStrategy().calculateTillRestFrequencyEnabled()) {
LocalDate applicableDate = getNextRestScheduleDate(onDate.minusDays(1), loanApplicationTerms, holidayDetailDTO); LocalDate applicableDate = getNextRestScheduleDate(onDate.minusDays(1), loanApplicationTerms, holidayDetailDTO);
calculateTill = applicableDate; calculateTill = applicableDate;
} }
@@ -31,7 +31,7 @@ import org.mifosplatform.portfolio.loanproduct.domain.AmortizationMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestCalculationPeriodMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestCalculationPeriodMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod;
import org.mifosplatform.portfolio.loanproduct.domain.LoanPreCloseInterestCalculationStrategy; import org.mifosplatform.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy;
import org.mifosplatform.portfolio.loanproduct.domain.LoanProductRelatedDetail; import org.mifosplatform.portfolio.loanproduct.domain.LoanProductRelatedDetail;
import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod;
import org.mifosplatform.portfolio.loanproduct.domain.RecalculationFrequencyType; import org.mifosplatform.portfolio.loanproduct.domain.RecalculationFrequencyType;
@@ -138,7 +138,7 @@ public final class LoanApplicationTerms {
private final BigDecimal principalThresholdForLastInstalment; private final BigDecimal principalThresholdForLastInstalment;
private final Integer installmentAmountInMultiplesOf; private final Integer installmentAmountInMultiplesOf;
private final LoanPreCloseInterestCalculationStrategy preCloseInterestCalculationStrategy; private final LoanPreClosureInterestCalculationStrategy preClosureInterestCalculationStrategy;
public static LoanApplicationTerms assembleFrom(final ApplicationCurrency currency, final Integer loanTermFrequency, public static LoanApplicationTerms assembleFrom(final ApplicationCurrency currency, final Integer loanTermFrequency,
final PeriodFrequencyType loanTermPeriodFrequencyType, final Integer numberOfRepayments, final Integer repaymentEvery, final PeriodFrequencyType loanTermPeriodFrequencyType, final Integer numberOfRepayments, final Integer repaymentEvery,
@@ -155,7 +155,7 @@ public final class LoanApplicationTerms {
final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType, final boolean isInterestRecalculationEnabled, final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType, final boolean isInterestRecalculationEnabled,
final RecalculationFrequencyType recalculationFrequencyType, final CalendarInstance restCalendarInstance, final RecalculationFrequencyType recalculationFrequencyType, final CalendarInstance restCalendarInstance,
final BigDecimal principalThresholdForLastInstalment, final Integer installmentAmountInMultiplesOf, final BigDecimal principalThresholdForLastInstalment, final Integer installmentAmountInMultiplesOf,
final LoanPreCloseInterestCalculationStrategy preCloseInterestCalculationStrategy) { final LoanPreClosureInterestCalculationStrategy preClosureInterestCalculationStrategy) {
final LoanRescheduleStrategyMethod rescheduleStrategyMethod = null; final LoanRescheduleStrategyMethod rescheduleStrategyMethod = null;
final InterestRecalculationCompoundingMethod interestRecalculationCompoundingMethod = null; final InterestRecalculationCompoundingMethod interestRecalculationCompoundingMethod = null;
@@ -167,7 +167,7 @@ public final class LoanApplicationTerms {
disbursementDatas, maxOutstandingBalance, emiAmountVariations, graceOnArrearsAgeing, daysInMonthType, daysInYearType, disbursementDatas, maxOutstandingBalance, emiAmountVariations, graceOnArrearsAgeing, daysInMonthType, daysInYearType,
isInterestRecalculationEnabled, rescheduleStrategyMethod, interestRecalculationCompoundingMethod, restCalendarInstance, isInterestRecalculationEnabled, rescheduleStrategyMethod, interestRecalculationCompoundingMethod, restCalendarInstance,
recalculationFrequencyType, principalThresholdForLastInstalment, installmentAmountInMultiplesOf, recalculationFrequencyType, principalThresholdForLastInstalment, installmentAmountInMultiplesOf,
preCloseInterestCalculationStrategy); preClosureInterestCalculationStrategy);
} }
public static LoanApplicationTerms assembleFrom(final ApplicationCurrency applicationCurrency, final Integer loanTermFrequency, public static LoanApplicationTerms assembleFrom(final ApplicationCurrency applicationCurrency, final Integer loanTermFrequency,
@@ -180,7 +180,7 @@ public final class LoanApplicationTerms {
final BigDecimal principalThresholdForLastInstalment, final Integer installmentAmountInMultiplesOf, final BigDecimal principalThresholdForLastInstalment, final Integer installmentAmountInMultiplesOf,
final RecalculationFrequencyType recalculationFrequencyType, final CalendarInstance restCalendarInstance, final RecalculationFrequencyType recalculationFrequencyType, final CalendarInstance restCalendarInstance,
final InterestRecalculationCompoundingMethod compoundingMethod, final InterestRecalculationCompoundingMethod compoundingMethod,
final LoanPreCloseInterestCalculationStrategy loanPreCloseInterestCalculationStrategy) { final LoanPreClosureInterestCalculationStrategy loanPreClosureInterestCalculationStrategy) {
final Integer numberOfRepayments = loanProductRelatedDetail.getNumberOfRepayments(); final Integer numberOfRepayments = loanProductRelatedDetail.getNumberOfRepayments();
final Integer repaymentEvery = loanProductRelatedDetail.getRepayEvery(); final Integer repaymentEvery = loanProductRelatedDetail.getRepayEvery();
@@ -213,7 +213,7 @@ public final class LoanApplicationTerms {
multiDisburseLoan, emiAmount, disbursementDatas, maxOutstandingBalance, emiAmountVariations, multiDisburseLoan, emiAmount, disbursementDatas, maxOutstandingBalance, emiAmountVariations,
loanProductRelatedDetail.getGraceOnDueDate(), daysInMonthType, daysInYearType, isInterestRecalculationEnabled, loanProductRelatedDetail.getGraceOnDueDate(), daysInMonthType, daysInYearType, isInterestRecalculationEnabled,
rescheduleStrategyMethod, compoundingMethod, restCalendarInstance, recalculationFrequencyType, rescheduleStrategyMethod, compoundingMethod, restCalendarInstance, recalculationFrequencyType,
principalThresholdForLastInstalment, installmentAmountInMultiplesOf, loanPreCloseInterestCalculationStrategy); principalThresholdForLastInstalment, installmentAmountInMultiplesOf, loanPreClosureInterestCalculationStrategy);
} }
public static LoanApplicationTerms assembleFrom(final ApplicationCurrency applicationCurrency, final Integer loanTermFrequency, public static LoanApplicationTerms assembleFrom(final ApplicationCurrency applicationCurrency, final Integer loanTermFrequency,
@@ -224,7 +224,8 @@ public final class LoanApplicationTerms {
final List<LoanTermVariationsData> emiAmountVariations, final LocalDate interestChargedFromDate, final List<LoanTermVariationsData> emiAmountVariations, final LocalDate interestChargedFromDate,
final LoanInterestRecalculationDetails interestRecalculationDetails, final CalendarInstance restCalendarInstance, final LoanInterestRecalculationDetails interestRecalculationDetails, final CalendarInstance restCalendarInstance,
final RecalculationFrequencyType recalculationFrequencyType, final BigDecimal principalThresholdForLastInstalment, final RecalculationFrequencyType recalculationFrequencyType, final BigDecimal principalThresholdForLastInstalment,
Integer installmentAmountInMultiplesOf, final LoanPreCloseInterestCalculationStrategy loanPreCloseInterestCalculationStrategy) { Integer installmentAmountInMultiplesOf,
final LoanPreClosureInterestCalculationStrategy loanPreClosureInterestCalculationStrategy) {
final Integer numberOfRepayments = loanProductRelatedDetail.getNumberOfRepayments(); final Integer numberOfRepayments = loanProductRelatedDetail.getNumberOfRepayments();
final Integer repaymentEvery = loanProductRelatedDetail.getRepayEvery(); final Integer repaymentEvery = loanProductRelatedDetail.getRepayEvery();
@@ -262,7 +263,7 @@ public final class LoanApplicationTerms {
disbursementDatas, maxOutstandingBalance, emiAmountVariations, loanProductRelatedDetail.getGraceOnDueDate(), disbursementDatas, maxOutstandingBalance, emiAmountVariations, loanProductRelatedDetail.getGraceOnDueDate(),
daysInMonthType, daysInYearType, isInterestRecalculationEnabled, rescheduleStrategyMethod, daysInMonthType, daysInYearType, isInterestRecalculationEnabled, rescheduleStrategyMethod,
interestRecalculationCompoundingMethod, restCalendarInstance, recalculationFrequencyType, interestRecalculationCompoundingMethod, restCalendarInstance, recalculationFrequencyType,
principalThresholdForLastInstalment, installmentAmountInMultiplesOf, loanPreCloseInterestCalculationStrategy); principalThresholdForLastInstalment, installmentAmountInMultiplesOf, loanPreClosureInterestCalculationStrategy);
} }
public static LoanApplicationTerms assembleFrom(final Integer repaymentEvery, final PeriodFrequencyType repaymentPeriodFrequencyType, public static LoanApplicationTerms assembleFrom(final Integer repaymentEvery, final PeriodFrequencyType repaymentPeriodFrequencyType,
@@ -281,7 +282,7 @@ public final class LoanApplicationTerms {
applicationTerms.interestRecalculationEnabled, applicationTerms.rescheduleStrategyMethod, applicationTerms.interestRecalculationEnabled, applicationTerms.rescheduleStrategyMethod,
applicationTerms.interestRecalculationCompoundingMethod, applicationTerms.restCalendarInstance, applicationTerms.interestRecalculationCompoundingMethod, applicationTerms.restCalendarInstance,
applicationTerms.recalculationFrequencyType, applicationTerms.principalThresholdForLastInstalment, applicationTerms.recalculationFrequencyType, applicationTerms.principalThresholdForLastInstalment,
applicationTerms.installmentAmountInMultiplesOf, applicationTerms.preCloseInterestCalculationStrategy); applicationTerms.installmentAmountInMultiplesOf, applicationTerms.preClosureInterestCalculationStrategy);
} }
private LoanApplicationTerms(final ApplicationCurrency currency, final Integer loanTermFrequency, private LoanApplicationTerms(final ApplicationCurrency currency, final Integer loanTermFrequency,
@@ -300,7 +301,7 @@ public final class LoanApplicationTerms {
final InterestRecalculationCompoundingMethod interestRecalculationCompoundingMethod, final InterestRecalculationCompoundingMethod interestRecalculationCompoundingMethod,
final CalendarInstance restCalendarInstance, final RecalculationFrequencyType recalculationFrequencyType, final CalendarInstance restCalendarInstance, final RecalculationFrequencyType recalculationFrequencyType,
final BigDecimal principalThresholdForLastInstalment, final Integer installmentAmountInMultiplesOf, final BigDecimal principalThresholdForLastInstalment, final Integer installmentAmountInMultiplesOf,
final LoanPreCloseInterestCalculationStrategy preCloseInterestCalculationStrategy) { final LoanPreClosureInterestCalculationStrategy preClosureInterestCalculationStrategy) {
this.currency = currency; this.currency = currency;
this.loanTermFrequency = loanTermFrequency; this.loanTermFrequency = loanTermFrequency;
this.loanTermPeriodFrequencyType = loanTermPeriodFrequencyType; this.loanTermPeriodFrequencyType = loanTermPeriodFrequencyType;
@@ -344,7 +345,7 @@ public final class LoanApplicationTerms {
this.recalculationFrequencyType = recalculationFrequencyType; this.recalculationFrequencyType = recalculationFrequencyType;
this.principalThresholdForLastInstalment = principalThresholdForLastInstalment; this.principalThresholdForLastInstalment = principalThresholdForLastInstalment;
this.installmentAmountInMultiplesOf = installmentAmountInMultiplesOf; this.installmentAmountInMultiplesOf = installmentAmountInMultiplesOf;
this.preCloseInterestCalculationStrategy = preCloseInterestCalculationStrategy; this.preClosureInterestCalculationStrategy = preClosureInterestCalculationStrategy;
} }
public Money adjustPrincipalIfLastRepaymentPeriod(final Money principalForPeriod, final Money totalCumulativePrincipalToDate, public Money adjustPrincipalIfLastRepaymentPeriod(final Money principalForPeriod, final Money totalCumulativePrincipalToDate,
@@ -1179,8 +1180,7 @@ public final class LoanApplicationTerms {
return this.interestCalculationPeriodMethod; return this.interestCalculationPeriodMethod;
} }
public LoanPreClosureInterestCalculationStrategy getPreClosureInterestCalculationStrategy() {
public LoanPreCloseInterestCalculationStrategy getPreCloseInterestCalculationStrategy() { return this.preClosureInterestCalculationStrategy;
return this.preCloseInterestCalculationStrategy;
} }
} }
@@ -75,7 +75,7 @@ public interface LoanProductConstants {
public static final String recalculationRestFrequencyIntervalParameterName = "recalculationRestFrequencyInterval"; public static final String recalculationRestFrequencyIntervalParameterName = "recalculationRestFrequencyInterval";
public static final String recalculationRestFrequencyDateParamName = "recalculationRestFrequencyDate"; public static final String recalculationRestFrequencyDateParamName = "recalculationRestFrequencyDate";
public static final String isArrearsBasedOnOriginalScheduleParamName = "isArrearsBasedOnOriginalSchedule"; public static final String isArrearsBasedOnOriginalScheduleParamName = "isArrearsBasedOnOriginalSchedule";
public static final String preCloseInterestCalculationStrategyParamName = "preCloseInterestCalculationStrategy"; public static final String preClosureInterestCalculationStrategyParamName = "preClosureInterestCalculationStrategy";
// Guarantee related // Guarantee related
public static final String holdGuaranteeFundsParamName = "holdGuaranteeFunds"; public static final String holdGuaranteeFundsParamName = "holdGuaranteeFunds";
@@ -130,7 +130,7 @@ public class LoanProductData {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final List<EnumOptionData> rescheduleStrategyTypeOptions; private final List<EnumOptionData> rescheduleStrategyTypeOptions;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final List<EnumOptionData> preCloseInterestCalculationStrategyOptions; private final List<EnumOptionData> preClosureInterestCalculationStrategyOptions;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final List<EnumOptionData> interestRecalculationFrequencyTypeOptions; private final List<EnumOptionData> interestRecalculationFrequencyTypeOptions;
@@ -481,7 +481,7 @@ public class LoanProductData {
this.canDefineInstallmentAmount = canDefineInstallmentAmount; this.canDefineInstallmentAmount = canDefineInstallmentAmount;
this.installmentAmountInMultiplesOf = installmentAmountInMultiplesOf; this.installmentAmountInMultiplesOf = installmentAmountInMultiplesOf;
this.preCloseInterestCalculationStrategyOptions = null; this.preClosureInterestCalculationStrategyOptions = null;
} }
@@ -596,7 +596,7 @@ public class LoanProductData {
this.canDefineInstallmentAmount = productData.canDefineInstallmentAmount; this.canDefineInstallmentAmount = productData.canDefineInstallmentAmount;
this.installmentAmountInMultiplesOf = productData.installmentAmountInMultiplesOf; this.installmentAmountInMultiplesOf = productData.installmentAmountInMultiplesOf;
this.preCloseInterestCalculationStrategyOptions = preCloseInterestCalculationStrategyOptions; this.preClosureInterestCalculationStrategyOptions = preCloseInterestCalculationStrategyOptions;
} }
private Collection<ChargeData> nullIfEmpty(final Collection<ChargeData> charges) { private Collection<ChargeData> nullIfEmpty(final Collection<ChargeData> charges) {
@@ -12,7 +12,7 @@ import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.r
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod;
import org.mifosplatform.portfolio.loanproduct.domain.LoanPreCloseInterestCalculationStrategy; import org.mifosplatform.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy;
import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod;
public class LoanProductInterestRecalculationData { public class LoanProductInterestRecalculationData {
@@ -29,7 +29,7 @@ public class LoanProductInterestRecalculationData {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final boolean isArrearsBasedOnOriginalSchedule; private final boolean isArrearsBasedOnOriginalSchedule;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final EnumOptionData preCloseInterestCalculationStrategy; private final EnumOptionData preClosureInterestCalculationStrategy;
public LoanProductInterestRecalculationData(final Long id, final Long productId, public LoanProductInterestRecalculationData(final Long id, final Long productId,
final EnumOptionData interestRecalculationCompoundingType, final EnumOptionData rescheduleStrategyType, final EnumOptionData interestRecalculationCompoundingType, final EnumOptionData rescheduleStrategyType,
@@ -44,7 +44,7 @@ public class LoanProductInterestRecalculationData {
this.recalculationRestFrequencyInterval = recalculationRestFrequencyInterval; this.recalculationRestFrequencyInterval = recalculationRestFrequencyInterval;
this.recalculationRestFrequencyDate = recalculationRestFrequencyDate; this.recalculationRestFrequencyDate = recalculationRestFrequencyDate;
this.isArrearsBasedOnOriginalSchedule = isArrearsBasedOnOriginalSchedule; this.isArrearsBasedOnOriginalSchedule = isArrearsBasedOnOriginalSchedule;
this.preCloseInterestCalculationStrategy = preCloseInterestCalculationStrategy; this.preClosureInterestCalculationStrategy = preCloseInterestCalculationStrategy;
} }
public static LoanProductInterestRecalculationData sensibleDefaultsForNewLoanProductCreation() { public static LoanProductInterestRecalculationData sensibleDefaultsForNewLoanProductCreation() {
@@ -56,7 +56,7 @@ public class LoanProductInterestRecalculationData {
final Integer recalculationRestFrequencyInterval = null; final Integer recalculationRestFrequencyInterval = null;
final LocalDate recalculationRestFrequencyDate = null; final LocalDate recalculationRestFrequencyDate = null;
final boolean isArrearsBasedOnOriginalSchedule = false; final boolean isArrearsBasedOnOriginalSchedule = false;
final EnumOptionData preCloseInterestCalculationStrategy = preCloseInterestCalculationStrategy(LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE); final EnumOptionData preCloseInterestCalculationStrategy = preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE);
return new LoanProductInterestRecalculationData(id, productId, interestRecalculationCompoundingType, rescheduleStrategyType, return new LoanProductInterestRecalculationData(id, productId, interestRecalculationCompoundingType, rescheduleStrategyType,
recalculationRestFrequencyType, recalculationRestFrequencyInterval, recalculationRestFrequencyDate, recalculationRestFrequencyType, recalculationRestFrequencyInterval, recalculationRestFrequencyDate,
isArrearsBasedOnOriginalSchedule, preCloseInterestCalculationStrategy); isArrearsBasedOnOriginalSchedule, preCloseInterestCalculationStrategy);
@@ -8,24 +8,24 @@ package org.mifosplatform.portfolio.loanproduct.domain;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
public enum LoanPreCloseInterestCalculationStrategy { public enum LoanPreClosureInterestCalculationStrategy {
NONE(0, "loanPreCloseInterestCalculationStrategy.none"), // NONE(0, "loanPreClosureInterestCalculationStrategy.none"), //
TILL_PRE_CLOSURE_DATE(1, "loanPreCloseInterestCalculationStrategy.tillPreClosureDate"), // TILL_PRE_CLOSURE_DATE(1, "loanPreClosureInterestCalculationStrategy.tillPreClosureDate"), //
TILL_REST_FREQUENCY_DATE(2, "loanPreCloseInterestCalculationStrategy.tillRestFrequencyDate"); TILL_REST_FREQUENCY_DATE(2, "loanPreClosureInterestCalculationStrategy.tillRestFrequencyDate");
// REPAYMENT_PERIOD_DATE(3, // REPAYMENT_PERIOD_DATE(3,
// "loanPreCloseInterestCalculationStrategy.repaymentPeriodDate") // "loanPreClosureInterestCalculationStrategy.repaymentPeriodDate")
private Integer value; private Integer value;
private String code; private String code;
private static final Map<Integer, LoanPreCloseInterestCalculationStrategy> intToEnumMap = new HashMap<>(); private static final Map<Integer, LoanPreClosureInterestCalculationStrategy> intToEnumMap = new HashMap<>();
private static int minValue; private static int minValue;
private static int maxValue; private static int maxValue;
static { static {
int i = 0; int i = 0;
for (final LoanPreCloseInterestCalculationStrategy type : LoanPreCloseInterestCalculationStrategy.values()) { for (final LoanPreClosureInterestCalculationStrategy type : LoanPreClosureInterestCalculationStrategy.values()) {
if (i == 0) { if (i == 0) {
minValue = type.value; minValue = type.value;
} }
@@ -40,12 +40,12 @@ public enum LoanPreCloseInterestCalculationStrategy {
} }
} }
public static LoanPreCloseInterestCalculationStrategy fromInt(final Integer ruleTypeValue) { public static LoanPreClosureInterestCalculationStrategy fromInt(final Integer ruleTypeValue) {
final LoanPreCloseInterestCalculationStrategy type = intToEnumMap.get(ruleTypeValue); final LoanPreClosureInterestCalculationStrategy type = intToEnumMap.get(ruleTypeValue);
return type; return type;
} }
private LoanPreCloseInterestCalculationStrategy(final Integer value, final String code) { private LoanPreClosureInterestCalculationStrategy(final Integer value, final String code) {
this.value = value; this.value = value;
this.code = code; this.code = code;
} }
@@ -67,10 +67,10 @@ public enum LoanPreCloseInterestCalculationStrategy {
} }
public boolean calculateTillRestFrequencyEnabled() { public boolean calculateTillRestFrequencyEnabled() {
return this.getValue().equals(LoanPreCloseInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getValue()); return this.getValue().equals(LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getValue());
} }
public boolean calculateTillPreClosureDateEnabled() { public boolean calculateTillPreClosureDateEnabled() {
return this.getValue().equals(LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue()); return this.getValue().equals(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue());
} }
} }
@@ -1069,8 +1069,8 @@ public class LoanProduct extends AbstractPersistable<Long> {
return this.installmentAmountInMultiplesOf; return this.installmentAmountInMultiplesOf;
} }
public LoanPreCloseInterestCalculationStrategy preCloseInterestCalculationStrategy() { public LoanPreClosureInterestCalculationStrategy preCloseInterestCalculationStrategy() {
LoanPreCloseInterestCalculationStrategy preCloseInterestCalculationStrategy = LoanPreCloseInterestCalculationStrategy.NONE; LoanPreClosureInterestCalculationStrategy preCloseInterestCalculationStrategy = LoanPreClosureInterestCalculationStrategy.NONE;
if (this.isInterestRecalculationEnabled()) { if (this.isInterestRecalculationEnabled()) {
preCloseInterestCalculationStrategy = getProductInterestRecalculationDetails().preCloseInterestCalculationStrategy(); preCloseInterestCalculationStrategy = getProductInterestRecalculationDetails().preCloseInterestCalculationStrategy();
} }
@@ -62,7 +62,7 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
private boolean isArrearsBasedOnOriginalSchedule; private boolean isArrearsBasedOnOriginalSchedule;
@Column(name = "pre_close_interest_calculation_strategy") @Column(name = "pre_close_interest_calculation_strategy")
private Integer preCloseInterestCalculationStrategy; private Integer preClosureInterestCalculationStrategy;
protected LoanProductInterestRecalculationDetails() { protected LoanProductInterestRecalculationDetails() {
// //
@@ -96,9 +96,9 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
} }
Integer preCloseInterestCalculationStrategy = command Integer preCloseInterestCalculationStrategy = command
.integerValueOfParameterNamed(LoanProductConstants.preCloseInterestCalculationStrategyParamName); .integerValueOfParameterNamed(LoanProductConstants.preClosureInterestCalculationStrategyParamName);
if (preCloseInterestCalculationStrategy == null) { if (preCloseInterestCalculationStrategy == null) {
preCloseInterestCalculationStrategy = LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue(); preCloseInterestCalculationStrategy = LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue();
} }
return new LoanProductInterestRecalculationDetails(interestRecalculationCompoundingMethod, loanRescheduleStrategyMethod, return new LoanProductInterestRecalculationDetails(interestRecalculationCompoundingMethod, loanRescheduleStrategyMethod,
@@ -115,7 +115,7 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
this.restInterval = restInterval; this.restInterval = restInterval;
this.restFrequencyDate = restFrequencyDate; this.restFrequencyDate = restFrequencyDate;
this.isArrearsBasedOnOriginalSchedule = isArrearsBasedOnOriginalSchedule; this.isArrearsBasedOnOriginalSchedule = isArrearsBasedOnOriginalSchedule;
this.preCloseInterestCalculationStrategy = preCloseInterestCalculationStrategy; this.preClosureInterestCalculationStrategy = preCloseInterestCalculationStrategy;
} }
public void updateProduct(final LoanProduct loanProduct) { public void updateProduct(final LoanProduct loanProduct) {
@@ -195,14 +195,14 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
this.isArrearsBasedOnOriginalSchedule = newValue; this.isArrearsBasedOnOriginalSchedule = newValue;
} }
if (command.isChangeInIntegerParameterNamed(LoanProductConstants.preCloseInterestCalculationStrategyParamName, if (command.isChangeInIntegerParameterNamed(LoanProductConstants.preClosureInterestCalculationStrategyParamName,
this.preCloseInterestCalculationStrategy)) { this.preClosureInterestCalculationStrategy)) {
Integer newValue = command.integerValueOfParameterNamed(LoanProductConstants.preCloseInterestCalculationStrategyParamName); Integer newValue = command.integerValueOfParameterNamed(LoanProductConstants.preClosureInterestCalculationStrategyParamName);
if (newValue == null) { if (newValue == null) {
newValue = LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue(); newValue = LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue();
} }
actualChanges.put(LoanProductConstants.preCloseInterestCalculationStrategyParamName, newValue); actualChanges.put(LoanProductConstants.preClosureInterestCalculationStrategyParamName, newValue);
this.preCloseInterestCalculationStrategy = newValue; this.preClosureInterestCalculationStrategy = newValue;
} }
} }
@@ -227,7 +227,7 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
return this.isArrearsBasedOnOriginalSchedule; return this.isArrearsBasedOnOriginalSchedule;
} }
public LoanPreCloseInterestCalculationStrategy preCloseInterestCalculationStrategy() { public LoanPreClosureInterestCalculationStrategy preCloseInterestCalculationStrategy() {
return LoanPreCloseInterestCalculationStrategy.fromInt(this.preCloseInterestCalculationStrategy); return LoanPreClosureInterestCalculationStrategy.fromInt(this.preClosureInterestCalculationStrategy);
} }
} }
@@ -26,7 +26,7 @@ import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidation
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.loanproduct.LoanProductConstants; import org.mifosplatform.portfolio.loanproduct.LoanProductConstants;
import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod;
import org.mifosplatform.portfolio.loanproduct.domain.LoanPreCloseInterestCalculationStrategy; import org.mifosplatform.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy;
import org.mifosplatform.portfolio.loanproduct.domain.LoanProduct; import org.mifosplatform.portfolio.loanproduct.domain.LoanProduct;
import org.mifosplatform.portfolio.loanproduct.domain.LoanProductValueConditionType; import org.mifosplatform.portfolio.loanproduct.domain.LoanProductValueConditionType;
import org.mifosplatform.portfolio.loanproduct.domain.RecalculationFrequencyType; import org.mifosplatform.portfolio.loanproduct.domain.RecalculationFrequencyType;
@@ -44,47 +44,41 @@ public final class LoanProductDataValidator {
/** /**
* The parameters supported for this command. * The parameters supported for this command.
*/ */
private final Set<String> supportedParameters = new HashSet<>( private final Set<String> supportedParameters = new HashSet<>(Arrays.asList("locale", "dateFormat", "name", "description", "fundId",
Arrays.asList("locale", "dateFormat", "name", "description", "fundId", "currencyCode", "digitsAfterDecimal", "inMultiplesOf", "currencyCode", "digitsAfterDecimal", "inMultiplesOf", "principal", "minPrincipal", "maxPrincipal", "repaymentEvery",
"principal", "minPrincipal", "maxPrincipal", "repaymentEvery", "numberOfRepayments", "minNumberOfRepayments", "numberOfRepayments", "minNumberOfRepayments", "maxNumberOfRepayments", "repaymentFrequencyType", "interestRatePerPeriod",
"maxNumberOfRepayments", "repaymentFrequencyType", "interestRatePerPeriod", "minInterestRatePerPeriod", "minInterestRatePerPeriod", "maxInterestRatePerPeriod", "interestRateFrequencyType", "amortizationType", "interestType",
"maxInterestRatePerPeriod", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", "inArrearsTolerance", "transactionProcessingStrategyId", "graceOnPrincipalPayment",
"interestCalculationPeriodType", "inArrearsTolerance", "transactionProcessingStrategyId", "graceOnPrincipalPayment", "graceOnInterestPayment", "graceOnInterestCharged", "charges", "accountingRule", "includeInBorrowerCycle", "startDate",
"graceOnInterestPayment", "graceOnInterestCharged", "charges", "accountingRule", "includeInBorrowerCycle", "startDate", "closeDate", "externalId", LOAN_PRODUCT_ACCOUNTING_PARAMS.FEES_RECEIVABLE.getValue(),
"closeDate", "externalId", LOAN_PRODUCT_ACCOUNTING_PARAMS.FEES_RECEIVABLE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.FUND_SOURCE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_FEES.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.FUND_SOURCE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_FEES.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_PENALTIES.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_ON_LOANS.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_PENALTIES.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_RECEIVABLE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.LOAN_PORTFOLIO.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_ON_LOANS.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.OVERPAYMENT.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_RECEIVABLE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.PENALTIES_RECEIVABLE.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.LOAN_PORTFOLIO.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.OVERPAYMENT.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.PAYMENT_CHANNEL_FUND_SOURCE_MAPPING.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.FEE_INCOME_ACCOUNT_MAPPING.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_RECOVERY.getValue(),
LOAN_PRODUCT_ACCOUNTING_PARAMS.PENALTIES_RECEIVABLE.getValue(), LOAN_PRODUCT_ACCOUNTING_PARAMS.PENALTY_INCOME_ACCOUNT_MAPPING.getValue(), LoanProductConstants.useBorrowerCycleParameterName,
LOAN_PRODUCT_ACCOUNTING_PARAMS.PAYMENT_CHANNEL_FUND_SOURCE_MAPPING.getValue(), LoanProductConstants.principalVariationsForBorrowerCycleParameterName,
LOAN_PRODUCT_ACCOUNTING_PARAMS.FEE_INCOME_ACCOUNT_MAPPING.getValue(), LoanProductConstants.interestRateVariationsForBorrowerCycleParameterName,
LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_RECOVERY.getValue(), LoanProductConstants.numberOfRepaymentVariationsForBorrowerCycleParameterName, LoanProductConstants.shortName,
LOAN_PRODUCT_ACCOUNTING_PARAMS.PENALTY_INCOME_ACCOUNT_MAPPING.getValue(), LoanProductConstants.multiDisburseLoanParameterName, LoanProductConstants.outstandingLoanBalanceParameterName,
LoanProductConstants.useBorrowerCycleParameterName, LoanProductConstants.maxTrancheCountParameterName, LoanProductConstants.graceOnArrearsAgeingParameterName,
LoanProductConstants.principalVariationsForBorrowerCycleParameterName, LoanProductConstants.overdueDaysForNPAParameterName, LoanProductConstants.isInterestRecalculationEnabledParameterName,
LoanProductConstants.interestRateVariationsForBorrowerCycleParameterName, LoanProductConstants.daysInYearTypeParameterName, LoanProductConstants.daysInMonthTypeParameterName,
LoanProductConstants.numberOfRepaymentVariationsForBorrowerCycleParameterName, LoanProductConstants.shortName, LoanProductConstants.rescheduleStrategyMethodParameterName,
LoanProductConstants.multiDisburseLoanParameterName, LoanProductConstants.outstandingLoanBalanceParameterName, LoanProductConstants.interestRecalculationCompoundingMethodParameterName,
LoanProductConstants.maxTrancheCountParameterName, LoanProductConstants.graceOnArrearsAgeingParameterName, LoanProductConstants.recalculationRestFrequencyDateParamName,
LoanProductConstants.overdueDaysForNPAParameterName, LoanProductConstants.isInterestRecalculationEnabledParameterName, LoanProductConstants.recalculationRestFrequencyIntervalParameterName,
LoanProductConstants.daysInYearTypeParameterName, LoanProductConstants.daysInMonthTypeParameterName, LoanProductConstants.recalculationRestFrequencyTypeParameterName,
LoanProductConstants.rescheduleStrategyMethodParameterName, LoanProductConstants.isArrearsBasedOnOriginalScheduleParamName,
LoanProductConstants.interestRecalculationCompoundingMethodParameterName, LoanProductConstants.minimumDaysBetweenDisbursalAndFirstRepayment, LoanProductConstants.mandatoryGuaranteeParamName,
LoanProductConstants.recalculationRestFrequencyDateParamName, LoanProductConstants.holdGuaranteeFundsParamName, LoanProductConstants.minimumGuaranteeFromGuarantorParamName,
LoanProductConstants.recalculationRestFrequencyIntervalParameterName, LoanProductConstants.minimumGuaranteeFromOwnFundsParamName, LoanProductConstants.principalThresholdForLastInstallmentParamName,
LoanProductConstants.recalculationRestFrequencyTypeParameterName, LoanProductConstants.accountMovesOutOfNPAOnlyOnArrearsCompletionParamName, LoanProductConstants.canDefineEmiAmountParamName,
LoanProductConstants.isArrearsBasedOnOriginalScheduleParamName, LoanProductConstants.installmentAmountInMultiplesOfParamName,
LoanProductConstants.minimumDaysBetweenDisbursalAndFirstRepayment, LoanProductConstants.mandatoryGuaranteeParamName, LoanProductConstants.preClosureInterestCalculationStrategyParamName));
LoanProductConstants.holdGuaranteeFundsParamName, LoanProductConstants.minimumGuaranteeFromGuarantorParamName,
LoanProductConstants.minimumGuaranteeFromOwnFundsParamName,
LoanProductConstants.principalThresholdForLastInstallmentParamName,
LoanProductConstants.accountMovesOutOfNPAOnlyOnArrearsCompletionParamName,
LoanProductConstants.canDefineEmiAmountParamName, LoanProductConstants.installmentAmountInMultiplesOfParamName,
LoanProductConstants.preCloseInterestCalculationStrategyParamName));
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
@@ -547,13 +541,14 @@ public final class LoanProductDataValidator {
} }
final Integer preCloseInterestCalculationStrategy = this.fromApiJsonHelper.extractIntegerWithLocaleNamed( final Integer preCloseInterestCalculationStrategy = this.fromApiJsonHelper.extractIntegerWithLocaleNamed(
LoanProductConstants.preCloseInterestCalculationStrategyParamName, element); LoanProductConstants.preClosureInterestCalculationStrategyParamName, element);
baseDataValidator baseDataValidator
.reset() .reset()
.parameter(LoanProductConstants.preCloseInterestCalculationStrategyParamName) .parameter(LoanProductConstants.preClosureInterestCalculationStrategyParamName)
.value(preCloseInterestCalculationStrategy) .value(preCloseInterestCalculationStrategy)
.ignoreIfNull() .ignoreIfNull()
.inMinMaxRange(LoanPreCloseInterestCalculationStrategy.getMinValue(), LoanPreCloseInterestCalculationStrategy.getMaxValue()); .inMinMaxRange(LoanPreClosureInterestCalculationStrategy.getMinValue(),
LoanPreClosureInterestCalculationStrategy.getMaxValue());
} }
public void validateForUpdate(final String json, final LoanProduct loanProduct) { public void validateForUpdate(final String json, final LoanProduct loanProduct) {
@@ -13,27 +13,28 @@ import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.i
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.interestType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.interestType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.loanCycleValueConditionType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.loanCycleValueConditionType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.loanTermFrequencyType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.loanTermFrequencyType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.preCloseInterestCalculationStrategy;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.repaymentFrequencyDayOfWeekType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.repaymentFrequencyDayOfWeekType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.repaymentFrequencyNthDayType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.repaymentFrequencyNthDayType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.repaymentFrequencyType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.repaymentFrequencyType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.rescheduleStrategyType; import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.rescheduleStrategyType;
import static org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations.preCloseInterestCalculationStrategy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.portfolio.common.domain.DayOfWeekType;
import org.mifosplatform.portfolio.common.domain.NthDayType; import org.mifosplatform.portfolio.common.domain.NthDayType;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.common.domain.DayOfWeekType;
import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionProcessingStrategyRepository; import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionProcessingStrategyRepository;
import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrategyData; import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrategyData;
import org.mifosplatform.portfolio.loanproduct.domain.AmortizationMethod; import org.mifosplatform.portfolio.loanproduct.domain.AmortizationMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestCalculationPeriodMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestCalculationPeriodMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod;
import org.mifosplatform.portfolio.loanproduct.domain.LoanPreCloseInterestCalculationStrategy; import org.mifosplatform.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy;
import org.mifosplatform.portfolio.loanproduct.domain.LoanProductValueConditionType; import org.mifosplatform.portfolio.loanproduct.domain.LoanProductValueConditionType;
import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod;
import org.mifosplatform.portfolio.loanproduct.domain.LoanTransactionProcessingStrategy; import org.mifosplatform.portfolio.loanproduct.domain.LoanTransactionProcessingStrategy;
@@ -177,8 +178,8 @@ public class LoanDropdownReadPlatformServiceImpl implements LoanDropdownReadPlat
public List<EnumOptionData> retrivePreCloseInterestCalculationStrategyOptions() { public List<EnumOptionData> retrivePreCloseInterestCalculationStrategyOptions() {
final List<EnumOptionData> preCloseInterestCalculationStrategyOptions = Arrays.asList( final List<EnumOptionData> preCloseInterestCalculationStrategyOptions = Arrays.asList(
preCloseInterestCalculationStrategy(LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE), preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE),
preCloseInterestCalculationStrategy(LoanPreCloseInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE)); preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE));
return preCloseInterestCalculationStrategyOptions; return preCloseInterestCalculationStrategyOptions;
} }
} }
@@ -20,7 +20,7 @@ import org.mifosplatform.portfolio.loanproduct.domain.AmortizationMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestCalculationPeriodMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestCalculationPeriodMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestMethod;
import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod; import org.mifosplatform.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod;
import org.mifosplatform.portfolio.loanproduct.domain.LoanPreCloseInterestCalculationStrategy; import org.mifosplatform.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy;
import org.mifosplatform.portfolio.loanproduct.domain.LoanProductParamType; import org.mifosplatform.portfolio.loanproduct.domain.LoanProductParamType;
import org.mifosplatform.portfolio.loanproduct.domain.LoanProductValueConditionType; import org.mifosplatform.portfolio.loanproduct.domain.LoanProductValueConditionType;
import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; import org.mifosplatform.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod;
@@ -598,19 +598,23 @@ public class LoanEnumerations {
} }
public static EnumOptionData preCloseInterestCalculationStrategy(final int id) { public static EnumOptionData preCloseInterestCalculationStrategy(final int id) {
return preCloseInterestCalculationStrategy(LoanPreCloseInterestCalculationStrategy.fromInt(id)); return preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.fromInt(id));
} }
public static EnumOptionData preCloseInterestCalculationStrategy(final LoanPreCloseInterestCalculationStrategy type) { public static EnumOptionData preCloseInterestCalculationStrategy(final LoanPreClosureInterestCalculationStrategy type) {
EnumOptionData optionData = null; EnumOptionData optionData = null;
switch (type) { switch (type) {
case TILL_PRE_CLOSURE_DATE: case TILL_PRE_CLOSURE_DATE:
optionData = new EnumOptionData(LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue().longValue(), optionData = new EnumOptionData(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue().longValue(),
LoanPreCloseInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getCode(), "Till preclose Date"); LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getCode(), "Till preclose Date");
break; break;
case TILL_REST_FREQUENCY_DATE: case TILL_REST_FREQUENCY_DATE:
optionData = new EnumOptionData(LoanPreCloseInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getValue().longValue(), optionData = new EnumOptionData(LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getValue().longValue(),
LoanPreCloseInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getCode(), "Till rest Frequency Date"); LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getCode(), "Till rest Frequency Date");
break;
case NONE:
break;
default:
break; break;
} }
return optionData; return optionData;