FINERACT-2338: Allow backdated interest rate change on progressive loans

This commit is contained in:
adam.magyari
2025-08-05 13:48:39 +02:00
committed by Adam Saghy
parent 0daf42ec33
commit d82ffddecc
5 changed files with 168 additions and 94 deletions
@@ -45,7 +45,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
@@ -89,18 +88,8 @@ public class ProgressiveLoanRescheduleRequestDataValidator implements LoanResche
"Only one operation is supported at a time during Loan Rescheduling");
}
final LocalDate businessDate = DateUtils.getBusinessLocalDate();
if (rescheduleFromDate != null) {
if (hasInterestRateChange && !rescheduleFromDate.isAfter(businessDate)) {
throw new GeneralPlatformDomainRuleException(
"loan.reschedule.interest.rate.change.reschedule.from.date.should.be.in.future",
String.format("Loan Reschedule From date (%s) for Loan: %s should be in the future.", rescheduleFromDate,
loan.getId()),
loan.getId(), rescheduleFromDate);
}
if (hasInterestRateChange) {
validateInterestRateChangeRescheduleFromDate(loan, rescheduleFromDate);
}
if (rescheduleFromDate != null && hasInterestRateChange) {
validateInterestRateChangeRescheduleFromDate(loan, rescheduleFromDate);
}
LoanRepaymentScheduleInstallment installment;
@@ -159,13 +148,6 @@ public class ProgressiveLoanRescheduleRequestDataValidator implements LoanResche
if (loanRescheduleRequest.getInterestRateFromInstallmentTermVariationIfExists() != null) {
installment = loan.getRelatedRepaymentScheduleInstallment(rescheduleFromDate);
if (!rescheduleFromDate.isAfter(DateUtils.getBusinessLocalDate())) {
throw new GeneralPlatformDomainRuleException(
"loan.reschedule.interest.rate.change.reschedule.from.date.should.be.in.future",
String.format("Loan Reschedule From date (%s) for Loan: %s should be in the future.", rescheduleFromDate,
loan.getId()),
loan.getId(), rescheduleFromDate);
}
} else {
installment = loan.fetchLoanRepaymentScheduleInstallmentByDueDate(rescheduleFromDate);
}