diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInMonthType.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInMonthType.java
index e80269fdb..3e5ddd0e8 100755
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInMonthType.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInMonthType.java
@@ -12,8 +12,8 @@ import java.util.List;
*
* People typically use either of the following settings when calculating there
* interest using the daily method:
- * - 360 and
- * - 365
+ * - Actual or
+ * - 30
*
*/
public enum DaysInMonthType {
@@ -64,4 +64,8 @@ public enum DaysInMonthType {
}
return repaymentFrequencyType;
}
+
+ public boolean isDaysInMonth_30() {
+ return DaysInMonthType.DAYS_30.getValue().equals(this.value);
+ }
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInYearType.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInYearType.java
index ffcb648d5..0c37b8ecd 100755
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInYearType.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/common/domain/DaysInYearType.java
@@ -12,7 +12,9 @@ import java.util.List;
*
* People typically use either of the following settings when calculating there
* interest using the daily method:
- * - 360 and
+ * - Actual or
+ * - 360 or
+ * - 364 or
* - 365
*
*/
@@ -71,4 +73,8 @@ public enum DaysInYearType {
}
return repaymentFrequencyType;
}
+
+ public boolean isActual() {
+ return DaysInYearType.ACTUAL.getValue().equals(this.value);
+ }
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
index bb1649369..640aa726d 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java
@@ -66,8 +66,8 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
final Collection periods = createNewLoanScheduleListWithDisbursementDetails(numberOfRepayments,
loanApplicationTerms, chargesDueAtTimeOfDisbursement);
- // 4. Determine the total interest owed over the full loan.
- final Money totalInterestChargedForFullLoanTerm = loanApplicationTerms.calculateTotalInterestCharged(
+ // 4. Determine the total interest owed over the full loan for FLAT interest method .
+ Money totalInterestChargedForFullLoanTerm = loanApplicationTerms.calculateTotalInterestCharged(
this.paymentPeriodsInOneYearCalculator, mc);
LocalDate periodStartDate = loanApplicationTerms.getExpectedDisbursementDate();
@@ -150,13 +150,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
Money feeChargesForInstallment = principalDisbursed.zero();
Money penaltyChargesForInstallment = principalDisbursed.zero();
- if (!(loanApplicationTerms.isMultiDisburseLoan() && loanApplicationTerms.getFixedEmiAmount() != null)) {
- // 7. determine fees and penalties
- feeChargesForInstallment = cumulativeFeeChargesDueWithin(periodStartDate, scheduledDueDate, loanCharges, currency,
- principalInterestForThisPeriod, principalDisbursed, totalInterestChargedForFullLoanTerm, numberOfRepayments);
- penaltyChargesForInstallment = cumulativePenaltyChargesDueWithin(periodStartDate, scheduledDueDate, loanCharges, currency,
- principalInterestForThisPeriod, principalDisbursed, totalInterestChargedForFullLoanTerm, numberOfRepayments);
- }
+
// 8. sum up real totalInstallmentDue from components
final Money totalInstallmentDue = principalInterestForThisPeriod.principal() //
.plus(principalInterestForThisPeriod.interest()) //
@@ -187,22 +181,20 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
throw new MultiDisbursementDisbursementDateException(errorMsg);
}
- if (loanApplicationTerms.isMultiDisburseLoan() && loanApplicationTerms.getFixedEmiAmount() != null && !loanCharges.isEmpty()) {
- // 7. determine fees and penalties
- for (LoanScheduleModelPeriod loanScheduleModelPeriod : periods) {
- if (loanScheduleModelPeriod.isRepaymentPeriod()) {
- PrincipalInterest principalInterest = new PrincipalInterest(Money.of(currency, loanScheduleModelPeriod.principalDue()),
- Money.of(currency, loanScheduleModelPeriod.interestDue()), null);
- Money feeChargesForInstallment = cumulativeFeeChargesDueWithin(loanScheduleModelPeriod.periodFromDate(),
- loanScheduleModelPeriod.periodDueDate(), loanCharges, currency, principalInterest, principalDisbursed,
- totalCumulativeInterest, numberOfRepayments);
- Money penaltyChargesForInstallment = cumulativePenaltyChargesDueWithin(loanScheduleModelPeriod.periodFromDate(),
- loanScheduleModelPeriod.periodDueDate(), loanCharges, currency, principalInterest, principalDisbursed,
- totalCumulativeInterest, numberOfRepayments);
- totalFeeChargesCharged = totalFeeChargesCharged.add(feeChargesForInstallment.getAmount());
- totalPenaltyChargesCharged = totalPenaltyChargesCharged.add(penaltyChargesForInstallment.getAmount());
- loanScheduleModelPeriod.addLoanCharges(feeChargesForInstallment.getAmount(), penaltyChargesForInstallment.getAmount());
- }
+ // 7. determine fees and penalties
+ for (LoanScheduleModelPeriod loanScheduleModelPeriod : periods) {
+ if (loanScheduleModelPeriod.isRepaymentPeriod()) {
+ PrincipalInterest principalInterest = new PrincipalInterest(Money.of(currency, loanScheduleModelPeriod.principalDue()),
+ Money.of(currency, loanScheduleModelPeriod.interestDue()), null);
+ Money feeChargesForInstallment = cumulativeFeeChargesDueWithin(loanScheduleModelPeriod.periodFromDate(),
+ loanScheduleModelPeriod.periodDueDate(), loanCharges, currency, principalInterest, principalDisbursed,
+ totalCumulativeInterest, numberOfRepayments);
+ Money penaltyChargesForInstallment = cumulativePenaltyChargesDueWithin(loanScheduleModelPeriod.periodFromDate(),
+ loanScheduleModelPeriod.periodDueDate(), loanCharges, currency, principalInterest, principalDisbursed,
+ totalCumulativeInterest, numberOfRepayments);
+ totalFeeChargesCharged = totalFeeChargesCharged.add(feeChargesForInstallment.getAmount());
+ totalPenaltyChargesCharged = totalPenaltyChargesCharged.add(penaltyChargesForInstallment.getAmount());
+ loanScheduleModelPeriod.addLoanCharges(feeChargesForInstallment.getAmount(), penaltyChargesForInstallment.getAmount());
}
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
index 09ca65bac..a2f5e90a4 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
@@ -16,6 +16,8 @@ import org.joda.time.LocalDate;
import org.mifosplatform.organisation.monetary.domain.ApplicationCurrency;
import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency;
import org.mifosplatform.organisation.monetary.domain.Money;
+import org.mifosplatform.portfolio.common.domain.DaysInMonthType;
+import org.mifosplatform.portfolio.common.domain.DaysInYearType;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.loanaccount.data.DisbursementData;
import org.mifosplatform.portfolio.loanaccount.data.LoanTermVariationsData;
@@ -102,6 +104,10 @@ public final class LoanApplicationTerms {
private List emiAmountVariations;
+ private final DaysInMonthType daysInMonthType;
+
+ private final DaysInYearType daysInYearType;
+
public static LoanApplicationTerms assembleFrom(final ApplicationCurrency currency, final Integer loanTermFrequency,
final PeriodFrequencyType loanTermPeriodFrequencyType, final Integer numberOfRepayments, final Integer repaymentEvery,
final PeriodFrequencyType repaymentPeriodFrequencyType, final AmortizationMethod amortizationMethod,
@@ -113,22 +119,23 @@ public final class LoanApplicationTerms {
final Integer graceOnInterestPayment, final Integer graceOnInterestCharged, final LocalDate interestChargedFromDate,
final Money inArrearsTolerance, final boolean multiDisburseLoan, final BigDecimal emiAmount,
final List disbursementDatas, final BigDecimal maxOutstandingBalance,
- final List emiAmountVariations, final Integer graceOnArrearsAgeing) {
+ final List emiAmountVariations, final Integer graceOnArrearsAgeing,
+ final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType) {
return new LoanApplicationTerms(currency, loanTermFrequency, loanTermPeriodFrequencyType, numberOfRepayments, repaymentEvery,
repaymentPeriodFrequencyType, amortizationMethod, interestMethod, interestRatePerPeriod, interestRatePeriodFrequencyType,
annualNominalInterestRate, interestCalculationPeriodMethod, principalMoney, expectedDisbursementDate,
repaymentsStartingFromDate, calculatedRepaymentsStartingFromDate, graceOnPrincipalPayment, graceOnInterestPayment,
graceOnInterestCharged, interestChargedFromDate, inArrearsTolerance, multiDisburseLoan, emiAmount, disbursementDatas,
- maxOutstandingBalance, emiAmountVariations, graceOnArrearsAgeing);
+ maxOutstandingBalance, emiAmountVariations, graceOnArrearsAgeing, daysInMonthType, daysInYearType);
}
public static LoanApplicationTerms assembleFrom(final ApplicationCurrency applicationCurrency, final Integer loanTermFrequency,
final PeriodFrequencyType loanTermPeriodFrequencyType, final LocalDate expectedDisbursementDate,
final LocalDate repaymentsStartingFromDate, final LocalDate calculatedRepaymentsStartingFromDate,
- final Money inArrearsTolerance, final LoanProductRelatedDetail loanProductRelatedDetail,
- final boolean multiDisburseLoan,final BigDecimal emiAmount,final List disbursementDatas,
- final BigDecimal maxOutstandingBalance,final List emiAmountVariations, final LocalDate interestChargedFromDate) {
+ final Money inArrearsTolerance, final LoanProductRelatedDetail loanProductRelatedDetail, final boolean multiDisburseLoan,
+ final BigDecimal emiAmount, final List disbursementDatas, final BigDecimal maxOutstandingBalance,
+ final List emiAmountVariations, final LocalDate interestChargedFromDate) {
final Integer numberOfRepayments = loanProductRelatedDetail.getNumberOfRepayments();
final Integer repaymentEvery = loanProductRelatedDetail.getRepayEvery();
@@ -143,8 +150,8 @@ public final class LoanApplicationTerms {
final Money principalMoney = loanProductRelatedDetail.getPrincipal();
//
- final Integer graceOnPrincipalPayment = loanProductRelatedDetail.graceOnPrincipalPayment() ;
- final Integer graceOnInterestPayment = loanProductRelatedDetail.graceOnInterestPayment() ;
+ final Integer graceOnPrincipalPayment = loanProductRelatedDetail.graceOnPrincipalPayment();
+ final Integer graceOnInterestPayment = loanProductRelatedDetail.graceOnInterestPayment();
final Integer graceOnInterestCharged = loanProductRelatedDetail.graceOnInterestCharged();
return new LoanApplicationTerms(applicationCurrency, loanTermFrequency, loanTermPeriodFrequencyType, numberOfRepayments,
@@ -152,7 +159,8 @@ public final class LoanApplicationTerms {
interestRatePeriodFrequencyType, annualNominalInterestRate, interestCalculationPeriodMethod, principalMoney,
expectedDisbursementDate, repaymentsStartingFromDate, calculatedRepaymentsStartingFromDate, graceOnPrincipalPayment,
graceOnInterestPayment, graceOnInterestCharged, interestChargedFromDate, inArrearsTolerance, multiDisburseLoan, emiAmount,
- disbursementDatas, maxOutstandingBalance, emiAmountVariations, loanProductRelatedDetail.getGraceOnDueDate());
+ disbursementDatas, maxOutstandingBalance, emiAmountVariations, loanProductRelatedDetail.getGraceOnDueDate(),
+ loanProductRelatedDetail.fetchDaysInMonthType(), loanProductRelatedDetail.fetchDaysInYearType());
}
private LoanApplicationTerms(final ApplicationCurrency currency, final Integer loanTermFrequency,
@@ -165,7 +173,8 @@ public final class LoanApplicationTerms {
final LocalDate calculatedRepaymentsStartingFromDate, final Integer principalGrace, final Integer interestPaymentGrace,
final Integer interestChargingGrace, final LocalDate interestChargedFromDate, final Money inArrearsTolerance,
final boolean multiDisburseLoan, final BigDecimal emiAmount, final List disbursementDatas,
- final BigDecimal maxOutstandingBalance, final List emiAmountVariations, final Integer graceOnArrearsAgeing) {
+ final BigDecimal maxOutstandingBalance, final List emiAmountVariations,
+ final Integer graceOnArrearsAgeing, final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType) {
this.currency = currency;
this.loanTermFrequency = loanTermFrequency;
this.loanTermPeriodFrequencyType = loanTermPeriodFrequencyType;
@@ -197,6 +206,8 @@ public final class LoanApplicationTerms {
this.maxOutstandingBalance = maxOutstandingBalance;
this.emiAmountVariations = emiAmountVariations;
this.graceOnArrearsAgeing = graceOnArrearsAgeing;
+ this.daysInMonthType = daysInMonthType;
+ this.daysInYearType = daysInYearType;
}
public Money adjustPrincipalIfLastRepaymentPeriod(final Money principalForPeriod, final Money totalCumulativePrincipalToDate,
@@ -273,12 +284,6 @@ public final class LoanApplicationTerms {
totalInterestCharged = totalInterestChargedForLoanTerm.minus(totalGraceOnInterestCharged);
break;
case DECLINING_BALANCE:
- final BigDecimal periodicInterestRateForRepaymentPeriod = periodicInterestRate(calculator, mc);
-
- final Money totalRepaymentDueForLoanTerm = calculateTotalDueForEqualInstallmentLoan(periodicInterestRateForRepaymentPeriod);
-
- totalInterestCharged = totalRepaymentDueForLoanTerm.minus(this.principal);
- break;
case INVALID:
break;
}
@@ -303,7 +308,10 @@ public final class LoanApplicationTerms {
case EQUAL_INSTALLMENTS:
// equal installments
final int periodsElapsed = periodNumber - 1;
- final BigDecimal periodicInterestRateForRepaymentPeriod = periodicInterestRate(calculator, mc);
+ // with periodic interest for default month and year for
+ // equal installment
+ final BigDecimal periodicInterestRateForRepaymentPeriod = periodicInterestRate(calculator, mc, daysInPeriod,
+ DaysInMonthType.DAYS_30, DaysInYearType.DAYS_365);
Money totalPmtForThisInstallment = calculateTotalDueForEqualInstallmentRepaymentPeriod(
periodicInterestRateForRepaymentPeriod, outstandingBalance, periodsElapsed);
principalForInstallment = calculatePrincipalDueForInstallment(calculator, mc, periodNumber,
@@ -384,15 +392,6 @@ public final class LoanApplicationTerms {
return periodNumber == numberOfRepayments;
}
- private Money calculateTotalDueForEqualInstallmentLoan(final BigDecimal periodicInterestRate) {
-
- final int periodsElapsed = 0;
- final double paymentPerRepaymentPeriod = paymentPerPeriod(periodicInterestRate, this.principal, periodsElapsed);
- final double totalRepayment = paymentPerRepaymentPeriod * this.numberOfRepayments;
-
- return Money.of(this.principal.getCurrency(), BigDecimal.valueOf(totalRepayment));
- }
-
/**
* general method to calculate totalInterestDue discounting any grace
* settings
@@ -521,7 +520,8 @@ public final class LoanApplicationTerms {
return interestForInstallment;
}
- private BigDecimal periodicInterestRate(final PaymentPeriodsInOneYearCalculator calculator, final MathContext mc) {
+ private BigDecimal periodicInterestRate(final PaymentPeriodsInOneYearCalculator calculator, final MathContext mc, final int actualDays,
+ final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType) {
final long loanTermPeriodsInOneYear = calculatePeriodsInOneYear(calculator);
@@ -535,7 +535,8 @@ public final class LoanApplicationTerms {
break;
case DAILY:
// For daily work out number of days in the period
- int numberOfDaysInPeriod = this.repaymentEvery;
+ int numberOfDaysInPeriod = actualDays;
+
final BigDecimal oneDayOfYearInterestRate = this.annualNominalInterestRate.divide(loanTermPeriodsInYearBigDecimal, mc)
.divide(divisor, mc);
@@ -547,15 +548,28 @@ public final class LoanApplicationTerms {
periodicInterestRate = oneDayOfYearInterestRate.multiply(loanTermFrequencyBigDecimal, mc);
break;
case WEEKS:
- numberOfDaysInPeriod = this.repaymentEvery * 7;
periodicInterestRate = oneDayOfYearInterestRate.multiply(BigDecimal.valueOf(numberOfDaysInPeriod), mc);
break;
case MONTHS:
- numberOfDaysInPeriod = this.repaymentEvery * 30;
+ if (daysInMonthType.isDaysInMonth_30()) {
+ numberOfDaysInPeriod = this.repaymentEvery * 30;
+ }
periodicInterestRate = oneDayOfYearInterestRate.multiply(BigDecimal.valueOf(numberOfDaysInPeriod), mc);
break;
case YEARS:
- numberOfDaysInPeriod = this.repaymentEvery * 365;
+ switch (daysInYearType) {
+ case DAYS_360:
+ numberOfDaysInPeriod = this.repaymentEvery * 360;
+ break;
+ case DAYS_364:
+ numberOfDaysInPeriod = this.repaymentEvery * 364;
+ break;
+ case DAYS_365:
+ numberOfDaysInPeriod = this.repaymentEvery * 365;
+ break;
+ default:
+ break;
+ }
periodicInterestRate = oneDayOfYearInterestRate.multiply(BigDecimal.valueOf(numberOfDaysInPeriod), mc);
break;
}
@@ -655,23 +669,9 @@ public final class LoanApplicationTerms {
Money interestDue = Money.zero(outstandingBalance.getCurrency());
- switch (this.interestCalculationPeriodMethod) {
- case DAILY:
- final BigDecimal dailyInterestRate = this.annualNominalInterestRate.divide(BigDecimal.valueOf(Long.valueOf(365)), mc)
- .divide(BigDecimal.valueOf(Double.valueOf("100.0")), mc);
-
- final BigDecimal equivalentInterestRateForPeriod = dailyInterestRate
- .multiply(BigDecimal.valueOf(Long.valueOf(daysInPeriod)));
-
- interestDue = outstandingBalance.multiplyRetainScale(equivalentInterestRateForPeriod, mc.getRoundingMode());
- break;
- case SAME_AS_REPAYMENT_PERIOD:
- final BigDecimal periodicInterestRate = periodicInterestRate(calculator, mc);
- interestDue = outstandingBalance.multiplyRetainScale(periodicInterestRate, mc.getRoundingMode());
- break;
- case INVALID:
- break;
- }
+ final BigDecimal periodicInterestRate = periodicInterestRate(calculator, mc, daysInPeriod, this.daysInMonthType,
+ this.daysInYearType);
+ interestDue = outstandingBalance.multiplyRetainScale(periodicInterestRate, mc.getRoundingMode());
return interestDue;
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
index 5bb1e0c7b..3ff5584dc 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
@@ -221,7 +221,7 @@ public class LoanScheduleAssembler {
expectedDisbursementDate, repaymentsStartingFromDate, calculatedRepaymentsStartingFromDate, graceOnPrincipalPayment,
graceOnInterestPayment, graceOnInterestCharged, interestChargedFromDate, inArrearsToleranceMoney,
loanProduct.isMultiDisburseLoan(), emiAmount, disbursementDatas, maxOutstandingBalance, loanVariationTermsData,
- graceOnArrearsAgeing);
+ graceOnArrearsAgeing, loanProduct.fetchDaysInMonthType(), loanProduct.fetchDaysInYearType());
}
private List fetchDisbursementData(final JsonObject command) {
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java
index ccfe46446..7e6951cb7 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java
@@ -38,6 +38,8 @@ import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency;
import org.mifosplatform.organisation.monetary.domain.Money;
import org.mifosplatform.portfolio.charge.domain.Charge;
+import org.mifosplatform.portfolio.common.domain.DaysInMonthType;
+import org.mifosplatform.portfolio.common.domain.DaysInYearType;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.fund.domain.Fund;
import org.mifosplatform.portfolio.loanaccount.loanschedule.domain.AprCalculator;
@@ -839,4 +841,13 @@ public class LoanProduct extends AbstractPersistable {
}
return borrowerCycleVariations;
}
+
+ public DaysInMonthType fetchDaysInMonthType() {
+ return this.loanProductRelatedDetail.fetchDaysInMonthType();
+ }
+
+ public DaysInYearType fetchDaysInYearType() {
+ return this.loanProductRelatedDetail.fetchDaysInYearType();
+ }
+
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java
index e799bdd46..6213c14a7 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java
@@ -23,6 +23,8 @@ import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency;
import org.mifosplatform.organisation.monetary.domain.Money;
+import org.mifosplatform.portfolio.common.domain.DaysInMonthType;
+import org.mifosplatform.portfolio.common.domain.DaysInYearType;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.loanaccount.domain.Loan;
import org.mifosplatform.portfolio.loanaccount.loanschedule.domain.AprCalculator;
@@ -164,15 +166,15 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
public void setPrincipal(BigDecimal principal) {
this.principal = principal;
}
-
+
public Integer graceOnInterestCharged() {
return this.graceOnInterestCharged;
}
-
+
public Integer graceOnInterestPayment() {
return this.graceOnInterestPayment;
}
-
+
public Integer graceOnPrincipalPayment() {
return this.graceOnPrincipalPayment;
}
@@ -431,4 +433,12 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
public Integer getGraceOnDueDate() {
return this.graceOnArrearsAgeing;
}
+
+ public DaysInMonthType fetchDaysInMonthType() {
+ return DaysInMonthType.ACTUAL;
+ }
+
+ public DaysInYearType fetchDaysInYearType() {
+ return DaysInYearType.ACTUAL;
+ }
}
\ No newline at end of file