diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java index 8801479ad..f8284e980 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java @@ -13,6 +13,7 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -31,6 +32,8 @@ import org.mifosng.platform.client.service.ClientReadPlatformService; import org.mifosng.platform.group.service.GroupReadPlatformService; import org.mifosng.platform.group.service.GroupWritePlatformService; import org.mifosng.platform.organisation.service.OfficeReadPlatformService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -40,9 +43,11 @@ import org.springframework.stereotype.Component; @Scope("singleton") public class GroupsApiResource { + private final static Logger logger = LoggerFactory.getLogger(GroupsApiResource.class); + @Autowired private GroupReadPlatformService groupReadPlatformService; - + @Autowired private GroupWritePlatformService groupWritePlatformService; @@ -71,19 +76,21 @@ public class GroupsApiResource { if (responseParameters.isEmpty()) { responseParameters.addAll(typicalResponseParameters); } - + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); - + Collection groups = this.groupReadPlatformService.retrieveAllGroups(); - + return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, groups); } - + @GET @Path("{groupId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveGroupData(@PathParam("groupId") final Long groupId, @Context final UriInfo uriInfo) { + public String retrieveGroupData(@Context final UriInfo uriInfo, + @PathParam("groupId") final Long groupId, + @QueryParam("officeId") final Long officeId) { Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo .getQueryParameters()); @@ -92,27 +99,34 @@ public class GroupsApiResource { } boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); - + GroupData group = this.groupReadPlatformService.retrieveGroup(groupId); final Collection clientMembers = this.groupReadPlatformService.retrieveClientMembers(groupId); Collection availableClients = null; Collection allowedOffices = null; - + group = new GroupData(group, clientMembers, availableClients, allowedOffices); - + boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters()); if (template) { responseParameters.add("allowedClients"); responseParameters.add("allowedOffices"); - availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookup(); + final String extraCriteria; + if (officeId != null){ + extraCriteria = getGroupExtraCriteria(officeId); + } else { + extraCriteria = getGroupExtraCriteria(group.getOfficeId()); + } + + availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookup(extraCriteria); availableClients.removeAll(group.clientMembers()); allowedOffices = officeReadPlatformService.retrieveAllOfficesForLookup(); group = new GroupData(group, group.clientMembers(), availableClients, allowedOffices); } - + return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, group); } @@ -120,7 +134,8 @@ public class GroupsApiResource { @Path("template") @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public String newGroupDetails(@Context final UriInfo uriInfo) { + public String newGroupDetails(@Context final UriInfo uriInfo, + @QueryParam("officeId") final Long officeId) { Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); if (responseParameters.isEmpty()) { @@ -130,7 +145,9 @@ public class GroupsApiResource { responseParameters.addAll(Arrays.asList("allowedClients", "allowedOffices")); - GroupData groupData = this.groupReadPlatformService.retrieveNewGroupDetails(); + final String extraCriteria = getGroupExtraCriteria(officeId); + + GroupData groupData = this.groupReadPlatformService.retrieveNewGroupDetails(extraCriteria); return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, groupData); } @@ -194,4 +211,17 @@ public class GroupsApiResource { return this.apiJsonSerializerService.serializeGroupAccountSummaryCollectionDataToJson(prettyPrint, responseParameters, clientAccount); } + + private String getGroupExtraCriteria(Long officeId){ + + String extraCriteria = ""; + + if (officeId != null) { + extraCriteria += " office_id = " + officeId; + } + + logger.info("extraCriteria; " + extraCriteria); + + return extraCriteria; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformService.java index d88ade548..c04bd8d25 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformService.java @@ -15,7 +15,7 @@ public interface ClientReadPlatformService { ClientData retrieveNewClientDetails(); - Collection retrieveAllIndividualClientsForLookup(); + Collection retrieveAllIndividualClientsForLookup(String extraCriteria); ClientAccountSummaryCollectionData retrieveClientAccountDetails(Long clientId); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java index 882809214..a9b9d9448 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java @@ -84,13 +84,17 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService } @Override - public Collection retrieveAllIndividualClientsForLookup() { + public Collection retrieveAllIndividualClientsForLookup(String extraCriteria) { this.context.authenticatedUser(); ClientLookupMapper rm = new ClientLookupMapper(); - String sql = "select " + rm.clientLookupSchema() + " where c.is_deleted = 0"; + String sql = "select " + rm.clientLookupSchema(); + + if (StringUtils.isNotBlank(extraCriteria)){ + sql += " and (" + extraCriteria + ")"; + } return this.jdbcTemplate.query(sql, rm, new Object[] {}); } @@ -145,7 +149,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService public String clientLookupSchema() { return "c.id as id, c.firstname as firstname, c.lastname as lastname, " + "c.office_id as officeId, o.name as officeName " + - "from m_client c join m_office o on o.id = c.office_id"; + "from m_client c join m_office o on o.id = c.office_id where c.is_deleted=0 "; } @Override diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformService.java index 309bcd638..31e60c21d 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformService.java @@ -12,7 +12,7 @@ public interface GroupReadPlatformService { GroupData retrieveGroup(Long groupId); - GroupData retrieveNewGroupDetails(); + GroupData retrieveNewGroupDetails(String extraCriteria); Collection retrieveClientMembers(Long groupId); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformServiceImpl.java index 36cc346b4..c53a1533a 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/group/service/GroupReadPlatformServiceImpl.java @@ -72,12 +72,12 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService { } @Override - public GroupData retrieveNewGroupDetails() { + public GroupData retrieveNewGroupDetails(String extraCriteria) { this.context.authenticatedUser(); List allowedClients = new ArrayList( - this.clientReadPlatformService.retrieveAllIndividualClientsForLookup()); + this.clientReadPlatformService.retrieveAllIndividualClientsForLookup(extraCriteria)); List allowedOffices = new ArrayList(officeReadPlatformService.retrieveAllOfficesForLookup());