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 {
|
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 final Collection<FloatingRatePeriodData> baseLendingRatePeriods;
|
private BigDecimal actualInterestRateDiff;
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BigDecimal fetchBaseRate(LocalDate date) {
|
public BigDecimal fetchBaseRate(LocalDate date) {
|
||||||
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;
|
}
|
||||||
}
|
}
|
||||||
}
|
return rate;
|
||||||
return rate;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void addInterestRateDiff(final BigDecimal diff) {
|
public void addInterestRateDiff(final BigDecimal diff) {
|
||||||
this.interestRateDiff = this.interestRateDiff.add(diff);
|
this.interestRateDiff = this.interestRateDiff.add(diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFloatingInterestRate() {
|
public boolean isFloatingInterestRate() {
|
||||||
return this.isFloatingInterestRate;
|
return this.isFloatingInterestRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getStartDate() {
|
public LocalDate getStartDate() {
|
||||||
return this.startDate;
|
return this.startDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BigDecimal getInterestRateDiff() {
|
public BigDecimal getInterestRateDiff() {
|
||||||
return this.interestRateDiff;
|
return this.interestRateDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<FloatingRatePeriodData> getBaseLendingRatePeriods() {
|
public Collection<FloatingRatePeriodData> getBaseLendingRatePeriods() {
|
||||||
return this.baseLendingRatePeriods;
|
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) {
|
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() {
|
||||||
|
|||||||
+1
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user