MIFOSX-2516: fix for Floating rates with multi tranche loan
This commit is contained in:
+43
-39
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
+1
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user