Merge pull request #532 from mifoscontributer/mifosx-547
Transfer clients between groups
This commit is contained in:
+48
-1
@@ -39,6 +39,8 @@ import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
|
|||||||
import org.mifosplatform.infrastructure.core.serialization.ToApiJsonSerializer;
|
import org.mifosplatform.infrastructure.core.serialization.ToApiJsonSerializer;
|
||||||
import org.mifosplatform.infrastructure.core.service.Page;
|
import org.mifosplatform.infrastructure.core.service.Page;
|
||||||
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
||||||
|
import org.mifosplatform.organisation.staff.data.StaffData;
|
||||||
|
import org.mifosplatform.organisation.staff.service.StaffReadPlatformService;
|
||||||
import org.mifosplatform.portfolio.accountdetails.data.AccountSummaryCollectionData;
|
import org.mifosplatform.portfolio.accountdetails.data.AccountSummaryCollectionData;
|
||||||
import org.mifosplatform.portfolio.accountdetails.service.AccountDetailsReadPlatformService;
|
import org.mifosplatform.portfolio.accountdetails.service.AccountDetailsReadPlatformService;
|
||||||
import org.mifosplatform.portfolio.calendar.data.CalendarData;
|
import org.mifosplatform.portfolio.calendar.data.CalendarData;
|
||||||
@@ -51,6 +53,7 @@ import org.mifosplatform.portfolio.collectionsheet.data.JLGCollectionSheetData;
|
|||||||
import org.mifosplatform.portfolio.collectionsheet.service.CollectionSheetReadPlatformService;
|
import org.mifosplatform.portfolio.collectionsheet.service.CollectionSheetReadPlatformService;
|
||||||
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
|
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
|
||||||
import org.mifosplatform.portfolio.group.data.GroupRoleData;
|
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.CenterReadPlatformService;
|
||||||
import org.mifosplatform.portfolio.group.service.GroupReadPlatformService;
|
import org.mifosplatform.portfolio.group.service.GroupReadPlatformService;
|
||||||
import org.mifosplatform.portfolio.group.service.GroupRolesReadPlatformService;
|
import org.mifosplatform.portfolio.group.service.GroupRolesReadPlatformService;
|
||||||
@@ -81,6 +84,7 @@ public class GroupsApiResource {
|
|||||||
private final GroupRolesReadPlatformService groupRolesReadPlatformService;
|
private final GroupRolesReadPlatformService groupRolesReadPlatformService;
|
||||||
private final AccountDetailsReadPlatformService accountDetailsReadPlatformService;
|
private final AccountDetailsReadPlatformService accountDetailsReadPlatformService;
|
||||||
private final CalendarReadPlatformService calendarReadPlatformService;
|
private final CalendarReadPlatformService calendarReadPlatformService;
|
||||||
|
private final StaffReadPlatformService staffReadPlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public GroupsApiResource(final PlatformSecurityContext context, final GroupReadPlatformService groupReadPlatformService,
|
public GroupsApiResource(final PlatformSecurityContext context, final GroupReadPlatformService groupReadPlatformService,
|
||||||
@@ -92,7 +96,8 @@ public class GroupsApiResource {
|
|||||||
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService,
|
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService,
|
||||||
final CollectionSheetReadPlatformService collectionSheetReadPlatformService, final FromJsonHelper fromJsonHelper,
|
final CollectionSheetReadPlatformService collectionSheetReadPlatformService, final FromJsonHelper fromJsonHelper,
|
||||||
final GroupRolesReadPlatformService groupRolesReadPlatformService,
|
final GroupRolesReadPlatformService groupRolesReadPlatformService,
|
||||||
final AccountDetailsReadPlatformService accountDetailsReadPlatformService, final CalendarReadPlatformService calendarReadPlatformService) {
|
final AccountDetailsReadPlatformService accountDetailsReadPlatformService,
|
||||||
|
final CalendarReadPlatformService calendarReadPlatformService, final StaffReadPlatformService staffReadPlatformService) {
|
||||||
|
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.groupReadPlatformService = groupReadPlatformService;
|
this.groupReadPlatformService = groupReadPlatformService;
|
||||||
@@ -108,6 +113,7 @@ public class GroupsApiResource {
|
|||||||
this.groupRolesReadPlatformService = groupRolesReadPlatformService;
|
this.groupRolesReadPlatformService = groupRolesReadPlatformService;
|
||||||
this.accountDetailsReadPlatformService = accountDetailsReadPlatformService;
|
this.accountDetailsReadPlatformService = accountDetailsReadPlatformService;
|
||||||
this.calendarReadPlatformService = calendarReadPlatformService;
|
this.calendarReadPlatformService = calendarReadPlatformService;
|
||||||
|
this.staffReadPlatformService = staffReadPlatformService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@@ -361,4 +367,45 @@ public class GroupsApiResource {
|
|||||||
return this.groupSummaryToApiJsonSerializer.serialize(settings, groupAccount, GROUP_ACCOUNTS_DATA_PARAMETERS);
|
return this.groupSummaryToApiJsonSerializer.serialize(settings, groupAccount, GROUP_ACCOUNTS_DATA_PARAMETERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("{groupId}/clientstransfertemplate")
|
||||||
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
|
public String retrieveClientTranferTemplate(@Context final UriInfo uriInfo, @PathParam("groupId") final Long groupId,
|
||||||
|
@DefaultValue("false") @QueryParam("staffInSelectedOfficeOnly") final boolean staffInSelectedOfficeOnly) {
|
||||||
|
|
||||||
|
this.context.authenticatedUser().validateHasReadPermission("GROUP");
|
||||||
|
GroupGeneralData group = this.groupReadPlatformService.retrieveOne(groupId);
|
||||||
|
|
||||||
|
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(group.officeId());
|
||||||
|
} else {
|
||||||
|
staffOptions = this.staffReadPlatformService.retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(group.officeId(),
|
||||||
|
loanOfficersOnly);
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isEmpty(staffOptions)) {
|
||||||
|
staffOptions = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<GroupGeneralData> groupOptions = this.groupReadPlatformService.retrieveGroupsForLookup(group.officeId(), groupId);
|
||||||
|
GroupTransferData data = GroupTransferData.template(groupId, membersOfGroup, groupOptions, staffOptions, transferActiveLoans,
|
||||||
|
inheritDestinationGroupLoanOfficer);
|
||||||
|
|
||||||
|
final Set<String> GROUP_TRANSFERS_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("groupId", "clientOptions", "groupOptions",
|
||||||
|
"staffOptions", "transferActiveLoans", "inheritDestinationGroupLoanOfficer"));
|
||||||
|
|
||||||
|
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
|
return this.toApiJsonSerializer.serialize(settings, data, GROUP_TRANSFERS_DATA_PARAMETERS);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -5,6 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.mifosplatform.portfolio.group.service;
|
package org.mifosplatform.portfolio.group.service;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.mifosplatform.infrastructure.core.service.Page;
|
import org.mifosplatform.infrastructure.core.service.Page;
|
||||||
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
|
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
|
||||||
|
|
||||||
@@ -15,4 +17,6 @@ public interface GroupReadPlatformService {
|
|||||||
Page<GroupGeneralData> retrieveAll(SearchParameters searchParameters);
|
Page<GroupGeneralData> retrieveAll(SearchParameters searchParameters);
|
||||||
|
|
||||||
GroupGeneralData retrieveOne(Long groupId);
|
GroupGeneralData retrieveOne(Long groupId);
|
||||||
|
|
||||||
|
Collection<GroupGeneralData> retrieveGroupsForLookup(Long officeId, Long groupId);
|
||||||
}
|
}
|
||||||
+26
@@ -5,12 +5,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.mifosplatform.portfolio.group.service;
|
package org.mifosplatform.portfolio.group.service;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
|
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
|
||||||
import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformService;
|
import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformService;
|
||||||
import org.mifosplatform.infrastructure.core.api.ApiParameterHelper;
|
import org.mifosplatform.infrastructure.core.api.ApiParameterHelper;
|
||||||
|
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
|
||||||
import org.mifosplatform.infrastructure.core.service.Page;
|
import org.mifosplatform.infrastructure.core.service.Page;
|
||||||
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
|
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
|
||||||
import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
|
import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
|
||||||
@@ -30,6 +33,7 @@ import org.mifosplatform.useradministration.domain.AppUser;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.dao.EmptyResultDataAccessException;
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
@@ -200,4 +204,26 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
throw new GroupNotFoundException(groupId);
|
throw new GroupNotFoundException(groupId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<GroupGeneralData> retrieveGroupsForLookup(final Long officeId, final Long groupId) {
|
||||||
|
this.context.authenticatedUser();
|
||||||
|
GroupLookupDataMapper rm = new GroupLookupDataMapper();
|
||||||
|
String sql = "Select " + rm.schema() + " where g.office_id=? and g.id !=?";
|
||||||
|
return this.jdbcTemplate.query(sql, rm, new Object[] { officeId, groupId });
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class GroupLookupDataMapper implements RowMapper<GroupGeneralData> {
|
||||||
|
|
||||||
|
public final String schema() {
|
||||||
|
return "g.id as id, g.display_name as displayName from m_group g";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GroupGeneralData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||||
|
final Long id = JdbcSupport.getLong(rs, "id");
|
||||||
|
final String displayName = rs.getString("displayName");
|
||||||
|
return GroupGeneralData.lookup(id, displayName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user