From baaca2dd97c9ebb7336635225217be84ee5edc91 Mon Sep 17 00:00:00 2001 From: Wilfred Kigenyi Date: Mon, 5 Jan 2026 17:42:05 +0300 Subject: [PATCH] FINERACT-2432 --- .../serialization/LoanProductDataValidator.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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 49242644d..0f06e0343 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 @@ public final class LoanProductDataValidator { 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 @@ public final class LoanProductDataValidator { 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 @@ public final class LoanProductDataValidator { 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 final class LoanProductDataValidator { 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)) {