This is an automated email from the ASF dual-hosted git repository.

adamsaghy 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 fadfcd68e FINERACT-1929: Allow the length of client name to be 160 
chars
fadfcd68e is described below

commit fadfcd68e2905244860341a4200e2ac57fcd609f
Author: jmarta <[email protected]>
AuthorDate: Tue Oct 10 02:45:21 2023 +0200

    FINERACT-1929: Allow the length of client name to be 160 chars
---
 .../fineract/portfolio/client/domain/Client.java   | 49 ++++++++++------------
 .../client/api/ClientsApiResourceSwagger.java      |  2 +
 .../portfolio/client/data/ClientDataValidator.java |  2 +-
 .../db/changelog/tenant/changelog-tenant.xml       |  1 +
 .../tenant/parts/0127_client_name_length.xml       | 29 +++++++++++++
 .../fineract/integrationtests/ClientTest.java      | 33 +++++++++++++++
 6 files changed, 89 insertions(+), 27 deletions(-)

diff --git 
a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
 
b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
index c499ecde6..ad216bdd8 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
@@ -100,10 +100,10 @@ public class Client extends 
AbstractAuditableWithUTCDateTimeCustom {
     @Column(name = "lastname", length = 50)
     private String lastname;
 
-    @Column(name = "fullname", length = 100)
+    @Column(name = "fullname", length = 160)
     private String fullname;
 
-    @Column(name = "display_name", length = 100, nullable = false)
+    @Column(name = "display_name", length = 160, nullable = false)
     private String displayName;
 
     @Column(name = "mobile_no", length = 50, unique = true)
@@ -493,32 +493,29 @@ public class Client extends 
AbstractAuditableWithUTCDateTimeCustom {
     }
 
     public void deriveDisplayName() {
-
-        StringBuilder nameBuilder = new StringBuilder();
-        Integer legalForm = this.getLegalForm();
-        if (legalForm == null || LegalForm.fromInt(legalForm).isPerson()) {
-            if (StringUtils.isNotBlank(this.firstname)) {
-                nameBuilder.append(this.firstname).append(' ');
-            }
-
-            if (StringUtils.isNotBlank(this.middlename)) {
-                nameBuilder.append(this.middlename).append(' ');
-            }
-
-            if (StringUtils.isNotBlank(this.lastname)) {
-                nameBuilder.append(this.lastname);
-            }
-
-            if (StringUtils.isNotBlank(this.fullname)) {
-                nameBuilder = new StringBuilder(this.fullname);
-            }
-        } else if (LegalForm.fromInt(legalForm).isEntity()) {
-            if (StringUtils.isNotBlank(this.fullname)) {
-                nameBuilder = new StringBuilder(this.fullname);
+        if (StringUtils.isNotBlank(this.fullname)) {
+            this.displayName = this.fullname;
+        } else {
+            StringBuilder nameBuilder = new StringBuilder();
+            if (legalForm == null || LegalForm.fromInt(legalForm).isPerson()) {
+                if (StringUtils.isNotBlank(this.firstname)) {
+                    nameBuilder.append(this.firstname);
+                }
+                if (StringUtils.isNotBlank(this.middlename)) {
+                    if (!nameBuilder.isEmpty()) {
+                        nameBuilder.append(' ');
+                    }
+                    nameBuilder.append(this.middlename);
+                }
+                if (StringUtils.isNotBlank(this.lastname)) {
+                    if (!nameBuilder.isEmpty()) {
+                        nameBuilder.append(' ');
+                    }
+                    nameBuilder.append(this.lastname);
+                }
             }
+            this.displayName = nameBuilder.toString();
         }
-
-        this.displayName = nameBuilder.toString();
     }
 
     public LocalDate getActivationLocalDate() {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java
index 017837f40..7766ef070 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java
@@ -304,6 +304,8 @@ final class ClientsApiResourceSwagger {
         public String fullname;
         @Schema(example = "Client_FirstName")
         public String firstname;
+        @Schema(example = "Client_MiddleName")
+        public String middlename;
         @Schema(example = "123")
         public String externalId;
         @Schema(example = "Client_LastName")
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java
index bbbe4ee7e..f8a5b9274 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java
@@ -318,7 +318,7 @@ public final class ClientDataValidator {
 
     private void fullnameCannotBeBlank(final JsonElement element, final 
DataValidatorBuilder baseDataValidator) {
         final String fullnameParam = 
this.fromApiJsonHelper.extractStringNamed(ClientApiConstants.fullnameParamName, 
element);
-        
baseDataValidator.reset().parameter(ClientApiConstants.fullnameParamName).value(fullnameParam).notBlank().notExceedingLengthOf(100);
+        
baseDataValidator.reset().parameter(ClientApiConstants.fullnameParamName).value(fullnameParam).notBlank().notExceedingLengthOf(160);
     }
 
     private boolean isIndividualNamePartParameterPassed(final JsonElement 
element) {
diff --git 
a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml 
b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
index 849dcb903..51f316ece 100644
--- 
a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
+++ 
b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
@@ -146,4 +146,5 @@
     <include 
file="parts/0124_transaction_summary_with_asset_owner_report_typo_fix_3.xml" 
relativeToChangelogFile="true" />
     <include 
file="parts/0125_transaction_summary_with_asset_owner_report_chargeoff_reason.xml"
 relativeToChangelogFile="true" />
     <include 
file="parts/0126_add_loan_product_installment_level_delinquency.xml" 
relativeToChangelogFile="true" />
+    <include file="parts/0127_client_name_length.xml" 
relativeToChangelogFile="true" />
 </databaseChangeLog>
diff --git 
a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0127_client_name_length.xml
 
b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0127_client_name_length.xml
new file mode 100644
index 000000000..c432f78d2
--- /dev/null
+++ 
b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0127_client_name_length.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog";
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+                   
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd";>
+    <changeSet id="1" author="fineract">
+        <modifyDataType tableName="m_client" columnName="fullname" 
newDataType="VARCHAR(160)" />
+        <modifyDataType tableName="m_client" columnName="display_name" 
newDataType="VARCHAR(160)" />
+    </changeSet>
+</databaseChangeLog>
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientTest.java
index e5ffeab2a..96ad52d64 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientTest.java
@@ -19,7 +19,11 @@
 package org.apache.fineract.integrationtests;
 
 import static 
org.apache.fineract.integrationtests.client.IntegrationTest.assertThat;
+import static 
org.apache.fineract.integrationtests.common.ClientHelper.DEFAULT_DATE;
+import static 
org.apache.fineract.integrationtests.common.ClientHelper.LEGALFORM_ID_PERSON;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.restassured.builder.RequestSpecBuilder;
@@ -30,8 +34,10 @@ import io.restassured.specification.ResponseSpecification;
 import java.security.SecureRandom;
 import java.util.HashMap;
 import java.util.List;
+import java.util.UUID;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.fineract.client.models.GetClientClientIdAddressesResponse;
+import org.apache.fineract.client.models.GetClientsClientIdResponse;
 import org.apache.fineract.client.models.GlobalConfigurationPropertyData;
 import org.apache.fineract.client.models.PostClientClientIdAddressesRequest;
 import org.apache.fineract.client.models.PostClientClientIdAddressesResponse;
@@ -263,4 +269,31 @@ public class ClientTest {
         assertThat(addressResponse.getPostalCode()).isEqualTo(postalCode);
     }
 
+    @Test
+    public void testClientName() {
+        String firstName = Utils.randomStringGenerator("FN", 48);
+        String middleName = Utils.randomStringGenerator("MN", 48);
+        String lastName = Utils.randomStringGenerator("LN", 48);
+        String fullName = firstName + ' ' + middleName + ' ' + lastName;
+
+        PostClientsRequest request = new 
PostClientsRequest().officeId(1).legalFormId(LEGALFORM_ID_PERSON).firstname(firstName)
+                
.middlename(middleName).lastname(lastName).externalId(UUID.randomUUID().toString()).dateFormat(Utils.DATE_FORMAT)
+                .locale("en").active(true).activationDate(DEFAULT_DATE);
+        Integer clientId = ClientHelper.createClient(requestSpec, 
responseSpec, request);
+        assertNotNull(clientId);
+
+        GetClientsClientIdResponse client = 
ClientHelper.getClient(requestSpec, responseSpec, clientId);
+        assertNotNull(client);
+        assertEquals(fullName, client.getDisplayName());
+
+        request = new 
PostClientsRequest().officeId(1).legalFormId(LEGALFORM_ID_PERSON).fullname(fullName)
+                
.externalId(UUID.randomUUID().toString()).dateFormat(Utils.DATE_FORMAT).locale("en").active(true)
+                .activationDate(DEFAULT_DATE);
+        clientId = ClientHelper.createClient(requestSpec, responseSpec, 
request);
+        assertNotNull(clientId);
+
+        client = ClientHelper.getClient(requestSpec, responseSpec, clientId);
+        assertNotNull(client);
+        assertEquals(fullName, client.getDisplayName());
+    }
 }

Reply via email to