josehernandezfintecheandomx commented on code in PR #2783: URL: https://github.com/apache/fineract/pull/2783#discussion_r1044479372
########## fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java: ########## @@ -370,77 +305,141 @@ public Collection<ClientData> retrieveActiveClientMembersOfGroup(final Long grou hierarchySearchString, groupId, ClientStatus.ACTIVE.getValue()); } - private static final class ClientMembersOfGroupMapper implements RowMapper<ClientData> { + private String buildSqlStringFromClientCriteria(String schemaSql, final SearchParameters searchParameters, List<Object> paramList) { + + String sqlSearch = searchParameters.getSqlSearch(); + final Long officeId = searchParameters.getOfficeId(); + final String externalId = searchParameters.getExternalId(); + final String displayName = searchParameters.getName(); + final String firstname = searchParameters.getFirstname(); + final String lastname = searchParameters.getLastname(); + final String status = searchParameters.getStatus(); + + String extraCriteria = ""; + if (sqlSearch != null) { + sqlSearch = sqlSearch.replaceAll(" display_name ", " c.display_name "); + sqlSearch = sqlSearch.replaceAll("display_name ", "c.display_name "); + extraCriteria = " and (" + sqlSearch + ")"; + this.columnValidator.validateSqlInjection(schemaSql, sqlSearch); + } + + if (officeId != null) { + extraCriteria += " and c.office_id = ? "; + paramList.add(officeId); + } + + if (externalId != null) { + paramList.add(externalId); + extraCriteria += " and c.external_id like ? "; + } + + if (displayName != null) { + // extraCriteria += " and concatcoalesce(c.firstname, ''), + // if(c.firstname > '',' ', '') , coalesce(c.lastname, '')) like " + paramList.add("%" + displayName + "%"); + extraCriteria += " and c.display_name like ? "; + } + + if (status != null) { + ClientStatus clientStatus = ClientStatus.fromString(status); + extraCriteria += " and c.status_enum = " + clientStatus.getValue().toString() + " "; + } + + if (firstname != null) { + paramList.add(firstname); + extraCriteria += " and c.firstname like ? "; + } + + if (lastname != null) { + paramList.add(lastname); + extraCriteria += " and c.lastname like ? "; + } + + if (searchParameters.isScopedByOfficeHierarchy()) { + paramList.add(searchParameters.getHierarchy() + "%"); + extraCriteria += " and o.hierarchy like ? "; + } + + if (searchParameters.isOrphansOnly()) { + extraCriteria += " and c.id NOT IN (select client_id from m_group_client) "; + } + + if (StringUtils.isNotBlank(extraCriteria)) { + extraCriteria = extraCriteria.substring(4); + } + return extraCriteria; + } + + private static final class ClientToDataMapper implements RowMapper<ClientData> { private final String schema; - ClientMembersOfGroupMapper() { - final StringBuilder sqlBuilder = new StringBuilder(200); + ClientToDataMapper() { + final StringBuilder builder = new StringBuilder(400); Review Comment: There are different (old) Client mapper for covering different flows, individual client, group client, etc. In this case It was not renamed -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@fineract.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org