From 5fe0e529e7762c6972bd8926b5de6b9a0d0fb5ab Mon Sep 17 00:00:00 2001 From: Adi Narayana Raju Date: Mon, 2 Jan 2017 16:10:30 +0530 Subject: [PATCH] [Fineract-361] Partial periods not to be considered for PMT calculations --- .../domain/LoanApplicationTerms.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java index 074652222..b7aaf1271 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java @@ -633,7 +633,7 @@ public final class LoanApplicationTerms { // with periodic interest for default month and year for // equal installment final BigDecimal periodicInterestRateForRepaymentPeriod = periodicInterestRate(calculator, mc, DaysInMonthType.DAYS_30, - DaysInYearType.DAYS_365, periodStartDate, periodEndDate); + DaysInYearType.DAYS_365, periodStartDate, periodEndDate, true); Money totalPmtForThisInstallment = calculateTotalDueForEqualInstallmentRepaymentPeriod(periodicInterestRateForRepaymentPeriod, outstandingBalance, periodsElapsed); return totalPmtForThisInstallment; @@ -966,7 +966,13 @@ public final class LoanApplicationTerms { } private BigDecimal periodicInterestRate(final PaymentPeriodsInOneYearCalculator calculator, final MathContext mc, - final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType, LocalDate periodStartDate, LocalDate periodEndDate) { + final DaysInMonthType daysInMonthType, final DaysInYearType daysInYearType, LocalDate periodStartDate, + LocalDate periodEndDate) { + return periodicInterestRate(calculator, mc, daysInMonthType, daysInYearType, periodStartDate, periodEndDate, false); + } + + private BigDecimal periodicInterestRate(final PaymentPeriodsInOneYearCalculator calculator, final MathContext mc, final DaysInMonthType daysInMonthType, + final DaysInYearType daysInYearType, LocalDate periodStartDate, LocalDate periodEndDate, boolean isForPMT) { final long loanTermPeriodsInOneYear = calculatePeriodsInOneYear(calculator); @@ -974,7 +980,12 @@ public final class LoanApplicationTerms { final BigDecimal loanTermPeriodsInYearBigDecimal = BigDecimal.valueOf(loanTermPeriodsInOneYear); BigDecimal periodicInterestRate = BigDecimal.ZERO; - BigDecimal loanTermFrequencyBigDecimal = calculateLoanTermFrequency(periodStartDate, periodEndDate); + BigDecimal loanTermFrequencyBigDecimal = BigDecimal.ONE; + if(isForPMT){ + loanTermFrequencyBigDecimal = BigDecimal.valueOf(this.repaymentEvery); + } else { + loanTermFrequencyBigDecimal = calculateLoanTermFrequency(periodStartDate, periodEndDate); + } switch (this.interestCalculationPeriodMethod) { case INVALID: break;