Foo Developer created FINERACT-2703:
---------------------------------------
Summary: Client creation incorrectly requires/rejects "Datatables"
field regardless of whether a datatable check applies to the client's legal
form.
Key: FINERACT-2703
URL: https://issues.apache.org/jira/browse/FINERACT-2703
Project: Apache Fineract
Issue Type: Bug
Components: Client
Reporter: Foo Developer
When "Entity Datatable Checks" are configured for client creation restricted to
a specific legal-form sub-type (Person or Entity), client creation fails for
the other sub-type with the error "Datatable cannot be empty", even though no
datatable check actually applies to that sub-type.
h3. Steps to Reproduce
# Configure a Datatable linked to the Client entity, with Entity Sub-Type =
Person.
# Under Entity Data Table Checks, mark it as required at client creation
(status = CREATE).
# Attempt to create a client with Legal Form = Entity (non-person).
h3. Expected Behavior
The client should be created successfully — the Person-scoped datatable check
should not apply to an Entity client.
h3. Actual Behavior
Client creation fails with a validation error requiring a non-empty datatables
array, because:
# {{ClientDataValidator.validateForCreate(...)}} unconditionally requires the
{{datatables}} JSON array to be non-empty whenever the {{datatables}} parameter
is present in the request — it doesn't check whether any datatable check is
actually configured/required for the submitted legal form.
# Separately, {{EntityDatatableChecksWritePlatformServiceImpl}} looks up
required datatables via
{{{}entityDatatableChecksRepository.findByEntityAndStatusAndSubtype(entityName,
status, entitySubtype.toUpperCase()){}}}, but the stored subtype value is not
uppercase (e.g. {{{}"Person"{}}}, {{{}"Entity"{}}}), so this lookup can
silently return nothing when it shouldn't.
h3. Suggested Fix
* Remove the erroneous {{.toUpperCase()}} call so the subtype lookup matches
the stored value.
* In {{{}ClientDataValidator{}}}, only enforce the non-empty datatables array
requirement when at least one {{EntityDatatableChecks}} record is actually
configured (globally or for the client's specific legal-form subtype) for
{{{}CLIENT{}}}/{{{}CREATE{}}}.
h3. Affected Files
*
{{fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java}}
*
{{fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/EntityDatatableChecksWritePlatformServiceImpl.java}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)