FINERACT-2282: Support Client filtering by legal form
This commit is contained in:
+13
@@ -56,6 +56,7 @@ public class SearchParameters {
|
|||||||
private Long categoryId;
|
private Long categoryId;
|
||||||
@Getter(AccessLevel.NONE)
|
@Getter(AccessLevel.NONE)
|
||||||
private Boolean isSelfUser;
|
private Boolean isSelfUser;
|
||||||
|
private Integer legalForm;
|
||||||
|
|
||||||
public Integer getLimit() {
|
public Integer getLimit() {
|
||||||
if (limit == null) {
|
if (limit == null) {
|
||||||
@@ -128,4 +129,16 @@ public class SearchParameters {
|
|||||||
public boolean hasCategoryId() {
|
public boolean hasCategoryId() {
|
||||||
return this.categoryId != null && this.categoryId != 0;
|
return this.categoryId != null && this.categoryId != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPerson() {
|
||||||
|
return this.legalForm != null && this.legalForm == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEntity() {
|
||||||
|
return this.legalForm != null && this.legalForm == 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasLegalForm() {
|
||||||
|
return this.legalForm != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -197,7 +197,7 @@ public class ClientApiConstants {
|
|||||||
officeNameParamName, transferToOfficeIdParamName, transferToOfficeNameParamName, hierarchyParamName, imageIdParamName,
|
officeNameParamName, transferToOfficeIdParamName, transferToOfficeNameParamName, hierarchyParamName, imageIdParamName,
|
||||||
imagePresentParamName, staffIdParamName, staffNameParamName, timelineParamName, groupsParamName, officeOptionsParamName,
|
imagePresentParamName, staffIdParamName, staffNameParamName, timelineParamName, groupsParamName, officeOptionsParamName,
|
||||||
staffOptionsParamName, dateOfBirthParamName, genderParamName, clientTypeParamName, clientClassificationParamName,
|
staffOptionsParamName, dateOfBirthParamName, genderParamName, clientTypeParamName, clientClassificationParamName,
|
||||||
legalFormParamName, clientNonPersonDetailsParamName, isStaffParamName));
|
legalFormParamName, clientNonPersonDetailsParamName, isStaffParamName, legalFormParamName));
|
||||||
|
|
||||||
protected static final Set<String> CLIENT_CHARGES_RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList(chargeIdParamName,
|
protected static final Set<String> CLIENT_CHARGES_RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList(chargeIdParamName,
|
||||||
clientIdParamName, chargeNameParamName, penaltyParamName, chargeTimeTypeParamName, dueAsOfDateParamName,
|
clientIdParamName, chargeNameParamName, penaltyParamName, chargeTimeTypeParamName, dueAsOfDateParamName,
|
||||||
|
|||||||
+8
-6
@@ -151,10 +151,11 @@ public class ClientsApiResource {
|
|||||||
@QueryParam("limit") @Parameter(description = "limit") final Integer limit,
|
@QueryParam("limit") @Parameter(description = "limit") final Integer limit,
|
||||||
@QueryParam("orderBy") @Parameter(description = "orderBy") final String orderBy,
|
@QueryParam("orderBy") @Parameter(description = "orderBy") final String orderBy,
|
||||||
@QueryParam("sortOrder") @Parameter(description = "sortOrder") final String sortOrder,
|
@QueryParam("sortOrder") @Parameter(description = "sortOrder") final String sortOrder,
|
||||||
@QueryParam("orphansOnly") @Parameter(description = "orphansOnly") final Boolean orphansOnly) {
|
@QueryParam("orphansOnly") @Parameter(description = "orphansOnly") final Boolean orphansOnly,
|
||||||
|
@QueryParam("legalForm") final Integer legalForm) {
|
||||||
|
|
||||||
return retrieveAll(uriInfo, officeId, externalId, displayName, firstname, lastname, status, hierarchy, offset, limit, orderBy,
|
return retrieveAll(uriInfo, officeId, externalId, displayName, firstname, lastname, status, legalForm, hierarchy, offset, limit,
|
||||||
sortOrder, orphansOnly, false);
|
orderBy, sortOrder, orphansOnly, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@@ -442,8 +443,9 @@ public class ClientsApiResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String retrieveAll(final UriInfo uriInfo, final Long officeId, final String externalId, final String displayName,
|
public String retrieveAll(final UriInfo uriInfo, final Long officeId, final String externalId, final String displayName,
|
||||||
final String firstname, final String lastname, final String status, final String hierarchy, final Integer offset,
|
final String firstname, final String lastname, final String status, final Integer legalForm, final String hierarchy,
|
||||||
final Integer limit, final String orderBy, final String sortOrder, final Boolean orphansOnly, final boolean isSelfUser) {
|
final Integer offset, final Integer limit, final String orderBy, final String sortOrder, final Boolean orphansOnly,
|
||||||
|
final boolean isSelfUser) {
|
||||||
context.authenticatedUser().validateHasReadPermission(ClientApiConstants.CLIENT_RESOURCE_NAME);
|
context.authenticatedUser().validateHasReadPermission(ClientApiConstants.CLIENT_RESOURCE_NAME);
|
||||||
sqlValidator.validate(orderBy);
|
sqlValidator.validate(orderBy);
|
||||||
sqlValidator.validate(sortOrder);
|
sqlValidator.validate(sortOrder);
|
||||||
@@ -451,7 +453,7 @@ public class ClientsApiResource {
|
|||||||
sqlValidator.validate(hierarchy);
|
sqlValidator.validate(hierarchy);
|
||||||
final SearchParameters searchParameters = SearchParameters.builder().limit(limit).officeId(officeId).externalId(externalId)
|
final SearchParameters searchParameters = SearchParameters.builder().limit(limit).officeId(officeId).externalId(externalId)
|
||||||
.name(displayName).hierarchy(hierarchy).firstname(firstname).lastname(lastname).status(status).orphansOnly(orphansOnly)
|
.name(displayName).hierarchy(hierarchy).firstname(firstname).lastname(lastname).status(status).orphansOnly(orphansOnly)
|
||||||
.isSelfUser(isSelfUser).offset(offset).orderBy(orderBy).sortOrder(sortOrder).build();
|
.isSelfUser(isSelfUser).offset(offset).orderBy(orderBy).sortOrder(sortOrder).legalForm(legalForm).build();
|
||||||
final Page<ClientData> clientData = clientReadPlatformService.retrieveAll(searchParameters);
|
final Page<ClientData> clientData = clientReadPlatformService.retrieveAll(searchParameters);
|
||||||
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
return toApiJsonSerializer.serialize(settings, clientData, ClientApiConstants.CLIENT_RESPONSE_DATA_PARAMETERS);
|
return toApiJsonSerializer.serialize(settings, clientData, ClientApiConstants.CLIENT_RESPONSE_DATA_PARAMETERS);
|
||||||
|
|||||||
+1
-1
@@ -168,7 +168,7 @@ final class ClientsApiResourceSwagger {
|
|||||||
|
|
||||||
@Schema(example = "2")
|
@Schema(example = "2")
|
||||||
public Integer totalFilteredRecords;
|
public Integer totalFilteredRecords;
|
||||||
public Set<GetClientsPageItemsResponse> pageItems;
|
public List<GetClientsPageItemsResponse> pageItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Schema(description = "GetClientsClientIdResponse")
|
@Schema(description = "GetClientsClientIdResponse")
|
||||||
|
|||||||
+5
@@ -195,6 +195,11 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
|
|||||||
extraCriteria += " and c.id NOT IN (select client_id from m_group_client) ";
|
extraCriteria += " and c.id NOT IN (select client_id from m_group_client) ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (searchParameters.hasLegalForm()) {
|
||||||
|
paramList.add(searchParameters.getLegalForm());
|
||||||
|
extraCriteria += " and c.legal_form_enum = ? ";
|
||||||
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(extraCriteria)) {
|
if (StringUtils.isNotBlank(extraCriteria)) {
|
||||||
extraCriteria = extraCriteria.substring(4);
|
extraCriteria = extraCriteria.substring(4);
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -89,14 +89,15 @@ public class SelfClientsApiResource {
|
|||||||
@QueryParam("status") @Parameter(description = "status") final String status,
|
@QueryParam("status") @Parameter(description = "status") final String status,
|
||||||
@QueryParam("limit") @Parameter(description = "limit") final Integer limit,
|
@QueryParam("limit") @Parameter(description = "limit") final Integer limit,
|
||||||
@QueryParam("orderBy") @Parameter(description = "orderBy") final String orderBy,
|
@QueryParam("orderBy") @Parameter(description = "orderBy") final String orderBy,
|
||||||
@QueryParam("sortOrder") @Parameter(description = "sortOrder") final String sortOrder) {
|
@QueryParam("sortOrder") @Parameter(description = "sortOrder") final String sortOrder,
|
||||||
|
@QueryParam("legalForm") final Integer legalForm) {
|
||||||
|
|
||||||
final Long officeId = null;
|
final Long officeId = null;
|
||||||
final String externalId = null;
|
final String externalId = null;
|
||||||
final String hierarchy = null;
|
final String hierarchy = null;
|
||||||
final Boolean orphansOnly = null;
|
final Boolean orphansOnly = null;
|
||||||
return this.clientApiResource.retrieveAll(uriInfo, officeId, externalId, displayName, firstname, lastname, status, hierarchy,
|
return this.clientApiResource.retrieveAll(uriInfo, officeId, externalId, displayName, firstname, lastname, status, legalForm,
|
||||||
offset, limit, orderBy, sortOrder, orphansOnly, true);
|
hierarchy, offset, limit, orderBy, sortOrder, orphansOnly, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
|
|||||||
+38
-3
@@ -18,26 +18,28 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.integrationtests.client;
|
package org.apache.fineract.integrationtests.client;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
import io.restassured.builder.RequestSpecBuilder;
|
import io.restassured.builder.RequestSpecBuilder;
|
||||||
import io.restassured.builder.ResponseSpecBuilder;
|
import io.restassured.builder.ResponseSpecBuilder;
|
||||||
import io.restassured.http.ContentType;
|
import io.restassured.http.ContentType;
|
||||||
import io.restassured.specification.RequestSpecification;
|
import io.restassured.specification.RequestSpecification;
|
||||||
import io.restassured.specification.ResponseSpecification;
|
import io.restassured.specification.ResponseSpecification;
|
||||||
|
import java.time.LocalDate;
|
||||||
import org.apache.fineract.client.models.GetClientsClientIdResponse;
|
import org.apache.fineract.client.models.GetClientsClientIdResponse;
|
||||||
|
import org.apache.fineract.client.models.GetClientsResponse;
|
||||||
import org.apache.fineract.client.models.PageClientSearchData;
|
import org.apache.fineract.client.models.PageClientSearchData;
|
||||||
import org.apache.fineract.client.models.PostClientsClientIdIdentifiersRequest;
|
import org.apache.fineract.client.models.PostClientsClientIdIdentifiersRequest;
|
||||||
import org.apache.fineract.client.models.PostClientsClientIdIdentifiersResponse;
|
import org.apache.fineract.client.models.PostClientsClientIdIdentifiersResponse;
|
||||||
import org.apache.fineract.client.models.PostClientsRequest;
|
import org.apache.fineract.client.models.PostClientsRequest;
|
||||||
import org.apache.fineract.client.models.PostClientsResponse;
|
import org.apache.fineract.client.models.PostClientsResponse;
|
||||||
|
import org.apache.fineract.client.models.PostOfficesRequest;
|
||||||
|
import org.apache.fineract.client.models.PostOfficesResponse;
|
||||||
import org.apache.fineract.client.models.SortOrder;
|
import org.apache.fineract.client.models.SortOrder;
|
||||||
import org.apache.fineract.integrationtests.common.ClientHelper;
|
import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||||
import org.apache.fineract.integrationtests.common.Utils;
|
import org.apache.fineract.integrationtests.common.Utils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
public class ClientSearchTest {
|
public class ClientSearchTest extends IntegrationTest {
|
||||||
|
|
||||||
private ResponseSpecification responseSpec;
|
private ResponseSpecification responseSpec;
|
||||||
private RequestSpecification requestSpec;
|
private RequestSpecification requestSpec;
|
||||||
@@ -269,4 +271,37 @@ public class ClientSearchTest {
|
|||||||
assertThat(result.getContent().get(0).getMobileNo()).isEqualTo(request1.getMobileNo());
|
assertThat(result.getContent().get(0).getMobileNo()).isEqualTo(request1.getMobileNo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testClientSearchByLegalForm() {
|
||||||
|
// given
|
||||||
|
PostOfficesResponse newOffice = ok(
|
||||||
|
fineractClient().offices.createOffice(new PostOfficesRequest().name(Utils.randomStringGenerator("TestOffice_", 6))
|
||||||
|
.parentId(1L).openingDate(LocalDate.of(1970, 1, 1)).dateFormat("yyyy-MM-dd").locale("en_US")));
|
||||||
|
PostClientsRequest individualClientRequest = ClientHelper.defaultClientCreationRequest();
|
||||||
|
individualClientRequest.setLegalFormId(1L);
|
||||||
|
individualClientRequest.setOfficeId(newOffice.getOfficeId());
|
||||||
|
PostClientsResponse individualClientResponse = clientHelper.createClient(individualClientRequest);
|
||||||
|
|
||||||
|
PostClientsRequest entityClientRequest = ClientHelper.defaultClientCreationRequest();
|
||||||
|
entityClientRequest.setOfficeId(newOffice.getOfficeId());
|
||||||
|
entityClientRequest.setLegalFormId(2L);
|
||||||
|
PostClientsResponse entityClientResponse = clientHelper.createClient(entityClientRequest);
|
||||||
|
|
||||||
|
PostClientsRequest secondEntityClientRequest = ClientHelper.defaultClientCreationRequest();
|
||||||
|
secondEntityClientRequest.setOfficeId(newOffice.getOfficeId());
|
||||||
|
secondEntityClientRequest.setLegalFormId(2L);
|
||||||
|
PostClientsResponse secondEntityClientResponse = clientHelper.createClient(secondEntityClientRequest);
|
||||||
|
// when
|
||||||
|
GetClientsResponse individualClients = ok(fineractClient().clients.retrieveAll21(newOffice.getOfficeId(), null, null, null, null,
|
||||||
|
null, null, null, null, null, null, null, 1));
|
||||||
|
GetClientsResponse entityClients = ok(fineractClient().clients.retrieveAll21(newOffice.getOfficeId(), null, null, null, null, null,
|
||||||
|
null, null, null, "id", null, null, 2));
|
||||||
|
// then
|
||||||
|
assertThat(individualClients.getTotalFilteredRecords()).isEqualTo(1);
|
||||||
|
assertThat(individualClients.getPageItems().get(0).getId()).isEqualTo(individualClientResponse.getClientId());
|
||||||
|
assertThat(entityClients.getTotalFilteredRecords()).isEqualTo(2);
|
||||||
|
assertThat(entityClients.getPageItems().get(0).getId()).isEqualTo(entityClientResponse.getClientId());
|
||||||
|
assertThat(entityClients.getPageItems().get(1).getId()).isEqualTo(secondEntityClientResponse.getClientId());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -63,7 +63,7 @@ public class ClientTest extends IntegrationTest {
|
|||||||
|
|
||||||
Optional<Long> retrieveFirst() {
|
Optional<Long> retrieveFirst() {
|
||||||
GetClientsResponse clients = ok(
|
GetClientsResponse clients = ok(
|
||||||
fineractClient().clients.retrieveAll21(null, null, null, null, null, null, null, 0, 1, null, null, false));
|
fineractClient().clients.retrieveAll21(null, null, null, null, null, null, null, 0, 1, null, null, false, null));
|
||||||
if (clients.getTotalFilteredRecords() != null && clients.getTotalFilteredRecords() > 0) {
|
if (clients.getTotalFilteredRecords() != null && clients.getTotalFilteredRecords() > 0) {
|
||||||
return clients.getPageItems().stream().findFirst().map(item -> item.getId());
|
return clients.getPageItems().stream().findFirst().map(item -> item.getId());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user