incorp review comments

This commit is contained in:
Nayan Ambali
2013-03-14 11:43:20 +05:30
parent 5a48f88586
commit 772fe35a36
8 changed files with 65 additions and 50 deletions
@@ -0,0 +1 @@
ALTER TABLE m_group MODIFY name VARCHAR(100) NOT NULL;
@@ -45,9 +45,13 @@ import org.springframework.stereotype.Component;
@Scope("singleton") @Scope("singleton")
public class GroupsApiResource { public class GroupsApiResource {
private static final Set<String> GROUP_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "officeId", "name", "externalId", /*
"clientMembers", "allowedClients", "allowedOffices", "allowedParentGroups", "groupLevel", "allowedStaffs", "childGroups")); * GROUP_DATA_PARAMETERS is used by ToApiJsonSerializer<E>, make sure E's properties and E_PARAMETERS are in same
*/
private static final Set<String> GROUP_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "externalId", "officeId",
"officeName", "staffId", "staffName", "parentId", "parentName", "hierarchy", "groupSummaryData", "groupLevelData",
"clientMembers", "allowedClients", "allowedOffices", "allowedParentGroups", "allowedStaffs", "childGroups"));
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
private final GroupReadPlatformService groupReadPlatformService; private final GroupReadPlatformService groupReadPlatformService;
private final ToApiJsonSerializer<GroupData> toApiJsonSerializer; private final ToApiJsonSerializer<GroupData> toApiJsonSerializer;
@@ -23,12 +23,11 @@ public class GroupData {
private final String officeName; private final String officeName;
private final Long staffId; private final Long staffId;
private final String staffName; private final String staffName;
private final Long groupLevel;
private final Long parentId; private final Long parentId;
private final String parentName; private final String parentName;
private final String hierarchy; private final String hierarchy;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final GroupSummaryData groupSummaryData; private final GroupSummary groupSummaryData;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final GroupLevelData groupLevelData; private final GroupLevelData groupLevelData;
private final Collection<ClientLookup> clientMembers; private final Collection<ClientLookup> clientMembers;
@@ -37,21 +36,19 @@ public class GroupData {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final Collection<OfficeData> allowedOffices; private final Collection<OfficeData> allowedOffices;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final Collection<GroupLookupData> allowedParentGroups; private final Collection<GroupLookup> allowedParentGroups;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final Collection<StaffData> allowedStaffs; private final Collection<StaffData> allowedStaffs;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final Collection<GroupLookupData> childGroups; private final Collection<GroupLookup> childGroups;
public GroupData(final Long id, final Long officeId, final String officeName, final String name, final String externalId, public GroupData(final Long id, final Long officeId, final String officeName, final String name, final String externalId,
final Long groupLevel, final Long parentId, final String parentName, final Long staffId, final String staffName, final Long parentId, final String parentName, final Long staffId, final String staffName, final String hierarchy) {
final String hierarchy) {
this.id = id; this.id = id;
this.officeId = officeId; this.officeId = officeId;
this.officeName = officeName; this.officeName = officeName;
this.name = name; this.name = name;
this.externalId = externalId; this.externalId = externalId;
this.groupLevel = groupLevel;
this.parentId = parentId; this.parentId = parentId;
this.parentName = parentName; this.parentName = parentName;
this.staffId = staffId; this.staffId = staffId;
@@ -68,15 +65,14 @@ public class GroupData {
} }
public GroupData(final GroupData group, final Collection<ClientLookup> clientMembers, final Collection<ClientLookup> allowedClients, public GroupData(final GroupData group, final Collection<ClientLookup> clientMembers, final Collection<ClientLookup> allowedClients,
final Collection<OfficeData> allowedOffices, final Collection<GroupLookupData> allowedParentGroups, final Collection<OfficeData> allowedOffices, final Collection<GroupLookup> allowedParentGroups,
final GroupLevelData groupLevelData, final Collection<StaffData> allowedStaffs, final Collection<GroupLookupData> childGroups, final GroupLevelData groupLevelData, final Collection<StaffData> allowedStaffs, final Collection<GroupLookup> childGroups,
final GroupSummaryData groupSummaryData) { final GroupSummary groupSummaryData) {
this.id = group.getId(); this.id = group.getId();
this.officeId = group.getOfficeId(); this.officeId = group.getOfficeId();
this.officeName = group.getOfficeName(); this.officeName = group.getOfficeName();
this.name = group.getName(); this.name = group.getName();
this.externalId = group.getExternalId(); this.externalId = group.getExternalId();
this.groupLevel = group.getGroupLevel();
this.parentId = group.getParentId(); this.parentId = group.getParentId();
this.parentName = group.getParentName(); this.parentName = group.getParentName();
this.staffId = group.getStaffId(); this.staffId = group.getStaffId();
@@ -94,7 +90,7 @@ public class GroupData {
} }
public GroupData(final Long officeId, final Collection<ClientLookup> allowedClients, final Collection<OfficeData> allowedOffices, public GroupData(final Long officeId, final Collection<ClientLookup> allowedClients, final Collection<OfficeData> allowedOffices,
final Collection<GroupLookupData> allowedParentGroups, final GroupLevelData groupLevelData, final Collection<GroupLookup> allowedParentGroups, final GroupLevelData groupLevelData,
final Collection<StaffData> allowedStaffs) { final Collection<StaffData> allowedStaffs) {
this.id = null; this.id = null;
this.officeId = officeId; this.officeId = officeId;
@@ -102,7 +98,6 @@ public class GroupData {
this.name = null; this.name = null;
this.externalId = null; this.externalId = null;
this.clientMembers = null; this.clientMembers = null;
this.groupLevel = null;
this.parentId = null; this.parentId = null;
this.parentName = null; this.parentName = null;
this.staffId = null; this.staffId = null;
@@ -137,10 +132,6 @@ public class GroupData {
return this.officeName; return this.officeName;
} }
public Long getGroupLevel() {
return this.groupLevel;
}
public Long getParentId() { public Long getParentId() {
return this.parentId; return this.parentId;
} }
@@ -8,12 +8,12 @@ package org.mifosplatform.portfolio.group.data;
/** /**
* Immutable data object representing groups. * Immutable data object representing groups.
*/ */
public class GroupLookupData { public class GroupLookup {
private final Long id; private final Long id;
private final String name; private final String name;
public GroupLookupData(final Long id, final String name) { public GroupLookup(final Long id, final String name) {
this.id = id; this.id = id;
this.name = name; this.name = name;
} }
@@ -9,14 +9,14 @@ import java.util.Collection;
import org.mifosplatform.organisation.monetary.data.MoneyData; import org.mifosplatform.organisation.monetary.data.MoneyData;
public class GroupSummaryData { public class GroupSummary {
private final Long totalActiveClients; private final Long totalActiveClients;
private final Long totalChildGroups; private final Long totalChildGroups;
private final Collection<MoneyData> totalLoanPortfolio; private final Collection<MoneyData> totalLoanPortfolio;
private final Collection<MoneyData> totalSavings; private final Collection<MoneyData> totalSavings;
public GroupSummaryData(final Long totalActiveClients, final Long totalChildGroups, final Collection<MoneyData> totalLoanPortfolio, public GroupSummary(final Long totalActiveClients, final Long totalChildGroups, final Collection<MoneyData> totalLoanPortfolio,
final Collection<MoneyData> totalSavings) { final Collection<MoneyData> totalSavings) {
this.totalActiveClients = totalActiveClients; this.totalActiveClients = totalActiveClients;
this.totalChildGroups = totalChildGroups; this.totalChildGroups = totalChildGroups;
@@ -80,6 +80,13 @@ public final class GroupCommandFromApiJsonDeserializer extends AbstractFromApiJs
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("group"); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("group");
/*
* Name is a mandatory field and not exceeding length 100 character
*/
final String nameParameterName = "name";
final String name = this.fromApiJsonHelper.extractStringNamed(nameParameterName, element);
baseDataValidator.reset().parameter(nameParameterName).value(name).notNull().notExceedingLengthOf(100);
final String externalIdParameterName = "externalId"; final String externalIdParameterName = "externalId";
if (this.fromApiJsonHelper.parameterExists(externalIdParameterName, element)) { if (this.fromApiJsonHelper.parameterExists(externalIdParameterName, element)) {
@@ -87,11 +94,13 @@ public final class GroupCommandFromApiJsonDeserializer extends AbstractFromApiJs
baseDataValidator.reset().parameter(externalIdParameterName).value(externalId).ignoreIfNull().notExceedingLengthOf(100); baseDataValidator.reset().parameter(externalIdParameterName).value(externalId).ignoreIfNull().notExceedingLengthOf(100);
} }
/*
* OfficeId is mandatory field
*/
final String officeIdParameterName = "officeId"; final String officeIdParameterName = "officeId";
if (this.fromApiJsonHelper.parameterExists(officeIdParameterName, element)) { final Long officeId = this.fromApiJsonHelper.extractLongNamed(officeIdParameterName, element);
final Long officeId = this.fromApiJsonHelper.extractLongNamed(officeIdParameterName, element); baseDataValidator.reset().parameter(officeIdParameterName).value(officeId).notNull().integerGreaterThanZero();
baseDataValidator.reset().parameter(officeIdParameterName).value(officeId).notNull().integerGreaterThanZero();
}
final String parentIdParameterName = "parentId"; final String parentIdParameterName = "parentId";
if (this.fromApiJsonHelper.parameterExists(parentIdParameterName, element)) { if (this.fromApiJsonHelper.parameterExists(parentIdParameterName, element)) {
@@ -14,7 +14,7 @@ import org.mifosplatform.portfolio.group.data.GroupAccountSummaryCollectionData;
import org.mifosplatform.portfolio.group.data.GroupAccountSummaryData; import org.mifosplatform.portfolio.group.data.GroupAccountSummaryData;
import org.mifosplatform.portfolio.group.data.GroupData; import org.mifosplatform.portfolio.group.data.GroupData;
import org.mifosplatform.portfolio.group.data.GroupLevelData; import org.mifosplatform.portfolio.group.data.GroupLevelData;
import org.mifosplatform.portfolio.group.data.GroupLookupData; import org.mifosplatform.portfolio.group.data.GroupLookup;
public interface GroupReadPlatformService { public interface GroupReadPlatformService {
@@ -30,7 +30,7 @@ public interface GroupReadPlatformService {
Collection<GroupAccountSummaryData> retrieveGroupLoanAccountsByLoanOfficerId(Long groupId, Long loanOfficerId); Collection<GroupAccountSummaryData> retrieveGroupLoanAccountsByLoanOfficerId(Long groupId, Long loanOfficerId);
Collection<GroupLookupData> retrieveAllGroupsbyOfficeIdAndLevelId(Long officeId, Long levelId); Collection<GroupLookup> retrieveAllGroupsbyOfficeIdAndLevelId(Long officeId, Long levelId);
GroupLevelData retrieveGroupLevelDetails(Long levelId); GroupLevelData retrieveGroupLevelDetails(Long levelId);
@@ -38,7 +38,7 @@ public interface GroupReadPlatformService {
GroupData retrieveGroupDetails(Long groupId, boolean template); GroupData retrieveGroupDetails(Long groupId, boolean template);
Collection<GroupLookupData> retrieveChildGroupsbyGroupId(Long groupId); Collection<GroupLookup> retrieveChildGroupsbyGroupId(Long groupId);
Long retrieveTotalNoOfChildGroups(Long groupId); Long retrieveTotalNoOfChildGroups(Long groupId);
@@ -49,4 +49,6 @@ public interface GroupReadPlatformService {
GroupData retrieveNewChildGroupDetails(Long officeId, Long levelId, Long parentGroupId); GroupData retrieveNewChildGroupDetails(Long officeId, Long levelId, Long parentGroupId);
StaffData retrieveStaffsbyId(Long staffId); StaffData retrieveStaffsbyId(Long staffId);
Long getLevelIdByGroupId(final Long groupId);
} }
@@ -28,8 +28,8 @@ import org.mifosplatform.portfolio.group.data.GroupAccountSummaryCollectionData;
import org.mifosplatform.portfolio.group.data.GroupAccountSummaryData; import org.mifosplatform.portfolio.group.data.GroupAccountSummaryData;
import org.mifosplatform.portfolio.group.data.GroupData; import org.mifosplatform.portfolio.group.data.GroupData;
import org.mifosplatform.portfolio.group.data.GroupLevelData; import org.mifosplatform.portfolio.group.data.GroupLevelData;
import org.mifosplatform.portfolio.group.data.GroupLookupData; import org.mifosplatform.portfolio.group.data.GroupLookup;
import org.mifosplatform.portfolio.group.data.GroupSummaryData; import org.mifosplatform.portfolio.group.data.GroupSummary;
import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.domain.Group;
import org.mifosplatform.portfolio.group.domain.GroupRepository; import org.mifosplatform.portfolio.group.domain.GroupRepository;
import org.mifosplatform.portfolio.group.exception.GroupLevelNotFoundException; import org.mifosplatform.portfolio.group.exception.GroupLevelNotFoundException;
@@ -93,7 +93,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
} }
@Override @Override
public Collection<GroupLookupData> retrieveAllGroupsbyOfficeIdAndLevelId(final Long officeId, final Long levelId) { public Collection<GroupLookup> retrieveAllGroupsbyOfficeIdAndLevelId(final Long officeId, final Long levelId) {
this.context.authenticatedUser(); this.context.authenticatedUser();
final GroupLookupMapper rm = new GroupLookupMapper(); final GroupLookupMapper rm = new GroupLookupMapper();
@@ -101,7 +101,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
return this.jdbcTemplate.query(sql, rm, new Object[] { officeId, levelId }); return this.jdbcTemplate.query(sql, rm, new Object[] { officeId, levelId });
} }
private GroupLookupData retrieveGroupbyId(final Long parentGroupId) { private GroupLookup retrieveGroupbyId(final Long parentGroupId) {
try { try {
this.context.authenticatedUser(); this.context.authenticatedUser();
final GroupLookupMapper rm = new GroupLookupMapper(); final GroupLookupMapper rm = new GroupLookupMapper();
@@ -114,7 +114,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
} }
@Override @Override
public Collection<GroupLookupData> retrieveChildGroupsbyGroupId(final Long groupId) { public Collection<GroupLookup> retrieveChildGroupsbyGroupId(final Long groupId) {
this.context.authenticatedUser(); this.context.authenticatedUser();
final GroupLookupMapper rm = new GroupLookupMapper(); final GroupLookupMapper rm = new GroupLookupMapper();
@@ -155,10 +155,10 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
final List<OfficeData> allowedOffices = new ArrayList<OfficeData>(this.officeReadPlatformService.retrieveAllOfficesForDropdown()); final List<OfficeData> allowedOffices = new ArrayList<OfficeData>(this.officeReadPlatformService.retrieveAllOfficesForDropdown());
List<GroupLookupData> allowedParentGroups = null; List<GroupLookup> allowedParentGroups = null;
if (groupLevelData.getParentLevelId() != null) { if (groupLevelData.getParentLevelId() != null) {
allowedParentGroups = new ArrayList<GroupLookupData>(retrieveAllGroupsbyOfficeIdAndLevelId(officeId, allowedParentGroups = new ArrayList<GroupLookup>(retrieveAllGroupsbyOfficeIdAndLevelId(officeId,
groupLevelData.getParentLevelId())); groupLevelData.getParentLevelId()));
} }
@@ -190,7 +190,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
final List<OfficeData> allowedOffices = new ArrayList<OfficeData>(); final List<OfficeData> allowedOffices = new ArrayList<OfficeData>();
allowedOffices.add(this.officeReadPlatformService.retrieveOffice(officeId)); allowedOffices.add(this.officeReadPlatformService.retrieveOffice(officeId));
final List<GroupLookupData> allowedParentGroups = new ArrayList<GroupLookupData>(); final List<GroupLookup> allowedParentGroups = new ArrayList<GroupLookup>();
allowedParentGroups.add(retrieveGroupbyId(parentGroupId)); allowedParentGroups.add(retrieveGroupbyId(parentGroupId));
final List<StaffData> allowedStaffs = new ArrayList<StaffData>(); final List<StaffData> allowedStaffs = new ArrayList<StaffData>();
@@ -206,17 +206,17 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
final Collection<ClientLookup> clientMembers = retrieveClientMembers(groupId); final Collection<ClientLookup> clientMembers = retrieveClientMembers(groupId);
Collection<ClientLookup> availableClients = null; Collection<ClientLookup> availableClients = null;
Collection<OfficeData> allowedOffices = null; Collection<OfficeData> allowedOffices = null;
Collection<GroupLookupData> allowedParentGroups = null; Collection<GroupLookup> allowedParentGroups = null;
final GroupLevelData groupLevelData = retrieveGroupLevelDetails(group.getGroupLevel()); final GroupLevelData groupLevelData = retrieveGroupLevelDetails(getLevelIdByGroupId(groupId));
; ;
Collection<StaffData> allowedStaffs = null; Collection<StaffData> allowedStaffs = null;
final Collection<GroupLookupData> childGroups = retrieveChildGroupsbyGroupId(groupId); final Collection<GroupLookup> childGroups = retrieveChildGroupsbyGroupId(groupId);
final Long totalActiveClients = retrieveTotalClients(group.getHierarchy()); final Long totalActiveClients = retrieveTotalClients(group.getHierarchy());
final Long totalChildGroups = retrieveTotalNoOfChildGroups(groupId); final Long totalChildGroups = retrieveTotalNoOfChildGroups(groupId);
final Collection<MoneyData> totalLoanPortfolio = retrieveGroupLoanPortfolio(group.getHierarchy()); final Collection<MoneyData> totalLoanPortfolio = retrieveGroupLoanPortfolio(group.getHierarchy());
final GroupSummaryData groupSummaryData = new GroupSummaryData(totalActiveClients, totalChildGroups, totalLoanPortfolio, null); final GroupSummary groupSummaryData = new GroupSummary(totalActiveClients, totalChildGroups, totalLoanPortfolio, null);
group = new GroupData(group, clientMembers, availableClients, allowedOffices, allowedParentGroups, groupLevelData, allowedStaffs, group = new GroupData(group, clientMembers, availableClients, allowedOffices, allowedParentGroups, groupLevelData, allowedStaffs,
childGroups, groupSummaryData); childGroups, groupSummaryData);
@@ -265,6 +265,15 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
} }
} }
@Override
public Long getLevelIdByGroupId(final Long groupId){
this.context.authenticatedUser();
final String sqlTotalClients = "SELECT g.level_Id as levelId FROM m_group g WHERE g.id = ?";
return this.jdbcTemplate.queryForLong(sqlTotalClients, new Object[] { groupId });
}
@Override @Override
public Long retrieveTotalClients(final String hierarchy) { public Long retrieveTotalClients(final String hierarchy) {
@@ -323,7 +332,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
private static final class GroupDataMapper implements RowMapper<GroupData> { private static final class GroupDataMapper implements RowMapper<GroupData> {
public String groupSchema() { public String groupSchema() {
return "g.office_id as officeId, g.level_id as groupLevel , g.parent_id as parentId , o.name as officeName," return "g.office_id as officeId, g.parent_id as parentId , o.name as officeName,"
+ " g.id as id, g.external_id as externalId, g.name as name , s.display_name as staffName , pg.name as" + " g.id as id, g.external_id as externalId, g.name as name , s.display_name as staffName , pg.name as"
+ " parentName , g.staff_id as staffId , g.hierarchy as hierarchy from m_group g join m_office o on o.id = g.office_id left join " + " parentName , g.staff_id as staffId , g.hierarchy as hierarchy from m_group g join m_office o on o.id = g.office_id left join "
+ "m_staff s on s.id = g.staff_id left join m_group pg on pg.id = g.parent_id"; + "m_staff s on s.id = g.staff_id left join m_group pg on pg.id = g.parent_id";
@@ -337,32 +346,31 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
final String externalId = rs.getString("externalId"); final String externalId = rs.getString("externalId");
final Long officeId = rs.getLong("officeId"); final Long officeId = rs.getLong("officeId");
final String officeName = rs.getString("officeName"); final String officeName = rs.getString("officeName");
final Long groupLevel = rs.getLong("groupLevel"); final Long parentId = rs.getLong("parentId");
final Long parentId = JdbcSupport.getLong(rs, "parentId");
final String parentName = rs.getString("parentName"); final String parentName = rs.getString("parentName");
final Long staffId = JdbcSupport.getLong(rs, "staffId"); final Long staffId = JdbcSupport.getLong(rs, "staffId");
final String staffName = rs.getString("staffName"); final String staffName = rs.getString("staffName");
final String hierarchy = rs.getString("hierarchy"); final String hierarchy = rs.getString("hierarchy");
return new GroupData(id, officeId, officeName, name, externalId, groupLevel, parentId, parentName, staffId, staffName, return new GroupData(id, officeId, officeName, name, externalId, parentId, parentName, staffId, staffName,
hierarchy); hierarchy);
} }
} }
private static final class GroupLookupMapper implements RowMapper<GroupLookupData> { private static final class GroupLookupMapper implements RowMapper<GroupLookup> {
public String groupLookupSchema() { public String groupLookupSchema() {
return "g.id as id, g.name as name "; return "g.id as id, g.name as name ";
} }
@Override @Override
public GroupLookupData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { public GroupLookup mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final Long id = rs.getLong("id"); final Long id = rs.getLong("id");
final String name = rs.getString("name"); final String name = rs.getString("name");
return new GroupLookupData(id, name); return new GroupLookup(id, name);
} }
} }