This is an automated email from the ASF dual-hosted git repository.
ptuomola pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 8dc5789 FINERACT-1053:Client-AccountNumber-Length
8dc5789 is described below
commit 8dc5789607dfa51a9186e1971998550df8e85374
Author: rrpawar96 <[email protected]>
AuthorDate: Thu Nov 25 17:50:12 2021 +0530
FINERACT-1053:Client-AccountNumber-Length
---
.../client/domain/AccountNumberGenerator.java | 25 +++++++++++++++++++++-
...iguration_for_variable_length_acoountNumber.sql | 20 +++++++++++++++++
.../common/GlobalConfigurationHelper.java | 14 +++++++++---
3 files changed, 55 insertions(+), 4 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/AccountNumberGenerator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/AccountNumberGenerator.java
index 0372bcd..6a3bb31 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/AccountNumberGenerator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/AccountNumberGenerator.java
@@ -24,10 +24,13 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat;
import
org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatEnumerations.AccountNumberPrefixType;
import org.apache.fineract.infrastructure.codes.domain.CodeValue;
+import
org.apache.fineract.infrastructure.configuration.data.GlobalConfigurationPropertyData;
+import
org.apache.fineract.infrastructure.configuration.service.ConfigurationReadPlatformService;
import org.apache.fineract.portfolio.group.domain.Group;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
@@ -45,6 +48,12 @@ public class AccountNumberGenerator {
private static final String LOAN_PRODUCT_SHORT_NAME =
"loanProductShortName";
private static final String SAVINGS_PRODUCT_SHORT_NAME =
"savingsProductShortName";
private static final String SHARE_PRODUCT_SHORT_NAME =
"sharesProductShortName";
+ private final ConfigurationReadPlatformService
configurationReadPlatformService;
+
+ @Autowired
+ public AccountNumberGenerator(final ConfigurationReadPlatformService
configurationReadPlatformService) {
+ this.configurationReadPlatformService =
configurationReadPlatformService;
+ }
public String generate(Client client, AccountNumberFormat
accountNumberFormat) {
Map<String, String> propertyMap = new HashMap<>();
@@ -81,7 +90,21 @@ public class AccountNumberGenerator {
}
private String generateAccountNumber(Map<String, String> propertyMap,
AccountNumberFormat accountNumberFormat) {
- String accountNumber = StringUtils.leftPad(propertyMap.get(ID),
AccountNumberGenerator.maxLength, '0');
+ int accountMaxLength = AccountNumberGenerator.maxLength;
+
+ // find if the custom length is defined
+ final GlobalConfigurationPropertyData customLength =
this.configurationReadPlatformService
+ .retrieveGlobalConfiguration("custom-account-number-length");
+
+ if (customLength.isEnabled()) {
+ // if it is enabled, and has the value, get it from the repository.
+ if (customLength.getValue() != null) {
+ accountMaxLength = customLength.getValue().intValue();
+ }
+
+ }
+
+ String accountNumber = StringUtils.leftPad(propertyMap.get(ID),
accountMaxLength, '0');
if (accountNumberFormat != null && accountNumberFormat.getPrefixEnum()
!= null) {
AccountNumberPrefixType accountNumberPrefixType =
AccountNumberPrefixType.fromInt(accountNumberFormat.getPrefixEnum());
String prefix = null;
diff --git
a/fineract-provider/src/main/resources/sql/migrations/core_db/V378__configuration_for_variable_length_acoountNumber.sql
b/fineract-provider/src/main/resources/sql/migrations/core_db/V378__configuration_for_variable_length_acoountNumber.sql
new file mode 100644
index 0000000..45bad58
--- /dev/null
+++
b/fineract-provider/src/main/resources/sql/migrations/core_db/V378__configuration_for_variable_length_acoountNumber.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied. See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+INSERT INTO c_configuration ( name, description) VALUES (
'custom-account-number-length', 'if enabled, the value if this configuration
will set accounnumber length');
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 04ecd27..99f08bf 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
@@ -89,9 +89,9 @@ public class GlobalConfigurationHelper {
ArrayList<HashMap> expectedGlobalConfigurations =
getAllDefaultGlobalConfigurations();
ArrayList<HashMap> actualGlobalConfigurations =
getAllGlobalConfigurations(requestSpec, responseSpec);
- // There are currently 35 global configurations.
- Assertions.assertEquals(35, expectedGlobalConfigurations.size());
- Assertions.assertEquals(35, actualGlobalConfigurations.size());
+ // There are currently 36 global configurations.
+ Assertions.assertEquals(36, expectedGlobalConfigurations.size());
+ Assertions.assertEquals(36, actualGlobalConfigurations.size());
for (int i = 0; i < expectedGlobalConfigurations.size(); i++) {
@@ -407,6 +407,14 @@ public class GlobalConfigurationHelper {
isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays.put("trapDoor",
false);
defaults.add(isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays);
+ HashMap<String, Object> isClientAccountNumberLengthModify = new
HashMap<>();
+ isClientAccountNumberLengthModify.put("id", 40);
+ isClientAccountNumberLengthModify.put("name",
"custom-account-number-length");
+ isClientAccountNumberLengthModify.put("value", 0);
+ isClientAccountNumberLengthModify.put("enabled", false);
+ isClientAccountNumberLengthModify.put("trapDoor", false);
+ defaults.add(isClientAccountNumberLengthModify);
+
return defaults;
}