FINERACT-1785: Specified due date charges/fees cannot be applied on disbursement date

This commit is contained in:
Jose Alberto Hernandez
2023-01-09 23:39:56 +01:00
committed by Arnold Gálovics
parent ab51b2a4cc
commit dafd4c3436
2 changed files with 14 additions and 6 deletions
@@ -45,14 +45,14 @@ public class LoanRepaymentScheduleProcessingWrapper {
final Money feeChargesDueForRepaymentPeriod = cumulativeFeeChargesDueWithin(startDate, period.getDueDate(), loanCharges,
currency, period, totalPrincipal, totalInterest, !period.isRecalculatedInterestComponent());
final Money feeChargesWaivedForRepaymentPeriod = cumulativeFeeChargesWaivedWithin(startDate, period.getDueDate(), loanCharges,
currency, !period.isRecalculatedInterestComponent());
currency, !period.isRecalculatedInterestComponent(), period.isFirstPeriod());
final Money feeChargesWrittenOffForRepaymentPeriod = cumulativeFeeChargesWrittenOffWithin(startDate, period.getDueDate(),
loanCharges, currency, !period.isRecalculatedInterestComponent());
final Money penaltyChargesDueForRepaymentPeriod = cumulativePenaltyChargesDueWithin(startDate, period.getDueDate(), loanCharges,
currency, period, totalPrincipal, totalInterest, !period.isRecalculatedInterestComponent());
final Money penaltyChargesWaivedForRepaymentPeriod = cumulativePenaltyChargesWaivedWithin(startDate, period.getDueDate(),
loanCharges, currency, !period.isRecalculatedInterestComponent());
loanCharges, currency, !period.isRecalculatedInterestComponent(), period.isFirstPeriod());
final Money penaltyChargesWrittenOffForRepaymentPeriod = cumulativePenaltyChargesWrittenOffWithin(startDate,
period.getDueDate(), loanCharges, currency, !period.isRecalculatedInterestComponent());
@@ -129,7 +129,8 @@ public class LoanRepaymentScheduleProcessingWrapper {
}
private Money cumulativeFeeChargesWaivedWithin(final LocalDate periodStart, final LocalDate periodEnd,
final Set<LoanCharge> loanCharges, final MonetaryCurrency currency, boolean isInstallmentChargeApplicable) {
final Set<LoanCharge> loanCharges, final MonetaryCurrency currency, boolean isInstallmentChargeApplicable,
boolean isFirstPeriod) {
Money cumulative = Money.zero(currency);
@@ -142,6 +143,9 @@ public class LoanRepaymentScheduleProcessingWrapper {
}
} else if (loanCharge.isDueForCollectionFromAndUpToAndIncluding(periodStart, periodEnd)) {
cumulative = cumulative.plus(loanCharge.getAmountWaived(currency));
// Special case for Loan Charges (Due Date) added the same disbursement date
} else if (isFirstPeriod && periodStart.equals(loanCharge.getDueDate())) {
cumulative = cumulative.plus(loanCharge.getAmountWaived(currency));
}
}
}
@@ -223,7 +227,8 @@ public class LoanRepaymentScheduleProcessingWrapper {
}
private Money cumulativePenaltyChargesWaivedWithin(final LocalDate periodStart, final LocalDate periodEnd,
final Set<LoanCharge> loanCharges, final MonetaryCurrency currency, boolean isInstallmentChargeApplicable) {
final Set<LoanCharge> loanCharges, final MonetaryCurrency currency, boolean isInstallmentChargeApplicable,
boolean isFirstPeriod) {
Money cumulative = Money.zero(currency);
@@ -236,6 +241,9 @@ public class LoanRepaymentScheduleProcessingWrapper {
}
} else if (loanCharge.isDueForCollectionFromAndUpToAndIncluding(periodStart, periodEnd)) {
cumulative = cumulative.plus(loanCharge.getAmountWaived(currency));
// Special case for Loan Charges (Due Date) added the same disbursement date
} else if (isFirstPeriod && periodStart.equals(loanCharge.getDueDate())) {
cumulative = cumulative.plus(loanCharge.getAmountWaived(currency));
}
}
}