FINERACT-2102: Loan Product enableDownPayment overrided in the Loan application
This commit is contained in:
committed by
Adam Saghy
parent
f5add87f2a
commit
5093ca7363
+4
@@ -1245,6 +1245,8 @@ final class LoansApiResourceSwagger {
|
||||
public String loanScheduleProcessingType;
|
||||
@Schema(example = "false")
|
||||
public Boolean enableInstallmentLevelDelinquency;
|
||||
@Schema(example = "false")
|
||||
public Boolean enableDownPayment;
|
||||
}
|
||||
|
||||
@Schema(description = "PostLoansResponse")
|
||||
@@ -1394,6 +1396,8 @@ final class LoansApiResourceSwagger {
|
||||
public String loanScheduleProcessingType;
|
||||
@Schema(example = "false")
|
||||
public Boolean enableInstallmentLevelDelinquency;
|
||||
@Schema(example = "false")
|
||||
public Boolean enableDownPayment;
|
||||
|
||||
static final class PutLoansLoanIdChanges {
|
||||
|
||||
|
||||
+22
-1
@@ -466,7 +466,11 @@ public class LoanScheduleAssembler {
|
||||
final boolean isPrincipalCompoundingDisabledForOverdueLoans = this.configurationDomainService
|
||||
.isPrincipalCompoundingDisabledForOverdueLoans();
|
||||
|
||||
final boolean isDownPaymentEnabled = loanProduct.getLoanProductRelatedDetail().isEnableDownPayment();
|
||||
boolean isDownPaymentEnabled = loanProduct.getLoanProductRelatedDetail().isEnableDownPayment();
|
||||
if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.ENABLE_DOWN_PAYMENT, element)) {
|
||||
isDownPaymentEnabled = this.fromApiJsonHelper.extractBooleanNamed(LoanProductConstants.ENABLE_DOWN_PAYMENT, element);
|
||||
}
|
||||
|
||||
BigDecimal disbursedAmountPercentageForDownPayment = null;
|
||||
boolean isAutoRepaymentForDownPaymentEnabled = false;
|
||||
if (isDownPaymentEnabled) {
|
||||
@@ -1379,6 +1383,22 @@ public class LoanScheduleAssembler {
|
||||
changes.put(LoanProductConstants.IS_EQUAL_AMORTIZATION_PARAM, newValue);
|
||||
loanProductRelatedDetail.setEqualAmortization(newValue);
|
||||
}
|
||||
|
||||
if (command.isChangeInBooleanParameterNamed(LoanProductConstants.ENABLE_DOWN_PAYMENT,
|
||||
loanProductRelatedDetail.isEnableDownPayment())) {
|
||||
final boolean newValue = command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.ENABLE_DOWN_PAYMENT);
|
||||
changes.put(LoanProductConstants.ENABLE_DOWN_PAYMENT, newValue);
|
||||
loanProductRelatedDetail.setEnableDownPayment(newValue);
|
||||
if (!newValue) {
|
||||
loanProductRelatedDetail.setEnableAutoRepaymentForDownPayment(false);
|
||||
loanProductRelatedDetail.setDisbursedAmountPercentageForDownPayment(null);
|
||||
} else {
|
||||
loanProductRelatedDetail.setEnableAutoRepaymentForDownPayment(
|
||||
loan.loanProduct().getLoanProductRelatedDetail().isEnableAutoRepaymentForDownPayment());
|
||||
loanProductRelatedDetail.setDisbursedAmountPercentageForDownPayment(
|
||||
loan.loanProduct().getLoanProductRelatedDetail().getDisbursedAmountPercentageForDownPayment());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Pair<Loan, Map<String, Object>> assembleLoanApproval(AppUser currentUser, JsonCommand command, Long loanId) {
|
||||
@@ -1446,4 +1466,5 @@ public class LoanScheduleAssembler {
|
||||
|
||||
return Pair.of(loan, actualChanges);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+5
-1
@@ -169,7 +169,7 @@ public final class LoanApplicationValidator {
|
||||
LoanApiConstants.daysInYearTypeParameterName, LoanApiConstants.fixedPrincipalPercentagePerInstallmentParamName,
|
||||
LoanApiConstants.DISALLOW_EXPECTED_DISBURSEMENTS, LoanApiConstants.FRAUD_ATTRIBUTE_NAME,
|
||||
LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE, LoanProductConstants.FIXED_LENGTH,
|
||||
LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY));
|
||||
LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY, LoanProductConstants.ENABLE_DOWN_PAYMENT));
|
||||
public static final String LOANAPPLICATION_UNDO = "loanapplication.undo";
|
||||
|
||||
private final FromJsonHelper fromApiJsonHelper;
|
||||
@@ -741,6 +741,8 @@ public final class LoanApplicationValidator {
|
||||
}
|
||||
}
|
||||
|
||||
loanScheduleValidator.validateDownPaymentAttribute(loanProduct.getLoanProductRelatedDetail().isEnableDownPayment(), element);
|
||||
|
||||
checkForProductMixRestrictions(element);
|
||||
validateSubmittedOnDate(element, submittedOnDate, loanProduct);
|
||||
validateDisbursementDetails(loanProduct, element);
|
||||
@@ -1396,6 +1398,8 @@ public final class LoanApplicationValidator {
|
||||
}
|
||||
}
|
||||
|
||||
loanScheduleValidator.validateDownPaymentAttribute(loanProduct.getLoanProductRelatedDetail().isEnableDownPayment(), element);
|
||||
|
||||
validateDisbursementDetails(loanProduct, element);
|
||||
validateSubmittedOnDate(element, loan.getSubmittedOnDate(), loanProduct);
|
||||
validateClientOrGroup(client, group, productId);
|
||||
|
||||
+14
-1
@@ -30,6 +30,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
|
||||
import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException;
|
||||
import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
|
||||
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||
@@ -71,7 +72,8 @@ public final class LoanScheduleValidator {
|
||||
LoanApiConstants.repaymentFrequencyDayOfWeekTypeParameterName, LoanApiConstants.isTopup, LoanApiConstants.loanIdToClose,
|
||||
LoanApiConstants.datatables, LoanApiConstants.isEqualAmortizationParam, LoanProductConstants.RATES_PARAM_NAME,
|
||||
LoanApiConstants.daysInYearTypeParameterName, LoanApiConstants.fixedPrincipalPercentagePerInstallmentParamName,
|
||||
LoanProductConstants.FIXED_LENGTH, LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY));
|
||||
LoanProductConstants.FIXED_LENGTH, LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY,
|
||||
LoanProductConstants.ENABLE_DOWN_PAYMENT));
|
||||
|
||||
private final FromJsonHelper fromApiJsonHelper;
|
||||
|
||||
@@ -176,4 +178,15 @@ public final class LoanScheduleValidator {
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
}
|
||||
|
||||
public void validateDownPaymentAttribute(final boolean isDownPaymentEnabledInLoanProduct, final JsonElement element) {
|
||||
final Boolean inputIsDownPaymentEnabled = this.fromApiJsonHelper.extractBooleanNamed(LoanProductConstants.ENABLE_DOWN_PAYMENT,
|
||||
element);
|
||||
if (!isDownPaymentEnabledInLoanProduct && Boolean.TRUE.equals(inputIsDownPaymentEnabled)) {
|
||||
throw new GeneralPlatformDomainRuleException("error.msg.downpayment.is.not.enabled.in.loan.product",
|
||||
"The Loan can not override the downpayment flag because in the Loan Product the downpayment is disabled",
|
||||
inputIsDownPaymentEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user