FINERACT-2181: Not allow Reschedule loan with interest rate change from / to zero
This commit is contained in:
committed by
Adam Saghy
parent
a591f26546
commit
bf040561ab
+1
@@ -53,6 +53,7 @@ public final class RescheduleLoansApiConstants {
|
||||
public static final String rescheduleForMultiDisbursementNotSupportedErrorCode = "loan.reschedule.tranche.multidisbursement.error.code";
|
||||
public static final String rescheduleMultipleOperationsNotSupportedErrorCode = "loan.reschedule.multioperations.error.code";
|
||||
public static final String rescheduleSelectedOperationNotSupportedErrorCode = "loan.reschedule.selectedoperationnotsupported.error.code";
|
||||
public static final String rescheduleNotAllowedFromInterestRateZeroErrorCode = "loan.reschedule.not.allowed.from.current.interest.rate.zero";
|
||||
public static final String allCommandParamName = "all";
|
||||
public static final String approveCommandParamName = "approve";
|
||||
public static final String pendingCommandParamName = "pending";
|
||||
|
||||
+10
-3
@@ -39,6 +39,7 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
|
||||
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.infrastructure.core.service.MathUtil;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
|
||||
@@ -72,12 +73,17 @@ public class LoanRescheduleRequestDataValidatorImpl implements LoanRescheduleReq
|
||||
@Qualifier("progressiveLoanRescheduleRequestDataValidatorImpl")
|
||||
private final LoanRescheduleRequestDataValidator progressiveLoanRescheduleRequestDataValidatorDelegate;
|
||||
|
||||
public static BigDecimal validateInterestRate(FromJsonHelper fromJsonHelper, JsonElement jsonElement,
|
||||
DataValidatorBuilder dataValidatorBuilder) {
|
||||
public static BigDecimal validateInterestRate(final BigDecimal currentInterestRate, final FromJsonHelper fromJsonHelper,
|
||||
final JsonElement jsonElement, DataValidatorBuilder dataValidatorBuilder) {
|
||||
final BigDecimal interestRate = fromJsonHelper
|
||||
.extractBigDecimalWithLocaleNamed(RescheduleLoansApiConstants.newInterestRateParamName, jsonElement);
|
||||
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.newInterestRateParamName).value(interestRate).ignoreIfNull()
|
||||
.positiveAmount();
|
||||
if (interestRate != null && MathUtil.isZero(currentInterestRate) && !MathUtil.isZero(interestRate)) {
|
||||
dataValidatorBuilder.reset().failWithCode(RescheduleLoansApiConstants.newInterestRateParamName,
|
||||
RescheduleLoansApiConstants.rescheduleNotAllowedFromInterestRateZeroErrorCode,
|
||||
"Loan rescheduling is not allowed from interest rate 0 (zero)");
|
||||
}
|
||||
return interestRate;
|
||||
}
|
||||
|
||||
@@ -246,7 +252,8 @@ public class LoanRescheduleRequestDataValidatorImpl implements LoanRescheduleReq
|
||||
validateLoanIsActive(loan, dataValidatorBuilder);
|
||||
validateSubmittedOnDate(fromJsonHelper, loan, jsonElement, dataValidatorBuilder);
|
||||
final LocalDate rescheduleFromDate = validateAndRetrieveRescheduleFromDate(fromJsonHelper, jsonElement, dataValidatorBuilder);
|
||||
validateInterestRate(fromJsonHelper, jsonElement, dataValidatorBuilder);
|
||||
validateInterestRate(loan.getLoanRepaymentScheduleDetail().getAnnualNominalInterestRate(), fromJsonHelper, jsonElement,
|
||||
dataValidatorBuilder);
|
||||
validateGraceOnPrincipal(fromJsonHelper, jsonElement, dataValidatorBuilder);
|
||||
validateGraceOnInterest(fromJsonHelper, jsonElement, dataValidatorBuilder);
|
||||
validateExtraTerms(fromJsonHelper, jsonElement, dataValidatorBuilder);
|
||||
|
||||
Reference in New Issue
Block a user