From 2620c61afaf5bcd8cbc6debf4c7723828b942f26 Mon Sep 17 00:00:00 2001 From: Attila Budai Date: Tue, 3 Feb 2026 15:30:50 +0100 Subject: [PATCH] FINERACT-2418: add originator global config --- .../api/GlobalConfigurationConstants.java | 1 + .../module-changelog-master.xml | 1 + ..._add_global_config_originator_creation.xml | 44 +++++++++++++++++++ .../GlobalConfigurationTest.java | 31 +++++++++++++ .../common/GlobalConfigurationHelper.java | 8 ++++ 5 files changed, 85 insertions(+) create mode 100644 fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/parts/0004_add_global_config_originator_creation.xml diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationConstants.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationConstants.java index 979eea042..b41bf8a90 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationConstants.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationConstants.java @@ -79,6 +79,7 @@ public final class GlobalConfigurationConstants { public static final String ASSET_OWNER_TRANSFER_OUTSTANDING_INTEREST_CALCULATION_STRATEGY = "outstanding-interest-calculation-strategy-for-external-asset-transfer"; public static final String ALLOWED_LOAN_STATUSES_FOR_EXTERNAL_ASSET_TRANSFER = "allowed-loan-statuses-for-external-asset-transfer"; public static final String ALLOWED_LOAN_STATUSES_OF_DELAYED_SETTLEMENT_FOR_EXTERNAL_ASSET_TRANSFER = "allowed-loan-statuses-of-delayed-settlement-for-external-asset-transfer"; + public static final String ENABLE_ORIGINATOR_CREATION_DURING_LOAN_APPLICATION = "enable-originator-creation-during-loan-application"; private GlobalConfigurationConstants() {} } diff --git a/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/module-changelog-master.xml b/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/module-changelog-master.xml index 0aa875a3f..b2e74e508 100644 --- a/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/module-changelog-master.xml +++ b/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/module-changelog-master.xml @@ -25,4 +25,5 @@ + diff --git a/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/parts/0004_add_global_config_originator_creation.xml b/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/parts/0004_add_global_config_originator_creation.xml new file mode 100644 index 000000000..79a87679d --- /dev/null +++ b/fineract-loan-origination/src/main/resources/db/changelog/tenant/module/loanorigination/parts/0004_add_global_config_originator_creation.xml @@ -0,0 +1,44 @@ + + + + + + SELECT SETVAL('c_configuration_id_seq', COALESCE(MAX(id), 0)+1, false) + FROM c_configuration; + + + + + + + + + + + + + + diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java index a4e0f702e..c0ddce87c 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java @@ -125,4 +125,35 @@ public class GlobalConfigurationTest { assertEquals(403, exception.getResponse().code()); assertTrue(exception.getMessage().contains("error.msg.password.reset.days.value.must.be.greater.than.zero")); } + + @Test + public void testOriginatorCreationConfigurationExists() { + String configName = GlobalConfigurationConstants.ENABLE_ORIGINATOR_CREATION_DURING_LOAN_APPLICATION; + GlobalConfigurationPropertyData config = globalConfigurationHelper.getGlobalConfigurationByName(configName); + + Assertions.assertNotNull(config, "Configuration should exist"); + assertEquals(configName, config.getName(), "Configuration name should match"); + assertEquals(false, config.getEnabled(), "Configuration should be disabled by default"); + assertEquals(false, config.getTrapDoor(), "Configuration should not be a trap door"); + } + + @Test + public void testOriginatorCreationConfigurationCanBeEnabled() { + String configName = GlobalConfigurationConstants.ENABLE_ORIGINATOR_CREATION_DURING_LOAN_APPLICATION; + GlobalConfigurationPropertyData config = globalConfigurationHelper.getGlobalConfigurationByName(configName); + Assertions.assertNotNull(config); + + try { + globalConfigurationHelper.updateGlobalConfiguration(configName, new PutGlobalConfigurationsRequest().enabled(true)); + GlobalConfigurationPropertyData enabledConfig = globalConfigurationHelper.getGlobalConfigurationByName(configName); + assertEquals(true, enabledConfig.getEnabled(), "Configuration should be enabled after update"); + + globalConfigurationHelper.updateGlobalConfiguration(configName, new PutGlobalConfigurationsRequest().enabled(false)); + GlobalConfigurationPropertyData disabledConfig = globalConfigurationHelper.getGlobalConfigurationByName(configName); + assertEquals(false, disabledConfig.getEnabled(), "Configuration should be disabled after update"); + } finally { + globalConfigurationHelper.updateGlobalConfiguration(configName, + new PutGlobalConfigurationsRequest().enabled(config.getEnabled())); + } + } } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java index 831ae45fc..10f3290aa 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java @@ -585,6 +585,14 @@ public class GlobalConfigurationHelper { "ACTIVE,TRANSFER_IN_PROGRESS,TRANSFER_ON_HOLD,OVERPAID,CLOSED_OBLIGATIONS_MET"); defaults.add(allowedLoanStatusesForDelayedSettlementExternalAssetTransfer); + HashMap enableOriginatorCreationDuringLoanApplication = new HashMap<>(); + enableOriginatorCreationDuringLoanApplication.put("name", + GlobalConfigurationConstants.ENABLE_ORIGINATOR_CREATION_DURING_LOAN_APPLICATION); + enableOriginatorCreationDuringLoanApplication.put("value", 0L); + enableOriginatorCreationDuringLoanApplication.put("enabled", false); + enableOriginatorCreationDuringLoanApplication.put("trapDoor", false); + defaults.add(enableOriginatorCreationDuringLoanApplication); + return defaults; }