Repository: incubator-fineract
Updated Branches:
  refs/heads/0.1.0-incubating 1be4d026c -> 8d160d3e7


MIFOSX-2516: fix for  Floating rates with multi tranche loan


Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/331e8e4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/331e8e4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/331e8e4d

Branch: refs/heads/0.1.0-incubating
Commit: 331e8e4dec73ed68b3b002cfebd0647b99d652ad
Parents: 1be4d02
Author: pramod <pra...@confluxtechnologies.com>
Authored: Tue Feb 23 14:29:02 2016 +0530
Committer: pramod <pra...@confluxtechnologies.com>
Committed: Tue Feb 23 14:29:02 2016 +0530

----------------------------------------------------------------------
 .../floatingrates/data/FloatingRateDTO.java     | 82 ++++++++++----------
 .../data/LoanTermVariationsData.java            |  2 +-
 .../portfolio/loanaccount/domain/Loan.java      |  1 +
 3 files changed, 45 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/331e8e4d/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java
index 008e29f..0dfee5c 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java
@@ -25,51 +25,55 @@ import org.joda.time.LocalDate;
 
 public class FloatingRateDTO {
 
-       private final boolean isFloatingInterestRate;
-       private final LocalDate startDate;
-       private BigDecimal interestRateDiff;
-       private final Collection<FloatingRatePeriodData> baseLendingRatePeriods;
+    private final boolean isFloatingInterestRate;
+    private final LocalDate startDate;
+    private BigDecimal interestRateDiff;
+    private BigDecimal actualInterestRateDiff;
+    private final Collection<FloatingRatePeriodData> baseLendingRatePeriods;
 
-       public FloatingRateDTO(final boolean isFloatingInterestRate,
-                       final LocalDate startDate, final BigDecimal 
interestRateDiff,
-                       final Collection<FloatingRatePeriodData> 
baseLendingRatePeriods) {
-               this.isFloatingInterestRate = isFloatingInterestRate;
-               this.startDate = startDate;
-               this.interestRateDiff = interestRateDiff;
-               this.baseLendingRatePeriods = baseLendingRatePeriods;
-       }
+    public FloatingRateDTO(final boolean isFloatingInterestRate, final 
LocalDate startDate, final BigDecimal interestRateDiff,
+            final Collection<FloatingRatePeriodData> baseLendingRatePeriods) {
+        this.isFloatingInterestRate = isFloatingInterestRate;
+        this.startDate = startDate;
+        this.interestRateDiff = interestRateDiff;
+        this.actualInterestRateDiff = interestRateDiff;
+        this.baseLendingRatePeriods = baseLendingRatePeriods;
+    }
 
-       public BigDecimal fetchBaseRate(LocalDate date) {
-               BigDecimal rate = null;
-               for (FloatingRatePeriodData periodData : 
this.baseLendingRatePeriods) {
-                       final LocalDate periodFromDate = new 
LocalDate(periodData.getFromDate());
-                       if (periodFromDate.isBefore(date)
-                                       || periodFromDate.isEqual(date)) {
-                               rate = periodData.getInterestRate();
-                               break;
-                       }
-               }
-               return rate;
-       }
+    public BigDecimal fetchBaseRate(LocalDate date) {
+        BigDecimal rate = null;
+        for (FloatingRatePeriodData periodData : this.baseLendingRatePeriods) {
+            final LocalDate periodFromDate = new 
LocalDate(periodData.getFromDate());
+            if (periodFromDate.isBefore(date) || periodFromDate.isEqual(date)) 
{
+                rate = periodData.getInterestRate();
+                break;
+            }
+        }
+        return rate;
+    }
 
-       public void addInterestRateDiff(final BigDecimal diff) {
-               this.interestRateDiff = this.interestRateDiff.add(diff);
-       }
+    public void addInterestRateDiff(final BigDecimal diff) {
+        this.interestRateDiff = this.interestRateDiff.add(diff);
+    }
 
-       public boolean isFloatingInterestRate() {
-               return this.isFloatingInterestRate;
-       }
+    public boolean isFloatingInterestRate() {
+        return this.isFloatingInterestRate;
+    }
 
-       public LocalDate getStartDate() {
-               return this.startDate;
-       }
+    public LocalDate getStartDate() {
+        return this.startDate;
+    }
 
-       public BigDecimal getInterestRateDiff() {
-               return this.interestRateDiff;
-       }
+    public BigDecimal getInterestRateDiff() {
+        return this.interestRateDiff;
+    }
 
-       public Collection<FloatingRatePeriodData> getBaseLendingRatePeriods() {
-               return this.baseLendingRatePeriods;
-       }
+    public Collection<FloatingRatePeriodData> getBaseLendingRatePeriods() {
+        return this.baseLendingRatePeriods;
+    }
+
+    public void resetInterestRateDiff() {
+        this.interestRateDiff = this.actualInterestRateDiff;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/331e8e4d/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java
index 2113666..f5d2cc0 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java
@@ -84,7 +84,7 @@ public class LoanTermVariationsData implements 
Comparable<LoanTermVariationsData
     }
 
     private boolean occursBefore(final LocalDate date, final LocalDate target) 
{
-        return target != null && target.isBefore(date);
+        return target != null && !target.isAfter(date);
     }
 
     public LocalDate getDateValue() {

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/331e8e4d/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
index ac4aa45..56fd87c 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
@@ -2597,6 +2597,7 @@ public class Loan extends AbstractPersistable<Long> {
         final boolean isSpecificToInstallment = false;
         BigDecimal interestRate = annualNominalInterestRate;
         if (loanProduct.isLinkedToFloatingInterestRate()) {
+            floatingRateDTO.resetInterestRateDiff();
             Collection<FloatingRatePeriodData> applicableRates = 
loanProduct.fetchInterestRates(floatingRateDTO);
             LocalDate interestRateStartDate = DateUtils.getLocalDateOfTenant();
             for (FloatingRatePeriodData periodData : applicableRates) {

Reply via email to