FINERACT-1375:ClientPersonEntity

This commit is contained in:
rrpawar96
2022-01-06 06:29:29 +08:00
committed by Petri Tuomola
parent 83c83e1dd7
commit 4a4048561e
14 changed files with 101 additions and 46 deletions
@@ -46,11 +46,11 @@ public class DatatableCommandFromApiJsonDeserializer {
* The parameters supported for this command. * The parameters supported for this command.
*/ */
private final Set<String> supportedParametersForCreate = new HashSet<>( private final Set<String> supportedParametersForCreate = new HashSet<>(
Arrays.asList("datatableName", "apptableName", "multiRow", "columns")); Arrays.asList("datatableName", "entitySubType", "apptableName", "multiRow", "columns"));
private final Set<String> supportedParametersForCreateColumns = new HashSet<>( private final Set<String> supportedParametersForCreateColumns = new HashSet<>(
Arrays.asList("name", "type", "length", "mandatory", "code")); Arrays.asList("name", "type", "length", "mandatory", "code"));
private final Set<String> supportedParametersForUpdate = new HashSet<>( private final Set<String> supportedParametersForUpdate = new HashSet<>(
Arrays.asList("apptableName", "changeColumns", "addColumns", "dropColumns")); Arrays.asList("apptableName", "entitySubType", "changeColumns", "addColumns", "dropColumns"));
private final Set<String> supportedParametersForAddColumns = new HashSet<>( private final Set<String> supportedParametersForAddColumns = new HashSet<>(
Arrays.asList("name", "type", "length", "mandatory", "after", "code")); Arrays.asList("name", "type", "length", "mandatory", "after", "code"));
private final Set<String> supportedParametersForChangeColumns = new HashSet<>( private final Set<String> supportedParametersForChangeColumns = new HashSet<>(
@@ -122,6 +122,11 @@ public class DatatableCommandFromApiJsonDeserializer {
final String apptableName = this.fromApiJsonHelper.extractStringNamed("apptableName", element); final String apptableName = this.fromApiJsonHelper.extractStringNamed("apptableName", element);
baseDataValidator.reset().parameter("apptableName").value(apptableName).notBlank().notExceedingLengthOf(50) baseDataValidator.reset().parameter("apptableName").value(apptableName).notBlank().notExceedingLengthOf(50)
.isOneOfTheseValues(this.supportedApptableNames); .isOneOfTheseValues(this.supportedApptableNames);
if ("m_client".equals(apptableName)) {
String entitySubType = this.fromApiJsonHelper.extractStringNamed("entitySubType", element);
baseDataValidator.reset().parameter("entitySubType").value(entitySubType).notBlank(); // Person or Entity
}
final String fkColumnName = (apptableName != null) ? apptableName.substring(2) + "_id" : ""; final String fkColumnName = (apptableName != null) ? apptableName.substring(2) + "_id" : "";
final Boolean multiRow = this.fromApiJsonHelper.extractBooleanNamed("multiRow", element); final Boolean multiRow = this.fromApiJsonHelper.extractBooleanNamed("multiRow", element);
@@ -171,6 +176,12 @@ public class DatatableCommandFromApiJsonDeserializer {
final String apptableName = this.fromApiJsonHelper.extractStringNamed("apptableName", element); final String apptableName = this.fromApiJsonHelper.extractStringNamed("apptableName", element);
baseDataValidator.reset().parameter("apptableName").value(apptableName).ignoreIfNull().notBlank() baseDataValidator.reset().parameter("apptableName").value(apptableName).ignoreIfNull().notBlank()
.isOneOfTheseValues(this.supportedApptableNames); .isOneOfTheseValues(this.supportedApptableNames);
if ("m_client".equals(apptableName)) {
String entitySubType = this.fromApiJsonHelper.extractStringNamed("entitySubType", element);
baseDataValidator.reset().parameter("entitySubType").value(entitySubType).notBlank(); // Person or Entity
}
final String fkColumnName = (apptableName != null) ? apptableName.substring(2) + "_id" : ""; final String fkColumnName = (apptableName != null) ? apptableName.substring(2) + "_id" : "";
final JsonArray changeColumns = this.fromApiJsonHelper.extractJsonArrayNamed("changeColumns", element); final JsonArray changeColumns = this.fromApiJsonHelper.extractJsonArrayNamed("changeColumns", element);
@@ -31,17 +31,20 @@ public final class DatatableData implements Serializable {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String registeredTableName; private final String registeredTableName;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String entitySubType;
@SuppressWarnings("unused")
private final List<ResultsetColumnHeaderData> columnHeaderData; private final List<ResultsetColumnHeaderData> columnHeaderData;
public static DatatableData create(final String applicationTableName, final String registeredTableName, public static DatatableData create(final String applicationTableName, final String registeredTableName, final String entitySubType,
final List<ResultsetColumnHeaderData> columnHeaderData) { final List<ResultsetColumnHeaderData> columnHeaderData) {
return new DatatableData(applicationTableName, registeredTableName, columnHeaderData); return new DatatableData(applicationTableName, registeredTableName, entitySubType, columnHeaderData);
} }
private DatatableData(final String applicationTableName, final String registeredTableName, private DatatableData(final String applicationTableName, final String registeredTableName, final String entitySubType,
final List<ResultsetColumnHeaderData> columnHeaderData) { final List<ResultsetColumnHeaderData> columnHeaderData) {
this.applicationTableName = applicationTableName; this.applicationTableName = applicationTableName;
this.registeredTableName = registeredTableName; this.registeredTableName = registeredTableName;
this.entitySubType = entitySubType;
this.columnHeaderData = columnHeaderData; this.columnHeaderData = columnHeaderData;
} }
@@ -35,7 +35,7 @@ public interface ReadWriteNonCoreDataService {
void registerDatatable(JsonCommand command); void registerDatatable(JsonCommand command);
@PreAuthorize(value = "hasAnyAuthority('ALL_FUNCTIONS', 'REGISTER_DATATABLE')") @PreAuthorize(value = "hasAnyAuthority('ALL_FUNCTIONS', 'REGISTER_DATATABLE')")
void registerDatatable(String dataTableName, String applicationTableName); void registerDatatable(String dataTableName, String applicationTableName, String entitySubType);
@PreAuthorize(value = "hasAnyAuthority('ALL_FUNCTIONS', 'REGISTER_DATATABLE')") @PreAuthorize(value = "hasAnyAuthority('ALL_FUNCTIONS', 'REGISTER_DATATABLE')")
void registerDatatable(JsonCommand command, String permissionTable); void registerDatatable(JsonCommand command, String permissionTable);
@@ -149,8 +149,8 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
} }
// PERMITTED datatables // PERMITTED datatables
final String sql = "select application_table_name, registered_table_name" + " from x_registered_table " + " where exists" final String sql = "select application_table_name, registered_table_name, entity_subtype " + " from x_registered_table "
+ " (select 'f'" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id" + " where exists" + " (select 'f'" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id"
+ " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id" + " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id"
+ " where ur.appuser_id = " + this.context.authenticatedUser().getId() + " where ur.appuser_id = " + this.context.authenticatedUser().getId()
+ " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('READ_', registered_table_name))) " + " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('READ_', registered_table_name))) "
@@ -162,10 +162,11 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
while (rs.next()) { while (rs.next()) {
final String appTableName = rs.getString("application_table_name"); final String appTableName = rs.getString("application_table_name");
final String registeredDatatableName = rs.getString("registered_table_name"); final String registeredDatatableName = rs.getString("registered_table_name");
final String entitySubType = rs.getString("entity_subtype");
final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService
.fillResultsetColumnHeaders(registeredDatatableName); .fillResultsetColumnHeaders(registeredDatatableName);
datatables.add(DatatableData.create(appTableName, registeredDatatableName, columnHeaderData)); datatables.add(DatatableData.create(appTableName, registeredDatatableName, entitySubType, columnHeaderData));
} }
return datatables; return datatables;
@@ -176,8 +177,8 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
// PERMITTED datatables // PERMITTED datatables
SQLInjectionValidator.validateSQLInput(datatable); SQLInjectionValidator.validateSQLInput(datatable);
final String sql = "select application_table_name, registered_table_name" + " from x_registered_table " + " where exists" final String sql = "select application_table_name, registered_table_name, entity_subtype" + " from x_registered_table "
+ " (select 'f'" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id" + " where exists" + " (select 'f'" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id"
+ " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id" + " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id"
+ " where ur.appuser_id = " + this.context.authenticatedUser().getId() + " and registered_table_name='" + datatable + "'" + " where ur.appuser_id = " + this.context.authenticatedUser().getId() + " and registered_table_name='" + datatable + "'"
+ " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('READ_', registered_table_name))) " + " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('READ_', registered_table_name))) "
@@ -189,10 +190,11 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
while (rs.next()) { while (rs.next()) {
final String appTableName = rs.getString("application_table_name"); final String appTableName = rs.getString("application_table_name");
final String registeredDatatableName = rs.getString("registered_table_name"); final String registeredDatatableName = rs.getString("registered_table_name");
final String entitySubType = rs.getString("entity_subtype");
final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService
.fillResultsetColumnHeaders(registeredDatatableName); .fillResultsetColumnHeaders(registeredDatatableName);
datatableData = DatatableData.create(appTableName, registeredDatatableName, columnHeaderData); datatableData = DatatableData.create(appTableName, registeredDatatableName, entitySubType, columnHeaderData);
} }
return datatableData; return datatableData;
@@ -204,12 +206,12 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
@Transactional @Transactional
@Override @Override
public void registerDatatable(final String dataTableName, final String applicationTableName) { public void registerDatatable(final String dataTableName, final String applicationTableName, final String entitySubType) {
Integer category = DataTableApiConstant.CATEGORY_DEFAULT; Integer category = DataTableApiConstant.CATEGORY_DEFAULT;
final String permissionSql = this.getPermissionSql(dataTableName); final String permissionSql = this.getPermissionSql(dataTableName);
this.registerDataTable(applicationTableName, dataTableName, category, permissionSql); this.registerDataTable(applicationTableName, dataTableName, entitySubType, category, permissionSql);
} }
@@ -219,12 +221,13 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
final String applicationTableName = this.getTableName(command.getUrl()); final String applicationTableName = this.getTableName(command.getUrl());
final String dataTableName = this.getDataTableName(command.getUrl()); final String dataTableName = this.getDataTableName(command.getUrl());
final String entitySubType = command.stringValueOfParameterNamed("entitySubType");
Integer category = this.getCategory(command); Integer category = this.getCategory(command);
this.dataTableValidator.validateDataTableRegistration(command.json()); this.dataTableValidator.validateDataTableRegistration(command.json());
final String permissionSql = this.getPermissionSql(dataTableName); final String permissionSql = this.getPermissionSql(dataTableName);
this.registerDataTable(applicationTableName, dataTableName, category, permissionSql); this.registerDataTable(applicationTableName, dataTableName, entitySubType, category, permissionSql);
} }
@@ -233,27 +236,29 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
public void registerDatatable(final JsonCommand command, final String permissionSql) { public void registerDatatable(final JsonCommand command, final String permissionSql) {
final String applicationTableName = this.getTableName(command.getUrl()); final String applicationTableName = this.getTableName(command.getUrl());
final String dataTableName = this.getDataTableName(command.getUrl()); final String dataTableName = this.getDataTableName(command.getUrl());
final String entitySubType = command.stringValueOfParameterNamed("entitySubType");
Integer category = this.getCategory(command); Integer category = this.getCategory(command);
this.dataTableValidator.validateDataTableRegistration(command.json()); this.dataTableValidator.validateDataTableRegistration(command.json());
this.registerDataTable(applicationTableName, dataTableName, category, permissionSql); this.registerDataTable(applicationTableName, dataTableName, entitySubType, category, permissionSql);
} }
@Transactional @Transactional
private void registerDataTable(final String applicationTableName, final String dataTableName, final Integer category, private void registerDataTable(final String applicationTableName, final String dataTableName, final String entitySubType,
final String permissionsSql) { final Integer category, final String permissionsSql) {
validateAppTable(applicationTableName); validateAppTable(applicationTableName);
validateDatatableName(dataTableName); validateDatatableName(dataTableName);
assertDataTableExists(dataTableName); assertDataTableExists(dataTableName);
Map<String, Object> paramMap = new HashMap<>(3); Map<String, Object> paramMap = new HashMap<>(3);
final String registerDatatableSql = "insert into x_registered_table (registered_table_name, application_table_name,category) values ( :dataTableName, :applicationTableName, :category)"; final String registerDatatableSql = "insert into x_registered_table (registered_table_name, application_table_name, entity_subtype, category) values ( :dataTableName, :applicationTableName, :entitySubType ,:category)";
paramMap.put("dataTableName", dataTableName); paramMap.put("dataTableName", dataTableName);
paramMap.put("applicationTableName", applicationTableName); paramMap.put("applicationTableName", applicationTableName);
paramMap.put("entitySubType", entitySubType);
paramMap.put("category", category); paramMap.put("category", category);
try { try {
@@ -568,6 +573,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
final JsonElement element = this.fromJsonHelper.parse(command.json()); final JsonElement element = this.fromJsonHelper.parse(command.json());
final JsonArray columns = this.fromJsonHelper.extractJsonArrayNamed("columns", element); final JsonArray columns = this.fromJsonHelper.extractJsonArrayNamed("columns", element);
datatableName = this.fromJsonHelper.extractStringNamed("datatableName", element); datatableName = this.fromJsonHelper.extractStringNamed("datatableName", element);
String entitySubType = this.fromJsonHelper.extractStringNamed("entitySubType", element);
final String apptableName = this.fromJsonHelper.extractStringNamed("apptableName", element); final String apptableName = this.fromJsonHelper.extractStringNamed("apptableName", element);
Boolean multiRow = this.fromJsonHelper.extractBooleanNamed("multiRow", element); Boolean multiRow = this.fromJsonHelper.extractBooleanNamed("multiRow", element);
@@ -623,7 +629,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
sqlBuilder = sqlBuilder.append(") ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;"); sqlBuilder = sqlBuilder.append(") ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;");
this.jdbcTemplate.execute(sqlBuilder.toString()); this.jdbcTemplate.execute(sqlBuilder.toString());
registerDatatable(datatableName, apptableName); registerDatatable(datatableName, apptableName, entitySubType);
registerColumnCodeMapping(codeMappings); registerColumnCodeMapping(codeMappings);
} catch (final JpaSystemException | DataIntegrityViolationException e) { } catch (final JpaSystemException | DataIntegrityViolationException e) {
final Throwable realCause = e.getCause(); final Throwable realCause = e.getCause();
@@ -888,6 +894,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
final JsonArray addColumns = this.fromJsonHelper.extractJsonArrayNamed("addColumns", element); final JsonArray addColumns = this.fromJsonHelper.extractJsonArrayNamed("addColumns", element);
final JsonArray dropColumns = this.fromJsonHelper.extractJsonArrayNamed("dropColumns", element); final JsonArray dropColumns = this.fromJsonHelper.extractJsonArrayNamed("dropColumns", element);
final String apptableName = this.fromJsonHelper.extractStringNamed("apptableName", element); final String apptableName = this.fromJsonHelper.extractStringNamed("apptableName", element);
final String entitySubType = this.fromJsonHelper.extractStringNamed("entitySubType", element);
validateDatatableName(datatableName); validateDatatableName(datatableName);
int rowCount = getRowCount(datatableName); int rowCount = getRowCount(datatableName);
@@ -899,6 +906,12 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
final boolean isConstraintApproach = this.configurationDomainService.isConstraintApproachEnabledForDatatables(); final boolean isConstraintApproach = this.configurationDomainService.isConstraintApproachEnabledForDatatables();
if (!StringUtils.isBlank(entitySubType)) {
String updateLegalFormSQL = "update `x_registered_table` SET `entity_subtype`='" + entitySubType
+ "' WHERE registered_table_name = '" + datatableName + "'";
this.jdbcTemplate.execute(updateLegalFormSQL);
}
if (!StringUtils.isBlank(apptableName)) { if (!StringUtils.isBlank(apptableName)) {
validateAppTable(apptableName); validateAppTable(apptableName);
@@ -929,7 +942,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
this.jdbcTemplate.execute(sqlBuilder.toString()); this.jdbcTemplate.execute(sqlBuilder.toString());
deregisterDatatable(datatableName); deregisterDatatable(datatableName);
registerDatatable(datatableName, apptableName); registerDatatable(datatableName, apptableName, entitySubType);
} }
} }
@@ -72,12 +72,13 @@ public class ReadSurveyServiceImpl implements ReadSurveyService {
while (rs.next()) { while (rs.next()) {
final String appTableName = rs.getString("application_table_name"); final String appTableName = rs.getString("application_table_name");
final String registeredDatatableName = rs.getString("registered_table_name"); final String registeredDatatableName = rs.getString("registered_table_name");
final String entitySubType = rs.getString("entity_subtype");
final boolean enabled = rs.getBoolean("enabled"); final boolean enabled = rs.getBoolean("enabled");
final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService
.fillResultsetColumnHeaders(registeredDatatableName); .fillResultsetColumnHeaders(registeredDatatableName);
surveyDataTables.add( surveyDataTables.add(SurveyDataTableData
SurveyDataTableData.create(DatatableData.create(appTableName, registeredDatatableName, columnHeaderData), enabled)); .create(DatatableData.create(appTableName, registeredDatatableName, entitySubType, columnHeaderData), enabled));
} }
return surveyDataTables; return surveyDataTables;
@@ -85,7 +86,7 @@ public class ReadSurveyServiceImpl implements ReadSurveyService {
private String retrieveAllSurveySQL(String andClause) { private String retrieveAllSurveySQL(String andClause) {
// PERMITTED datatables // PERMITTED datatables
return "select application_table_name, cf.enabled, registered_table_name" + " from x_registered_table " return "select application_table_name, cf.enabled, registered_table_name, entity_subtype" + " from x_registered_table "
+ " left join c_configuration cf on x_registered_table.registered_table_name = cf.name " + " where exists" + " (select 'f'" + " left join c_configuration cf on x_registered_table.registered_table_name = cf.name " + " where exists" + " (select 'f'"
+ " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id"
+ " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id" + " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id"
@@ -98,7 +99,7 @@ public class ReadSurveyServiceImpl implements ReadSurveyService {
@Override @Override
public SurveyDataTableData retrieveSurvey(String surveyName) { public SurveyDataTableData retrieveSurvey(String surveyName) {
SQLInjectionValidator.validateSQLInput(surveyName); SQLInjectionValidator.validateSQLInput(surveyName);
final String sql = "select cf.enabled, application_table_name, registered_table_name" + " from x_registered_table " final String sql = "select cf.enabled, application_table_name, registered_table_name, entity_subtype" + " from x_registered_table "
+ " left join c_configuration cf on x_registered_table.registered_table_name = cf.name " + " where exists" + " (select 'f'" + " left join c_configuration cf on x_registered_table.registered_table_name = cf.name " + " where exists" + " (select 'f'"
+ " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id"
+ " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id" + " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id"
@@ -112,12 +113,13 @@ public class ReadSurveyServiceImpl implements ReadSurveyService {
while (rs.next()) { while (rs.next()) {
final String appTableName = rs.getString("application_table_name"); final String appTableName = rs.getString("application_table_name");
final String registeredDatatableName = rs.getString("registered_table_name"); final String registeredDatatableName = rs.getString("registered_table_name");
final String entitySubType = rs.getString("entity_subtype");
final boolean enabled = rs.getBoolean("enabled"); final boolean enabled = rs.getBoolean("enabled");
final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService final List<ResultsetColumnHeaderData> columnHeaderData = this.genericDataService
.fillResultsetColumnHeaders(registeredDatatableName); .fillResultsetColumnHeaders(registeredDatatableName);
datatableData = SurveyDataTableData.create(DatatableData.create(appTableName, registeredDatatableName, columnHeaderData), datatableData = SurveyDataTableData
enabled); .create(DatatableData.create(appTableName, registeredDatatableName, entitySubType, columnHeaderData), enabled);
} }
@@ -268,6 +268,8 @@ final class ClientsApiResourceSwagger {
@Schema(example = "1") @Schema(example = "1")
public Integer officeId; public Integer officeId;
@Schema(example = "1")
public Integer legalFormId;
@Schema(example = "Client of group") @Schema(example = "Client of group")
public String fullname; public String fullname;
@Schema(example = "1") @Schema(example = "1")
@@ -211,12 +211,8 @@ public final class ClientDataValidator {
.integerGreaterThanZero(); .integerGreaterThanZero();
} }
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.legalFormIdParamName, element)) { final Integer legalFormId = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.legalFormIdParamName, element);
final Integer legalFormId = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.legalFormIdParamName, baseDataValidator.reset().parameter(ClientApiConstants.legalFormIdParamName).value(legalFormId).notNull().inMinMaxRange(1, 2);
element);
baseDataValidator.reset().parameter(ClientApiConstants.legalFormIdParamName).value(legalFormId).ignoreIfNull().inMinMaxRange(1,
2);
}
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.datatables, element)) { if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.datatables, element)) {
final JsonArray datatables = this.fromApiJsonHelper.extractJsonArrayNamed(ClientApiConstants.datatables, element); final JsonArray datatables = this.fromApiJsonHelper.extractJsonArrayNamed(ClientApiConstants.datatables, element);
@@ -508,8 +504,7 @@ public final class ClientDataValidator {
atLeastOneParameterPassedForUpdate = true; atLeastOneParameterPassedForUpdate = true;
final Integer legalFormId = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.legalFormIdParamName, final Integer legalFormId = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.legalFormIdParamName,
element); element);
baseDataValidator.reset().parameter(ClientApiConstants.legalFormIdParamName).value(legalFormId).ignoreIfNull().inMinMaxRange(1, baseDataValidator.reset().parameter(ClientApiConstants.legalFormIdParamName).value(legalFormId).notNull().inMinMaxRange(1, 2);
2);
} }
if (this.fromApiJsonHelper.parameterExists("isStaff", element)) { if (this.fromApiJsonHelper.parameterExists("isStaff", element)) {
@@ -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.
--
ALTER TABLE `x_registered_table` ADD COLUMN `entity_subtype` VARCHAR(50) NULL AFTER `application_table_name`;
@@ -99,12 +99,13 @@ public class LoanImportHandlerTest {
String lastName = Utils.randomNameGenerator("Client_LastName_", 4); String lastName = Utils.randomNameGenerator("Client_LastName_", 4);
String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
final HashMap<String, String> clientMap = new HashMap<>(); final HashMap<String, Object> clientMap = new HashMap<>();
clientMap.put("officeId", outcome_office_creation.toString()); clientMap.put("officeId", outcome_office_creation.toString());
clientMap.put("firstname", firstName); clientMap.put("firstname", firstName);
clientMap.put("lastname", lastName); clientMap.put("lastname", lastName);
clientMap.put("externalId", externalId); clientMap.put("externalId", externalId);
clientMap.put("dateFormat", DATE_FORMAT); clientMap.put("dateFormat", DATE_FORMAT);
clientMap.put("legalFormId", 1);
clientMap.put("locale", "en"); clientMap.put("locale", "en");
clientMap.put("active", "true"); clientMap.put("active", "true");
clientMap.put("activationDate", "04 March 2011"); clientMap.put("activationDate", "04 March 2011");
@@ -89,8 +89,9 @@ public class SavingsImportHandlerTest {
String lastName = Utils.randomNameGenerator("Client_LastName_", 4); String lastName = Utils.randomNameGenerator("Client_LastName_", 4);
String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
final HashMap<String, String> clientMap = new HashMap<>(); final HashMap<String, Object> clientMap = new HashMap<>();
clientMap.put("officeId", outcome_office_creation.toString()); clientMap.put("officeId", outcome_office_creation.toString());
clientMap.put("legalFormId", 1);
clientMap.put("firstname", firstName); clientMap.put("firstname", firstName);
clientMap.put("lastname", lastName); clientMap.put("lastname", lastName);
clientMap.put("externalId", externalId); clientMap.put("externalId", externalId);
@@ -55,8 +55,8 @@ public class ClientTest extends IntegrationTest {
// TODO activationDate() why String? https://issues.apache.org/jira/browse/FINERACT-1232 // TODO activationDate() why String? https://issues.apache.org/jira/browse/FINERACT-1232
// TODO why dateFormat and locale required even when no activationDate?! // TODO why dateFormat and locale required even when no activationDate?!
// https://issues.apache.org/jira/browse/FINERACT-1233 // https://issues.apache.org/jira/browse/FINERACT-1233
return (long) ok(fineract().clients return (long) ok(fineract().clients.create6(
.create6(new PostClientsRequest().officeId(1).fullname("TestClient").dateFormat(dateFormat()).locale("en_US"))) new PostClientsRequest().legalFormId(1).officeId(1).fullname("TestClient").dateFormat(dateFormat()).locale("en_US")))
.getClientId(); .getClientId();
} }
@@ -156,8 +156,9 @@ public final class BatchHelper {
extId = externalId; extId = externalId;
} }
final String body = "{ \"officeId\": 1, \"firstname\": \"Petra\", \"lastname\": \"Yton\"," + "\"externalId\": " + extId final String body = "{ \"officeId\": 1, \"legalFormId\":1, \"firstname\": \"Petra\", \"lastname\": \"Yton\"," + "\"externalId\": "
+ ", \"dateFormat\": \"dd MMMM yyyy\", \"locale\": \"en\"," + "\"active\": false, \"submittedOnDate\": \"04 March 2009\"}"; + extId + ", \"dateFormat\": \"dd MMMM yyyy\", \"locale\": \"en\","
+ "\"active\": false, \"submittedOnDate\": \"04 March 2009\"}";
br.setBody(body); br.setBody(body);
@@ -186,8 +187,8 @@ public final class BatchHelper {
extId = externalId; extId = externalId;
} }
final String body = "{ \"officeId\": 1, \"firstname\": \"Petra\", \"lastname\": \"Yton\"," + "\"externalId\": \"" + externalId final String body = "{ \"officeId\": 1, \"legalFormId\":1, \"firstname\": \"Petra\", \"lastname\": \"Yton\"," + "\"externalId\": \""
+ "\", \"dateFormat\": \"dd MMMM yyyy\", \"locale\": \"en\"," + externalId + "\", \"dateFormat\": \"dd MMMM yyyy\", \"locale\": \"en\","
+ "\"active\": true, \"activationDate\": \"04 March 2010\", \"submittedOnDate\": \"04 March 2010\"}"; + "\"active\": true, \"activationDate\": \"04 March 2010\", \"submittedOnDate\": \"04 March 2010\"}";
br.setBody(body); br.setBody(body);
@@ -55,6 +55,7 @@ public class ClientHelper {
private static final String WITHDRAW_CLIENT_COMMAND = "withdraw"; private static final String WITHDRAW_CLIENT_COMMAND = "withdraw";
private static final String UNDOREJECT_CLIENT_COMMAND = "undoRejection"; private static final String UNDOREJECT_CLIENT_COMMAND = "undoRejection";
private static final String UNDOWITHDRAWN_CLIENT_COMMAND = "undoWithdrawal"; private static final String UNDOWITHDRAWN_CLIENT_COMMAND = "undoWithdrawal";
private static final Integer LEGALFORM_ID_PERSON = 1;
public static final String CREATED_DATE = "27 November 2014"; public static final String CREATED_DATE = "27 November 2014";
public static final String CREATED_DATE_PLUS_ONE = "28 November 2014"; public static final String CREATED_DATE_PLUS_ONE = "28 November 2014";
@@ -181,8 +182,9 @@ public class ClientHelper {
} }
public static String getTestClientAsJSON(final String dateOfJoining, final String officeId) { public static String getTestClientAsJSON(final String dateOfJoining, final String officeId) {
final HashMap<String, String> map = new HashMap<>(); final HashMap<String, Object> map = new HashMap<>();
map.put("officeId", officeId); map.put("officeId", officeId);
map.put("legalFormId", LEGALFORM_ID_PERSON);
map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5)); map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5));
map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4)); map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4));
map.put("externalId", randomIDGenerator("ID_", 7)); map.put("externalId", randomIDGenerator("ID_", 7));
@@ -195,8 +197,9 @@ public class ClientHelper {
} }
public static String getTestClientAsJSONPending(final String submittedOnDate, final String officeId) { public static String getTestClientAsJSONPending(final String submittedOnDate, final String officeId) {
final HashMap<String, String> map = new HashMap<>(); final HashMap<String, Object> map = new HashMap<>();
map.put("officeId", officeId); map.put("officeId", officeId);
map.put("legalFormId", LEGALFORM_ID_PERSON);
map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5)); map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5));
map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4)); map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4));
map.put("externalId", randomIDGenerator("ID_", 7)); map.put("externalId", randomIDGenerator("ID_", 7));
@@ -211,6 +214,7 @@ public class ClientHelper {
public static String getTestPendingClientWithDatatableAsJson(final String registeredTableName) { public static String getTestPendingClientWithDatatableAsJson(final String registeredTableName) {
final HashMap<String, Object> map = new HashMap<>(); final HashMap<String, Object> map = new HashMap<>();
map.put("officeId", "1"); map.put("officeId", "1");
map.put("legalFormId", LEGALFORM_ID_PERSON);
map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5)); map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5));
map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4)); map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4));
map.put("externalId", randomIDGenerator("ID_", 7)); map.put("externalId", randomIDGenerator("ID_", 7));
@@ -276,8 +280,9 @@ public class ClientHelper {
} }
public static String getTestClientWithClientTypeAsJSON(final String dateOfJoining, final String officeId, final String clientType) { public static String getTestClientWithClientTypeAsJSON(final String dateOfJoining, final String officeId, final String clientType) {
final HashMap<String, String> map = new HashMap<>(); final HashMap<String, Object> map = new HashMap<>();
map.put("officeId", officeId); map.put("officeId", officeId);
map.put("legalFormId", LEGALFORM_ID_PERSON);
map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5)); map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5));
map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4)); map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4));
map.put("externalId", randomIDGenerator("ID_", 7)); map.put("externalId", randomIDGenerator("ID_", 7));
@@ -72,6 +72,7 @@ public class DatatableHelper {
final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>(); final List<HashMap<String, Object>> datatableColumnsList = new ArrayList<>();
map.put("datatableName", Utils.randomNameGenerator(apptableName + "_", 5)); map.put("datatableName", Utils.randomNameGenerator(apptableName + "_", 5));
map.put("apptableName", apptableName); map.put("apptableName", apptableName);
map.put("entitySubType", "PERSON");
map.put("multiRow", multiRow); map.put("multiRow", multiRow);
addDatatableColumns(datatableColumnsList, "Spouse Name", "String", true, 25); addDatatableColumns(datatableColumnsList, "Spouse Name", "String", true, 25);
addDatatableColumns(datatableColumnsList, "Number of Dependents", "Number", true, null); addDatatableColumns(datatableColumnsList, "Number of Dependents", "Number", true, null);