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

This commit is contained in:
pramod
2016-02-23 14:29:02 +05:30
parent 1be4d026cf
commit 331e8e4dec
3 changed files with 45 additions and 40 deletions
@@ -28,14 +28,15 @@ public class FloatingRateDTO {
private final boolean isFloatingInterestRate; private final boolean isFloatingInterestRate;
private final LocalDate startDate; private final LocalDate startDate;
private BigDecimal interestRateDiff; private BigDecimal interestRateDiff;
private BigDecimal actualInterestRateDiff;
private final Collection<FloatingRatePeriodData> baseLendingRatePeriods; private final Collection<FloatingRatePeriodData> baseLendingRatePeriods;
public FloatingRateDTO(final boolean isFloatingInterestRate, public FloatingRateDTO(final boolean isFloatingInterestRate, final LocalDate startDate, final BigDecimal interestRateDiff,
final LocalDate startDate, final BigDecimal interestRateDiff,
final Collection<FloatingRatePeriodData> baseLendingRatePeriods) { final Collection<FloatingRatePeriodData> baseLendingRatePeriods) {
this.isFloatingInterestRate = isFloatingInterestRate; this.isFloatingInterestRate = isFloatingInterestRate;
this.startDate = startDate; this.startDate = startDate;
this.interestRateDiff = interestRateDiff; this.interestRateDiff = interestRateDiff;
this.actualInterestRateDiff = interestRateDiff;
this.baseLendingRatePeriods = baseLendingRatePeriods; this.baseLendingRatePeriods = baseLendingRatePeriods;
} }
@@ -43,8 +44,7 @@ public class FloatingRateDTO {
BigDecimal rate = null; BigDecimal rate = null;
for (FloatingRatePeriodData periodData : this.baseLendingRatePeriods) { for (FloatingRatePeriodData periodData : this.baseLendingRatePeriods) {
final LocalDate periodFromDate = new LocalDate(periodData.getFromDate()); final LocalDate periodFromDate = new LocalDate(periodData.getFromDate());
if (periodFromDate.isBefore(date) if (periodFromDate.isBefore(date) || periodFromDate.isEqual(date)) {
|| periodFromDate.isEqual(date)) {
rate = periodData.getInterestRate(); rate = periodData.getInterestRate();
break; break;
} }
@@ -72,4 +72,8 @@ public class FloatingRateDTO {
return this.baseLendingRatePeriods; return this.baseLendingRatePeriods;
} }
public void resetInterestRateDiff() {
this.interestRateDiff = this.actualInterestRateDiff;
}
} }
@@ -84,7 +84,7 @@ public class LoanTermVariationsData implements Comparable<LoanTermVariationsData
} }
private boolean occursBefore(final LocalDate date, final LocalDate target) { private boolean occursBefore(final LocalDate date, final LocalDate target) {
return target != null && target.isBefore(date); return target != null && !target.isAfter(date);
} }
public LocalDate getDateValue() { public LocalDate getDateValue() {
@@ -2597,6 +2597,7 @@ public class Loan extends AbstractPersistable<Long> {
final boolean isSpecificToInstallment = false; final boolean isSpecificToInstallment = false;
BigDecimal interestRate = annualNominalInterestRate; BigDecimal interestRate = annualNominalInterestRate;
if (loanProduct.isLinkedToFloatingInterestRate()) { if (loanProduct.isLinkedToFloatingInterestRate()) {
floatingRateDTO.resetInterestRateDiff();
Collection<FloatingRatePeriodData> applicableRates = loanProduct.fetchInterestRates(floatingRateDTO); Collection<FloatingRatePeriodData> applicableRates = loanProduct.fetchInterestRates(floatingRateDTO);
LocalDate interestRateStartDate = DateUtils.getLocalDateOfTenant(); LocalDate interestRateStartDate = DateUtils.getLocalDateOfTenant();
for (FloatingRatePeriodData periodData : applicableRates) { for (FloatingRatePeriodData periodData : applicableRates) {