Repository: incubator-fineract Updated Branches: refs/heads/develop 75f51a161 -> 516160bf4
#317 flat installment amount for fixed installment amount Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/b059bb62 Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/b059bb62 Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/b059bb62 Branch: refs/heads/develop Commit: b059bb620686552a30774de765b993a8970252ba Parents: 8baf9f4 Author: nazeer1100126 <[email protected]> Authored: Fri Apr 21 13:03:25 2017 +0530 Committer: nazeer1100126 <[email protected]> Committed: Fri Apr 21 13:03:25 2017 +0530 ---------------------------------------------------------------------- .../FlatInterestLoanScheduleGenerator.java | 8 +++--- .../domain/LoanApplicationTerms.java | 29 ++++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/b059bb62/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java index 5f3d8d7..bd66242 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java @@ -37,14 +37,14 @@ public class FlatInterestLoanScheduleGenerator extends AbstractLoanScheduleGener @SuppressWarnings("unused") TreeMap<LocalDate, Money> principalVariation, @SuppressWarnings("unused") Map<LocalDate, Money> compoundingMap, LocalDate periodStartDate, LocalDate periodEndDate, @SuppressWarnings("unused") Collection<LoanTermVariationsData> termVariations) { - - Money principalForThisInstallment = loanApplicationTerms.calculateTotalPrincipalForPeriod(calculator, outstandingBalance, - periodNumber, mc, null); - + final PrincipalInterest result = loanApplicationTerms.calculateTotalInterestForPeriod(calculator, interestCalculationGraceOnRepaymentPeriodFraction, periodNumber, mc, cumulatingInterestPaymentDueToGrace, outstandingBalance, periodStartDate, periodEndDate); Money interestForThisInstallment = result.interest(); + + Money principalForThisInstallment = loanApplicationTerms.calculateTotalPrincipalForPeriod(calculator, outstandingBalance, + periodNumber, mc, interestForThisInstallment); // update cumulative fields for principal & interest final Money interestBroughtForwardDueToGrace = result.interestPaymentDueToGrace(); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/b059bb62/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java ---------------------------------------------------------------------- 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 b7aaf12..fba0a39 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 @@ -600,7 +600,7 @@ public final class LoanApplicationTerms { switch (this.interestMethod) { case FLAT: - principalForInstallment = calculateTotalPrincipalPerPeriodWithoutGrace(mc, periodNumber); + principalForInstallment = calculateTotalPrincipalPerPeriodWithoutGrace(mc, periodNumber, interestForThisInstallment); break; case DECLINING_BALANCE: switch (this.amortizationMethod) { @@ -878,19 +878,26 @@ public final class LoanApplicationTerms { return interestPerInstallment; } - private Money calculateTotalPrincipalPerPeriodWithoutGrace(final MathContext mc, final int periodNumber) { + private Money calculateTotalPrincipalPerPeriodWithoutGrace(final MathContext mc, final int periodNumber, Money interestForThisInstallment) { final int totalRepaymentsWithCapitalPayment = calculateNumberOfRepaymentsWithPrincipalPayment(); - Money principalPerPeriod = this.principal.minus(totalPrincipalAccounted).dividedBy(totalRepaymentsWithCapitalPayment, mc.getRoundingMode()).plus( - this.adjustPrincipalForFlatLoans); - if (isPrincipalGraceApplicableForThisPeriod(periodNumber)) { - principalPerPeriod = principalPerPeriod.zero(); - } - if (!isPrincipalGraceApplicableForThisPeriod(periodNumber) && currentPeriodFixedPrincipalAmount != null) { - this.adjustPrincipalForFlatLoans = this.adjustPrincipalForFlatLoans.plus(principalPerPeriod.minus( - currentPeriodFixedPrincipalAmount).dividedBy(this.actualNumberOfRepayments - periodNumber, mc.getRoundingMode())); - principalPerPeriod = this.principal.zero().plus(currentPeriodFixedPrincipalAmount); + Money principalPerPeriod = null; + if (getFixedEmiAmount() == null) { + principalPerPeriod = this.principal.minus(totalPrincipalAccounted).dividedBy(totalRepaymentsWithCapitalPayment, mc.getRoundingMode()).plus( + this.adjustPrincipalForFlatLoans); + if (isPrincipalGraceApplicableForThisPeriod(periodNumber)) { + principalPerPeriod = principalPerPeriod.zero(); + } + if (!isPrincipalGraceApplicableForThisPeriod(periodNumber) && currentPeriodFixedPrincipalAmount != null) { + this.adjustPrincipalForFlatLoans = this.adjustPrincipalForFlatLoans.plus(principalPerPeriod.minus( + currentPeriodFixedPrincipalAmount).dividedBy(this.actualNumberOfRepayments - periodNumber, mc.getRoundingMode())); + principalPerPeriod = this.principal.zero().plus(currentPeriodFixedPrincipalAmount); + } + }else{ + principalPerPeriod = Money.of(this.getCurrency(), getFixedEmiAmount()).minus(interestForThisInstallment); + return principalPerPeriod; } + return principalPerPeriod; }
