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;
     }
 

Reply via email to