diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java index 49242644d48..0f06e034316 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java @@ -1088,7 +1088,8 @@ private void validateMultiDisburseLoanData(final DataValidatorBuilder baseDataVa effectiveAllowFullTermForTranche = loanProduct.getLoanProductTrancheDetails().isAllowFullTermForTranche(); } - // Validate: allowFullTermForTranche requires multi-disburse and PROGRESSIVE schedule + // Validate: allowFullTermForTranche requires multi-disburse and PROGRESSIVE + // schedule if (Boolean.TRUE.equals(effectiveAllowFullTermForTranche)) { if (!Boolean.TRUE.equals(effectiveMultiDisburseLoan)) { baseDataValidator.reset().parameter(LoanProductConstants.ALLOW_FULL_TERM_FOR_TRANCHE_PARAM_NAME).failWithCode( @@ -2125,7 +2126,8 @@ private void validateAdditionalAccountMappings(DataValidatorBuilder baseDataVali final JsonArray reasonToExpenseMappingArray = this.fromApiJsonHelper.extractJsonArrayNamed(parameterName, element); if (reasonToExpenseMappingArray != null && !reasonToExpenseMappingArray.isEmpty()) { Map> reasonToAccounts = new HashMap<>(); - List processedMappings = new ArrayList<>(); // Collect processed mappings for the new method + List processedMappings = new ArrayList<>(); // Collect processed mappings + // for the new method int i = 0; do { @@ -2189,7 +2191,8 @@ private void validateClassificationToIncomeMappings(final DataValidatorBuilder b final JsonArray classificationToIncomeMappingArray = this.fromApiJsonHelper.extractJsonArrayNamed(parameterName, element); if (classificationToIncomeMappingArray != null && classificationToIncomeMappingArray.size() > 0) { Map> classificationToAccounts = new HashMap<>(); - List processedMappings = new ArrayList<>(); // Collect processed mappings for the new method + List processedMappings = new ArrayList<>(); // Collect processed mappings + // for the new method int i = 0; do { @@ -2797,9 +2800,13 @@ public void fixedLengthValidations(final String transactionProcessingStrategyCod private void validateLoanScheduleType(final String transactionProcessingStrategyCode, final DataValidatorBuilder baseDataValidator, final JsonElement element) { final String loanScheduleType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_TYPE, element); - baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_TYPE).value(loanScheduleType) + baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_TYPE).value(loanScheduleType).ignoreIfNull() .isOneOfEnumValues(LoanScheduleType.class); + if (loanScheduleType == null || baseDataValidator.hasError()) { + return; + } + if (!LoanScheduleType.PROGRESSIVE.equals(LoanScheduleType.valueOf(loanScheduleType)) && AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY .equals(transactionProcessingStrategyCode)) {