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 008e29f4b..0dfee5ce5 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 baseLendingRatePeriods; + private final boolean isFloatingInterestRate; + private final LocalDate startDate; + private BigDecimal interestRateDiff; + private BigDecimal actualInterestRateDiff; + private final Collection baseLendingRatePeriods; - public FloatingRateDTO(final boolean isFloatingInterestRate, - final LocalDate startDate, final BigDecimal interestRateDiff, - final Collection 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 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 getBaseLendingRatePeriods() { - return this.baseLendingRatePeriods; - } + public Collection getBaseLendingRatePeriods() { + return this.baseLendingRatePeriods; + } + + public void resetInterestRateDiff() { + this.interestRateDiff = this.actualInterestRateDiff; + } } 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 211366612..f5d2cc034 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 { final boolean isSpecificToInstallment = false; BigDecimal interestRate = annualNominalInterestRate; if (loanProduct.isLinkedToFloatingInterestRate()) { + floatingRateDTO.resetInterestRateDiff(); Collection applicableRates = loanProduct.fetchInterestRates(floatingRateDTO); LocalDate interestRateStartDate = DateUtils.getLocalDateOfTenant(); for (FloatingRatePeriodData periodData : applicableRates) {