From 587c03a277c8ef37206c2494b859206673db161c Mon Sep 17 00:00:00 2001 From: Nayan Ambali Date: Wed, 20 Mar 2013 19:43:55 +0530 Subject: [PATCH] get parent groups details along with client data --- .../client/api/ClientsApiResource.java | 6 ++-- .../portfolio/client/data/ClientData.java | 25 +++++++++++----- .../ClientReadPlatformServiceImpl.java | 30 +++++++++++++++++-- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java index a54335906..487920348 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java @@ -53,9 +53,9 @@ import org.springframework.stereotype.Component; @Scope("singleton") public class ClientsApiResource { - private final Set CLIENT_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "accountNo", "officeId", "officeName", - "externalId", "firstname", "middlename", "lastname", "fullname", "joinedDate", "displayName", "clientOrBusinessName", - "allowedOffices", "imagePresent")); + private final Set CLIENT_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "accountNo", "externalId", "firstname", + "middlename", "lastname", "fullname", "displayName", "officeId", "officeName", "joinedDate", "imageKey", "imagePresent", + "parentGroups", "allowedOffices", "currentChange", "allChanges")); private final PlatformSecurityContext context; private final ClientReadPlatformService clientReadPlatformService; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientData.java index 596aa3ba3..f47a05e7f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientData.java @@ -11,6 +11,7 @@ import java.util.List; import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import org.mifosplatform.organisation.office.data.OfficeLookup; +import org.mifosplatform.portfolio.group.data.GroupLookup; /** * Immutable data object representing client data. @@ -31,7 +32,7 @@ final public class ClientData { private final String imageKey; @SuppressWarnings("unused") private final Boolean imagePresent; - + private final Collection parentGroups; private final List allowedOffices; private final ClientData currentChange; @@ -42,24 +43,33 @@ final public class ClientData { String localDisplayName = null; return new ClientData(null, officeId, null, id, firstname, middlename, lastname, fullname, localDisplayName, externalId, - joiningDate, null, null, null, null); + joiningDate, null, null, null, null, null); } public static ClientData integrateChanges(final ClientData clientData, ClientData currentChange, final Collection allChanges) { return new ClientData(clientData.accountNo, clientData.officeId, clientData.officeName, clientData.id, clientData.firstname, clientData.middlename, clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, - clientData.joinedDate, clientData.imageKey, clientData.allowedOffices, currentChange, allChanges); + clientData.joinedDate, clientData.imageKey, clientData.allowedOffices, currentChange, allChanges, clientData.parentGroups); } public static ClientData template(final Long officeId, final LocalDate joinedDate, final List allowedOffices) { - return new ClientData(null, officeId, null, null, null, null, null, null, null, null, joinedDate, null, allowedOffices, null, null); + return new ClientData(null, officeId, null, null, null, null, null, null, null, null, joinedDate, null, allowedOffices, null, null, + null); } public static ClientData templateOnTop(final ClientData clientData, final List allowedOffices) { return new ClientData(clientData.accountNo, clientData.officeId, clientData.officeName, clientData.id, clientData.firstname, clientData.middlename, clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, - clientData.joinedDate, clientData.imageKey, allowedOffices, clientData.currentChange, clientData.allChanges); + clientData.joinedDate, clientData.imageKey, allowedOffices, clientData.currentChange, clientData.allChanges, + clientData.parentGroups); + } + + public static ClientData setParentGroups(final ClientData clientData, final Collection parentGroups) { + return new ClientData(clientData.accountNo, clientData.officeId, clientData.officeName, clientData.id, clientData.firstname, + clientData.middlename, clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, + clientData.joinedDate, clientData.imageKey, clientData.allowedOffices, clientData.currentChange, clientData.allChanges, + parentGroups); } public static ClientData clientIdentifier(final Long id, final String accountIdentifier, final String firstname, @@ -67,13 +77,13 @@ final public class ClientData { final String officeName) { return new ClientData(accountIdentifier, officeId, officeName, id, firstname, middlename, lastname, fullname, displayName, null, - null, null, null, null, null); + null, null, null, null, null, null); } public ClientData(final String accountNo, final Long officeId, final String officeName, final Long id, final String firstname, final String middlename, final String lastname, final String fullname, final String displayName, final String externalId, final LocalDate joinedDate, final String imageKey, final List allowedOffices, final ClientData currentChange, - final Collection allChanges) { + final Collection allChanges, final Collection parentGroups) { this.accountNo = accountNo; this.officeId = officeId; this.officeName = officeName; @@ -94,6 +104,7 @@ final public class ClientData { this.allowedOffices = allowedOffices; this.currentChange = currentChange; this.allChanges = allChanges; + this.parentGroups = parentGroups; } public String displayName() { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientReadPlatformServiceImpl.java index b2d019f89..1f89c986c 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientReadPlatformServiceImpl.java @@ -23,6 +23,7 @@ import org.mifosplatform.portfolio.client.data.ClientAccountSummaryData; import org.mifosplatform.portfolio.client.data.ClientData; import org.mifosplatform.portfolio.client.data.ClientLookup; import org.mifosplatform.portfolio.client.exception.ClientNotFoundException; +import org.mifosplatform.portfolio.group.data.GroupLookup; import org.mifosplatform.portfolio.loanaccount.data.LoanStatusEnumData; import org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations; import org.mifosplatform.useradministration.domain.AppUser; @@ -75,10 +76,15 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService String hierarchySearchString = hierarchy + "%"; ClientMapper rm = new ClientMapper(); - String sql = "select " + rm.clientSchema() + " and c.id = " + clientId; + ClientData clientData = this.jdbcTemplate.queryForObject(sql, rm, new Object[] { hierarchySearchString }); - return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { hierarchySearchString }); + ParentGroupsMapper cgrm = new ParentGroupsMapper(); + String cgSql = "select " + cgrm.parentGroupsSchema(); + Collection parentGroups = this.jdbcTemplate.query(cgSql, cgrm, new Object[] { clientId }); + + return ClientData.setParentGroups(clientData , parentGroups); + } catch (EmptyResultDataAccessException e) { throw new ClientNotFoundException(clientId); } @@ -149,7 +155,25 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService final String officeName = rs.getString("officeName"); return new ClientData(accountNo, officeId, officeName, id, firstname, middlename, lastname, fullname, displayName, externalId, - joinedDate, imageKey, null, null, null); + joinedDate, imageKey, null, null, null ,null); + } + + } + + private static final class ParentGroupsMapper implements RowMapper { + + public String parentGroupsSchema() { + return "gp.id As groupId , gp.name As groupName from m_client cl JOIN m_group_client gc ON cl.id = gc.client_id " + + "JOIN m_group gp ON gp.id = gc.group_id WHERE cl.id = ? AND gp.is_deleted = 0 "; + } + + @Override + public GroupLookup mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { + + final Long groupId = JdbcSupport.getLong(rs, "groupId"); + final String groupName = rs.getString("groupName"); + + return new GroupLookup(groupId, groupName); } }