MIFOSX-1995 : fix for prepay of loan with moratorium
This commit is contained in:
+13
-2
@@ -483,7 +483,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
|
||||
// update cumulative fields for principal & interest
|
||||
Money interestForThisinstallment = principalInterestForThisPeriod.interest();
|
||||
|
||||
Money lastTotalOutstandingInterestPaymentDueToGrace = totalOutstandingInterestPaymentDueToGrace;
|
||||
totalOutstandingInterestPaymentDueToGrace = principalInterestForThisPeriod.interestPaymentDueToGrace();
|
||||
Money principalForThisPeriod = principalInterestForThisPeriod.principal();
|
||||
|
||||
@@ -576,7 +576,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
PrincipalInterest interestTillDate = calculatePrincipalInterestComponentsForPeriod(
|
||||
this.paymentPeriodsInOneYearCalculator, interestCalculationGraceOnRepaymentPeriodFraction,
|
||||
totalCumulativePrincipal, totalCumulativeInterest, totalInterestChargedForFullLoanTerm,
|
||||
totalOutstandingInterestPaymentDueToGrace, outstandingBalanceAsPerRest, loanApplicationTerms,
|
||||
lastTotalOutstandingInterestPaymentDueToGrace, outstandingBalanceAsPerRest, loanApplicationTerms,
|
||||
periodNumber, mc,
|
||||
mergeVariationsToMap(principalPortionMap, latePaymentMap, disburseDetailMap, compoundingMap),
|
||||
compoundingMap, periodStartDateApplicableForInterest, calculateTill,
|
||||
@@ -595,6 +595,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
detail.getTransactionDate(), principalForThisPeriod, outstandingBalance,
|
||||
interestForThisinstallment, feeChargesForInstallment, penaltyChargesForInstallment, totalDue,
|
||||
false);
|
||||
totalOutstandingInterestPaymentDueToGrace = interestTillDate.interestPaymentDueToGrace();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -651,6 +652,16 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
compoundingDateVariations.clear();
|
||||
}
|
||||
|
||||
// this condition is to add the interest from grace period if not
|
||||
// already applied.
|
||||
if (totalOutstandingInterestPaymentDueToGrace.isGreaterThanZero()) {
|
||||
LoanScheduleModelPeriod installment = ((List<LoanScheduleModelPeriod>) periods).get(periods.size() - 1);
|
||||
installment.addInterestAmount(totalOutstandingInterestPaymentDueToGrace);
|
||||
totalRepaymentExpected = totalRepaymentExpected.add(totalOutstandingInterestPaymentDueToGrace.getAmount());
|
||||
totalCumulativeInterest = totalCumulativeInterest.plus(totalOutstandingInterestPaymentDueToGrace);
|
||||
totalOutstandingInterestPaymentDueToGrace = totalOutstandingInterestPaymentDueToGrace.zero();
|
||||
}
|
||||
|
||||
// 7. determine fees and penalties for charges which depends on total
|
||||
// loan interest
|
||||
for (LoanScheduleModelPeriod loanScheduleModelPeriod : periods) {
|
||||
|
||||
+11
-3
@@ -77,11 +77,15 @@ public class DecliningBalanceInterestLoanScheduleGenerator extends AbstractLoanS
|
||||
interestForDays, balanceForInterestCalculation);
|
||||
if (loanApplicationTerms.getInterestCalculationPeriodMethod().isDaily()) {
|
||||
interestForThisInstallment = interestForThisInstallment.plus(result.interest());
|
||||
cumulatingInterestDueToGrace = result.interestPaymentDueToGrace();
|
||||
} else {
|
||||
interestForThisInstallment = interestForThisInstallment.plus(calculateInterestForDays(
|
||||
daysForInterestInFullPeriod, result.interest().getAmount(), interestForDays));
|
||||
cumulatingInterestDueToGrace = cumulatingInterestDueToGrace.plus(calculateInterestForDays(
|
||||
daysForInterestInFullPeriod, result.interestPaymentDueToGrace().minus(cumulatingInterestDueToGrace)
|
||||
.getAmount(), interestForDays));
|
||||
}
|
||||
cumulatingInterestDueToGrace = result.interestPaymentDueToGrace();
|
||||
|
||||
interestStartDate = principal.getKey();
|
||||
}
|
||||
Money compoundFee = totalCumulativePrincipal.zero();
|
||||
@@ -117,22 +121,26 @@ public class DecliningBalanceInterestLoanScheduleGenerator extends AbstractLoanS
|
||||
balanceForInterestCalculation);
|
||||
if (loanApplicationTerms.getInterestCalculationPeriodMethod().isDaily()) {
|
||||
interestForThisInstallment = interestForThisInstallment.plus(result.interest());
|
||||
cumulatingInterestDueToGrace = result.interestPaymentDueToGrace();
|
||||
} else {
|
||||
interestForThisInstallment = interestForThisInstallment.plus(calculateInterestForDays(daysForInterestInFullPeriod, result
|
||||
.interest().getAmount(), interestForDays));
|
||||
cumulatingInterestDueToGrace = cumulatingInterestDueToGrace.plus(calculateInterestForDays(
|
||||
daysForInterestInFullPeriod, result.interestPaymentDueToGrace().minus(cumulatingInterestDueToGrace)
|
||||
.getAmount(), interestForDays));
|
||||
}
|
||||
|
||||
Money interestForPeriod = interestForThisInstallment;
|
||||
if (interestForPeriod.isGreaterThanZero()) {
|
||||
interestForPeriod = interestForPeriod.minus(cumulatingInterestPaymentDueToGrace);
|
||||
} else {
|
||||
interestForPeriod = result.interestPaymentDueToGrace().minus(cumulatingInterestPaymentDueToGrace);
|
||||
interestForPeriod = cumulatingInterestDueToGrace.minus(cumulatingInterestPaymentDueToGrace);
|
||||
}
|
||||
Money principalForThisInstallment = loanApplicationTerms.calculateTotalPrincipalForPeriod(calculator,
|
||||
daysInPeriodApplicableForInterest, outstandingBalance, periodNumber, mc, interestForPeriod);
|
||||
|
||||
// update cumulative fields for principal & interest
|
||||
final Money interestBroughtFowardDueToGrace = result.interestPaymentDueToGrace();
|
||||
final Money interestBroughtFowardDueToGrace = cumulatingInterestDueToGrace;
|
||||
final Money totalCumulativePrincipalToDate = totalCumulativePrincipal.plus(principalForThisInstallment);
|
||||
|
||||
// adjust if needed
|
||||
|
||||
Reference in New Issue
Block a user