FINERACT-214 : adding validation for overdue charges while rescheuling
This commit is contained in:
+4
@@ -6349,4 +6349,8 @@ public class Loan extends AbstractPersistable<Long> {
|
|||||||
public LoanTopupDetails getTopupLoanDetails() {
|
public LoanTopupDetails getTopupLoanDetails() {
|
||||||
return this.loanTopupDetails;
|
return this.loanTopupDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Collection<LoanCharge> getLoanCharges() {
|
||||||
|
return this.charges;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-5
@@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.data;
|
|||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
|
|||||||
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
|
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||||
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
|
||||||
import org.apache.fineract.portfolio.loanaccount.rescheduleloan.RescheduleLoansApiConstants;
|
import org.apache.fineract.portfolio.loanaccount.rescheduleloan.RescheduleLoansApiConstants;
|
||||||
import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest;
|
import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest;
|
||||||
@@ -140,9 +142,9 @@ public class LoanRescheduleRequestDataValidator {
|
|||||||
&& !this.fromJsonHelper.parameterExists(RescheduleLoansApiConstants.adjustedDueDateParamName, jsonElement)) {
|
&& !this.fromJsonHelper.parameterExists(RescheduleLoansApiConstants.adjustedDueDateParamName, jsonElement)) {
|
||||||
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.graceOnPrincipalParamName).notNull();
|
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.graceOnPrincipalParamName).notNull();
|
||||||
}
|
}
|
||||||
|
LoanRepaymentScheduleInstallment installment = null;
|
||||||
if (rescheduleFromDate != null) {
|
if (rescheduleFromDate != null) {
|
||||||
LoanRepaymentScheduleInstallment installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate);
|
installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate);
|
||||||
|
|
||||||
if (installment == null) {
|
if (installment == null) {
|
||||||
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.rescheduleFromDateParamName)
|
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.rescheduleFromDateParamName)
|
||||||
@@ -165,9 +167,24 @@ public class LoanRescheduleRequestDataValidator {
|
|||||||
dataValidatorBuilder.reset().failWithCodeNoParameterAddedToErrorCode(RescheduleLoansApiConstants.resheduleWithInterestRecalculationNotSupportedErrorCode,
|
dataValidatorBuilder.reset().failWithCodeNoParameterAddedToErrorCode(RescheduleLoansApiConstants.resheduleWithInterestRecalculationNotSupportedErrorCode,
|
||||||
"Loan rescheduling is not supported for the loan product with interest recalculation enabled");
|
"Loan rescheduling is not supported for the loan product with interest recalculation enabled");
|
||||||
}
|
}
|
||||||
|
validateForOverdueCharges(dataValidatorBuilder, loan, installment);
|
||||||
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); }
|
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void validateForOverdueCharges(DataValidatorBuilder dataValidatorBuilder, final Loan loan,
|
||||||
|
final LoanRepaymentScheduleInstallment installment) {
|
||||||
|
if (installment != null) {
|
||||||
|
LocalDate rescheduleFromDate = installment.getFromDate();
|
||||||
|
Collection<LoanCharge> charges = loan.getLoanCharges();
|
||||||
|
for (LoanCharge loanCharge : charges) {
|
||||||
|
if (loanCharge.isOverdueInstallmentCharge() && loanCharge.getDueLocalDate().isAfter(rescheduleFromDate)) {
|
||||||
|
dataValidatorBuilder.failWithCodeNoParameterAddedToErrorCode("not.allowed.due.to.overdue.charges");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates a user request to approve a loan reschedule request
|
* Validates a user request to approve a loan reschedule request
|
||||||
@@ -212,7 +229,7 @@ public class LoanRescheduleRequestDataValidator {
|
|||||||
|
|
||||||
LocalDate rescheduleFromDate = loanRescheduleRequest.getRescheduleFromDate();
|
LocalDate rescheduleFromDate = loanRescheduleRequest.getRescheduleFromDate();
|
||||||
final Loan loan = loanRescheduleRequest.getLoan();
|
final Loan loan = loanRescheduleRequest.getLoan();
|
||||||
|
LoanRepaymentScheduleInstallment installment = null;
|
||||||
if (loan != null) {
|
if (loan != null) {
|
||||||
|
|
||||||
if (!loan.status().isActive()) {
|
if (!loan.status().isActive()) {
|
||||||
@@ -220,7 +237,7 @@ public class LoanRescheduleRequestDataValidator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rescheduleFromDate != null) {
|
if (rescheduleFromDate != null) {
|
||||||
LoanRepaymentScheduleInstallment installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate);
|
installment = loan.getRepaymentScheduleInstallment(rescheduleFromDate);
|
||||||
|
|
||||||
if (installment == null) {
|
if (installment == null) {
|
||||||
dataValidatorBuilder.reset().failWithCodeNoParameterAddedToErrorCode(
|
dataValidatorBuilder.reset().failWithCodeNoParameterAddedToErrorCode(
|
||||||
@@ -233,6 +250,8 @@ public class LoanRescheduleRequestDataValidator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
validateForOverdueCharges(dataValidatorBuilder, loan, installment);
|
||||||
|
|
||||||
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); }
|
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user