Merge pull request #544 from mifoscontributer/mifosx-547_c

Transfer clients between groups
This commit is contained in:
Vishwas Babu A J
2013-08-27 02:01:00 -07:00
5 changed files with 25 additions and 85 deletions
@@ -11,6 +11,7 @@ import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
@@ -76,11 +77,18 @@ public class StaffApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveStaff(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch,
@QueryParam("officeId") final Long officeId) {
@QueryParam("officeId") final Long officeId,
@DefaultValue("false") @QueryParam("staffInOfficeHierarchy") final boolean staffInOfficeHierarchy) {
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
final Collection<StaffData> staff = this.readPlatformService.retrieveAllStaff(sqlSearch, officeId);
final Collection<StaffData> staff;
if (staffInOfficeHierarchy) {
final boolean loanOfficersOnly = false;
staff = this.readPlatformService.retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(officeId, loanOfficersOnly);
} else {
staff = this.readPlatformService.retrieveAllStaff(sqlSearch, officeId);
}
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, staff, RESPONSE_DATA_PARAMETERS);
@@ -5,6 +5,7 @@
*/
package org.mifosplatform.portfolio.group.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
@@ -51,7 +52,6 @@ import org.mifosplatform.portfolio.collectionsheet.data.JLGCollectionSheetData;
import org.mifosplatform.portfolio.collectionsheet.service.CollectionSheetReadPlatformService;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
import org.mifosplatform.portfolio.group.data.GroupRoleData;
import org.mifosplatform.portfolio.group.data.GroupTransferData;
import org.mifosplatform.portfolio.group.service.CenterReadPlatformService;
import org.mifosplatform.portfolio.group.service.GroupReadPlatformService;
import org.mifosplatform.portfolio.group.service.GroupRolesReadPlatformService;
@@ -143,15 +143,26 @@ public class GroupsApiResource {
@QueryParam("officeId") final Long officeId, @QueryParam("externalId") final String externalId,
@QueryParam("name") final String name, @QueryParam("underHierarchy") final String hierarchy,
@QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit,
@QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder) {
@QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder,
@QueryParam("templateType") final String templateType, @QueryParam("groupId") final Long groupId) {
this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.GROUP_RESOURCE_NAME);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (templateType != null && templateType.equalsIgnoreCase("clientstransfertemplate")) {
final Collection<GroupGeneralData> groups;
if (officeId != null && groupId != null) {
groups = this.groupReadPlatformService.retrieveGroupsForLookup(officeId, groupId);
} else {
groups = new ArrayList<GroupGeneralData>();
}
return this.groupGeneralApiJsonSerializer.serialize(settings, groups, GroupingTypesApiConstants.GROUP_RESPONSE_DATA_PARAMETERS);
}
final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, externalId, name, hierarchy, offset,
limit, orderBy, sortOrder);
final Page<GroupGeneralData> groups = this.groupReadPlatformService.retrieveAll(searchParameters);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, groups, GroupingTypesApiConstants.GROUP_RESPONSE_DATA_PARAMETERS);
}
@@ -161,7 +172,7 @@ public class GroupsApiResource {
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveOne(@Context final UriInfo uriInfo, @PathParam("groupId") final Long groupId,
@DefaultValue("false") @QueryParam("staffInSelectedOfficeOnly") final boolean staffInSelectedOfficeOnly,
@QueryParam("roleId") final Long roleId, @QueryParam("templateType") final String templateType) {
@QueryParam("roleId") final Long roleId) {
this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.GROUP_RESOURCE_NAME);
final Set<String> associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters());
@@ -169,15 +180,6 @@ public class GroupsApiResource {
GroupGeneralData group = this.groupReadPlatformService.retrieveOne(groupId);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (templateType != null && templateType.equalsIgnoreCase("clientstransfertemplate")) {
final GroupTransferData groupTransferData = this.groupReadPlatformService.retrieveClientTransferTemplate(group.officeId(),
groupId, staffInSelectedOfficeOnly);
final Set<String> GROUP_TRANSFERS_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("groupId", "clientOptions",
"groupOptions", "staffOptions", "transferActiveLoans", "inheritDestinationGroupLoanOfficer"));
return this.toApiJsonSerializer.serialize(settings, groupTransferData, GROUP_TRANSFERS_DATA_PARAMETERS);
}
// associations
Collection<ClientData> membersOfGroup = null;
Collection<GroupRoleData> groupRoles = null;
@@ -1,40 +0,0 @@
package org.mifosplatform.portfolio.group.data;
import java.util.Collection;
import org.mifosplatform.organisation.staff.data.StaffData;
import org.mifosplatform.portfolio.client.data.ClientData;
public class GroupTransferData {
@SuppressWarnings("unused")
private final Long groupId;
@SuppressWarnings("unused")
private final Collection<ClientData> clientOptions;
@SuppressWarnings("unused")
private final Collection<GroupGeneralData> groupOptions;
@SuppressWarnings("unused")
private final Collection<StaffData> staffOptions;
@SuppressWarnings("unused")
private final boolean transferActiveLoans;
@SuppressWarnings("unused")
private final boolean inheritDestinationGroupLoanOfficer;
private GroupTransferData(final Long groupId, final Collection<ClientData> clientOptions,
final Collection<GroupGeneralData> groupOptions, final Collection<StaffData> staffOptions, final boolean transferActiveLoans,
final boolean inheritDestinationGroupLoanOfficer) {
this.groupId = groupId;
this.clientOptions = clientOptions;
this.groupOptions = groupOptions;
this.staffOptions = staffOptions;
this.transferActiveLoans = transferActiveLoans;
this.inheritDestinationGroupLoanOfficer = inheritDestinationGroupLoanOfficer;
}
public static GroupTransferData template(final Long groupId, final Collection<ClientData> clientOptions,
final Collection<GroupGeneralData> groupOptions, final Collection<StaffData> staffOptions, final boolean transferActiveLoans,
final boolean inheritDestinationGroupLoanOfficer) {
return new GroupTransferData(groupId, clientOptions, groupOptions, staffOptions, transferActiveLoans,
inheritDestinationGroupLoanOfficer);
}
}
@@ -9,7 +9,6 @@ import java.util.Collection;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
import org.mifosplatform.portfolio.group.data.GroupTransferData;
public interface GroupReadPlatformService {
@@ -20,6 +19,4 @@ public interface GroupReadPlatformService {
GroupGeneralData retrieveOne(Long groupId);
Collection<GroupGeneralData> retrieveGroupsForLookup(Long officeId, Long groupId);
GroupTransferData retrieveClientTransferTemplate(Long officeId, Long groupId, boolean staffInSelectedOfficeOnly);
}
@@ -27,7 +27,6 @@ import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
import org.mifosplatform.portfolio.group.api.GroupingTypesApiConstants;
import org.mifosplatform.portfolio.group.data.CenterData;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
import org.mifosplatform.portfolio.group.data.GroupTransferData;
import org.mifosplatform.portfolio.group.domain.GroupTypes;
import org.mifosplatform.portfolio.group.exception.GroupNotFoundException;
import org.mifosplatform.useradministration.domain.AppUser;
@@ -228,30 +227,4 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
}
}
@Override
public GroupTransferData retrieveClientTransferTemplate(final Long officeId, final Long groupId, final boolean staffInSelectedOfficeOnly) {
final boolean transferActiveLoans = true;
final boolean inheritDestinationGroupLoanOfficer = true;
Collection<ClientData> membersOfGroup = this.clientReadPlatformService.retrieveClientMembersOfGroup(groupId);
if (CollectionUtils.isEmpty(membersOfGroup)) {
membersOfGroup = null;
}
final boolean loanOfficersOnly = false;
Collection<StaffData> staffOptions = null;
if (staffInSelectedOfficeOnly) {
staffOptions = this.staffReadPlatformService.retrieveAllStaffForDropdown(officeId);
} else {
staffOptions = this.staffReadPlatformService.retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(officeId, loanOfficersOnly);
}
if (CollectionUtils.isEmpty(staffOptions)) {
staffOptions = null;
}
Collection<GroupGeneralData> groupOptions = this.retrieveGroupsForLookup(officeId, groupId);
return GroupTransferData.template(groupId, membersOfGroup, groupOptions, staffOptions, transferActiveLoans,
inheritDestinationGroupLoanOfficer);
}
}