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 5261d9abe..d0ed7b88c 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 @@ -33,6 +33,7 @@ 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.mifosng.platform.security.PlatformSecurityContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -64,6 +65,9 @@ public class GroupsApiResource { @Autowired private ApiJsonSerializerService apiJsonSerializerService; + @Autowired + private PlatformSecurityContext context; + private static final Set typicalResponseParameters = new HashSet( Arrays.asList("id", "officeId", "name", "externalId", "clientMembers") ); @@ -120,14 +124,12 @@ public class GroupsApiResource { responseParameters.add("allowedClients"); responseParameters.add("allowedOffices"); - final String extraCriteria; if (officeId != null){ - extraCriteria = getGroupExtraCriteria(null, officeId, null, null, null); + availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(officeId); } else { - extraCriteria = getGroupExtraCriteria(null, group.getOfficeId(), null, null, null); + availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(group.getOfficeId()); } - availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookup(extraCriteria); availableClients.removeAll(group.clientMembers()); allowedOffices = officeReadPlatformService.retrieveAllOfficesForLookup(); @@ -151,11 +153,14 @@ public class GroupsApiResource { } boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); - responseParameters.addAll(Arrays.asList("allowedClients", "allowedOffices")); + responseParameters.addAll(Arrays.asList("officeId", "allowedClients", "allowedOffices")); - final String extraCriteria = getGroupExtraCriteria(null, officeId, null, null, null); - - GroupData groupData = this.groupReadPlatformService.retrieveNewGroupDetails(extraCriteria); + GroupData groupData; + if (officeId != null){ + groupData = this.groupReadPlatformService.retrieveNewGroupDetails(officeId); + } else { + groupData = this.groupReadPlatformService.retrieveNewGroupDetails(context.authenticatedUser().getOffice().getId()); + } return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, groupData); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/GroupData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/GroupData.java index 3e92ba050..ffe6d4383 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/GroupData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/GroupData.java @@ -49,9 +49,9 @@ public class GroupData { this.allowedOffices = allowedOffices; } - public GroupData(final Collection allowedClients, final Collection allowedOffices) { + public GroupData(final Long officeId, final Collection allowedClients, final Collection allowedOffices) { this.id = null; - this.officeId = null; + this.officeId = officeId; this.officeName = null; this.name = null; this.externalId = null; 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 0822c3eee..4f1563a17 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 @@ -18,6 +18,8 @@ public interface ClientReadPlatformService { Collection retrieveAllIndividualClientsForLookup(String extraCriteria); + Collection retrieveAllIndividualClientsForLookupByOfficeId(Long officeId); + ClientAccountSummaryCollectionData retrieveClientAccountDetails(Long clientId); Collection retrieveAllClientNotes(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 8f4579e22..5e142cc72 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 @@ -114,6 +114,17 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService return this.jdbcTemplate.query(sql, rm, new Object[] {}); } + @Override + public Collection retrieveAllIndividualClientsForLookupByOfficeId(Long officeId) { + this.context.authenticatedUser(); + + ClientLookupMapper rm = new ClientLookupMapper(); + + String sql = "select " + rm.clientLookupSchema() + " and c.office_id = " + officeId; + + return this.jdbcTemplate.query(sql, rm, new Object[] {}); + } + @Override public ClientData retrieveNewClientDetails() { 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 bb858ead4..36d71efa1 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(String extraCriteria); + GroupData retrieveNewGroupDetails(Long officeId); 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 c8a993d56..5e852d170 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 @@ -19,6 +19,7 @@ import org.mifosng.platform.infrastructure.JdbcSupport; import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource; import org.mifosng.platform.organisation.service.OfficeReadPlatformService; import org.mifosng.platform.security.PlatformSecurityContext; +import org.mifosng.platform.user.domain.AppUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -76,16 +77,14 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService { } @Override - public GroupData retrieveNewGroupDetails(String extraCriteria) { - - this.context.authenticatedUser(); + public GroupData retrieveNewGroupDetails(final Long officeId) { List allowedClients = new ArrayList( - this.clientReadPlatformService.retrieveAllIndividualClientsForLookup(extraCriteria)); + this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(officeId)); List allowedOffices = new ArrayList(officeReadPlatformService.retrieveAllOfficesForLookup()); - return new GroupData(allowedClients, allowedOffices); + return new GroupData(officeId, allowedClients, allowedOffices); } private static final class GroupMapper implements RowMapper {