MIFOSX-902 productive collection sheet feature is added

This commit is contained in:
goutham-M
2014-02-11 12:51:42 +05:30
parent ac932974f3
commit d23335603f
7 changed files with 167 additions and 7 deletions
@@ -15,6 +15,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarRemindBy;
import org.mifosplatform.portfolio.calendar.domain.CalendarType;
import org.mifosplatform.portfolio.calendar.domain.CalendarWeekDaysType;
import org.mifosplatform.portfolio.calendar.service.CalendarEnumerations;
import org.mifosplatform.portfolio.calendar.service.CalendarUtils;
/**
* Immutable data object representing a Calendar.
@@ -320,4 +321,10 @@ public class CalendarData {
}
return false;
}
public boolean isValidRecurringDate(final LocalDate compareDate) {
if (isBetweenStartAndEndDate(compareDate)) { return CalendarUtils.isValidRedurringDate(this.getRecurrence(), this.getStartDate(),
compareDate); }
return false;
}
}
@@ -7,6 +7,7 @@ package org.mifosplatform.portfolio.group.api;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@@ -26,6 +27,7 @@ import javax.ws.rs.core.UriInfo;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.accounting.journalentry.api.DateParam;
import org.mifosplatform.commands.domain.CommandWrapper;
import org.mifosplatform.commands.service.CommandWrapperBuilder;
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
@@ -49,6 +51,7 @@ import org.mifosplatform.portfolio.collectionsheet.data.JLGCollectionSheetData;
import org.mifosplatform.portfolio.collectionsheet.service.CollectionSheetReadPlatformService;
import org.mifosplatform.portfolio.group.data.CenterData;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
import org.mifosplatform.portfolio.group.data.StaffCenterData;
import org.mifosplatform.portfolio.group.service.CenterReadPlatformService;
import org.mifosplatform.portfolio.group.service.SearchParameters;
import org.mifosplatform.portfolio.meeting.data.MeetingData;
@@ -131,13 +134,20 @@ public class CentersApiResource {
@QueryParam("externalId") final String externalId, @QueryParam("name") final String name,
@QueryParam("underHierarchy") final String hierarchy, @QueryParam("paged") final Boolean paged,
@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("meetingDate") final DateParam meetingDateParam, @QueryParam("dateFormat") final String dateFormat,
@QueryParam("locale") final String locale) {
this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.CENTER_RESOURCE_NAME);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (meetingDateParam != null && officeId != null) {
Date meetingDate = meetingDateParam.getDate("meetingDate", dateFormat, locale);
Collection<StaffCenterData> staffCenterDataArray = this.centerReadPlatformService.retriveAllCentersByMeetingDate(officeId, meetingDate, staffId);
return this.toApiJsonSerializer.serialize(settings, staffCenterDataArray, GroupingTypesApiConstants.STAFF_CENTER_RESPONSE_DATA_PARAMETERS);
}
final PaginationParameters parameters = PaginationParameters.instance(paged, offset, limit, orderBy, sortOrder);
final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, staffId, externalId, name, hierarchy,
offset, limit, orderBy, sortOrder);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (parameters.isPaged()) {
final Page<CenterData> centers = this.centerReadPlatformService.retrievePagedAll(searchParameters, parameters);
return this.toApiJsonSerializer.serialize(settings, centers, GroupingTypesApiConstants.CENTER_RESPONSE_DATA_PARAMETERS);
@@ -238,7 +248,7 @@ public class CentersApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String activate(@PathParam("centerId") final Long centerId, @QueryParam("command") final String commandParam,
final String apiRequestBodyAsJson, @Context final UriInfo uriInfo) {
final String apiRequestBodyAsJson, @Context final UriInfo uriInfo) {
final CommandWrapperBuilder builder = new CommandWrapperBuilder().withJson(apiRequestBodyAsJson);
@@ -63,7 +63,10 @@ public class GroupingTypesApiConstants {
// group close parameters
public static final String closureDateParamName = "closureDate";
public static final String closureReasonIdParamName = "closureReasonId";
//staff centres parameters
public static final String meetingFallCenters = "meetingFallCenters";
public static final Set<String> CENTER_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, idParamName, nameParamName, externalIdParamName, officeIdParamName, staffIdParamName, activeParamName,
activationDateParamName, groupMembersParamName,submittedOnDateParamName));
@@ -102,4 +105,7 @@ public class GroupingTypesApiConstants {
public static final Set<String> GROUP_CLOSE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, closureDateParamName, closureReasonIdParamName));
public static final Set<String> STAFF_CENTER_RESPONSE_DATA_PARAMETERS = new HashSet<String>(
Arrays.asList(staffIdParamName, staffNameParamName, meetingFallCenters));
}
@@ -62,13 +62,12 @@ public class CenterData {
public static CenterData instance(final Long id, final String name, final String externalId, final EnumOptionData status,
final LocalDate activationDate, final Long officeId, final String officeName, final Long staffId, final String staffName,
final String hierarchy, final GroupTimelineData timeline) {
final String hierarchy, final GroupTimelineData timeline, final CalendarData collectionMeetingCalendar) {
final Collection<GroupGeneralData> groupMembers = null;
final Collection<OfficeData> officeOptions = null;
final Collection<StaffData> staffOptions = null;
final Collection<GroupGeneralData> groupMembersOptions = null;
final CalendarData collectionMeetingCalendar = null;
final Collection<CodeValueData> closureReasons = null;
return new CenterData(id, name, externalId, status, activationDate, officeId, officeName, staffId, staffName, hierarchy,
@@ -155,4 +154,12 @@ public class CenterData {
public String getHierarchy() {
return this.hierarchy;
}
public CalendarData getCollectionMeetingCalendar() {
return collectionMeetingCalendar;
}
public String getStaffName() {
return this.staffName;
}
}
@@ -0,0 +1,29 @@
package org.mifosplatform.portfolio.group.data;
import java.util.Collection;
public class StaffCenterData {
private final Long staffId;
@SuppressWarnings("unused")
private final String staffName;
private final Collection<CenterData> meetingFallCenters;
private StaffCenterData(final Long staffId, final String staffName, final Collection<CenterData> meetingFallCenters) {
this.staffId = staffId;
this.staffName = staffName;
this.meetingFallCenters = meetingFallCenters;
}
public static StaffCenterData instance(final Long staffId, final String staffName, final Collection<CenterData> meetingFallCenters) {
return new StaffCenterData(staffId, staffName, meetingFallCenters);
}
public Long getStaffId() {
return staffId;
}
public Collection<CenterData> getMeetingFallCenters() {
return meetingFallCenters;
}
}
@@ -6,11 +6,13 @@
package org.mifosplatform.portfolio.group.service;
import java.util.Collection;
import java.util.Date;
import org.mifosplatform.infrastructure.core.data.PaginationParameters;
import org.mifosplatform.infrastructure.core.service.Page;
import org.mifosplatform.portfolio.group.data.CenterData;
import org.mifosplatform.portfolio.group.data.GroupGeneralData;
import org.mifosplatform.portfolio.group.data.StaffCenterData;
public interface CenterReadPlatformService {
@@ -29,4 +31,6 @@ public interface CenterReadPlatformService {
Collection<GroupGeneralData> retrieveAssociatedGroups(Long centerId);
CenterData retrieveCenterWithClosureReasons();
Collection<StaffCenterData> retriveAllCentersByMeetingDate(Long officeId, Date meetingDate, Long staffId);
}
@@ -10,6 +10,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -31,6 +32,8 @@ import org.mifosplatform.organisation.office.data.OfficeData;
import org.mifosplatform.organisation.office.service.OfficeReadPlatformService;
import org.mifosplatform.organisation.staff.data.StaffData;
import org.mifosplatform.organisation.staff.service.StaffReadPlatformService;
import org.mifosplatform.portfolio.calendar.data.CalendarData;
import org.mifosplatform.portfolio.calendar.service.CalendarEnumerations;
import org.mifosplatform.portfolio.client.data.ClientData;
import org.mifosplatform.portfolio.client.domain.ClientEnumerations;
import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
@@ -38,6 +41,7 @@ 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.GroupTimelineData;
import org.mifosplatform.portfolio.group.data.StaffCenterData;
import org.mifosplatform.portfolio.group.domain.GroupTypes;
import org.mifosplatform.portfolio.group.domain.GroupingTypeEnumerations;
import org.mifosplatform.portfolio.group.exception.CenterNotFoundException;
@@ -197,7 +201,58 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername,
closedByFirstname, closedByLastname);
return CenterData.instance(id, name, externalId, status, activationDate, officeId, officeName, staffId, staffName, hierarchy, timeline);
return CenterData.instance(id, name, externalId, status, activationDate, officeId, officeName, staffId, staffName, hierarchy, timeline, null);
}
}
private static final class CenterCalendarDataMapper implements RowMapper<CenterData> {
private final String schemaSql;
public CenterCalendarDataMapper() {
schemaSql = " select g.id as id, g.display_name as name, g.office_id as officeId, g.staff_id as staffId, s.display_name as staffName, g.external_id as externalId, "
+" g.status_enum as statusEnum, g.activation_date as activationDate, g.hierarchy as hierarchy, "
+" c.id as calendarId, ci.id as calendarInstanceId, ci.entity_id as entityId, "
+" ci.entity_type_enum as entityTypeId, c.title as title, c.description as description, "
+" c.location as location, c.start_date as startDate, c.end_date as endDate, c.recurrence as recurrence "
+" from m_calendar c join m_calendar_instance ci on ci.calendar_id=c.id and ci.entity_type_enum=4 join m_group g "
+" on g.id = ci.entity_id join m_staff s on g.staff_id = s.id where g.office_id=? ";
}
public String schema() {
return this.schemaSql;
}
@Override
public CenterData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final Long id = rs.getLong("id");
final String name = rs.getString("name");
final Integer statusEnum = JdbcSupport.getInteger(rs, "statusEnum");
final EnumOptionData status = GroupingTypeEnumerations.status(statusEnum);
final LocalDate activationDate = JdbcSupport.getLocalDate(rs, "activationDate");
final String externalId = rs.getString("externalId");
final Long officeId = rs.getLong("officeId");
final Long staffId = JdbcSupport.getLong(rs, "staffId");
final String staffName = rs.getString("staffName");
final String hierarchy = rs.getString("hierarchy");
final Long calendarId = rs.getLong("calendarId");
final Long calendarInstanceId = rs.getLong("calendarInstanceId");
final Long entityId = rs.getLong("entityId");
final Integer entityTypeId = rs.getInt("entityTypeId");
final EnumOptionData entityType = CalendarEnumerations.calendarEntityType(entityTypeId);
final String title = rs.getString("title");
final String description = rs.getString("description");
final String location = rs.getString("location");
final LocalDate startDate = JdbcSupport.getLocalDate(rs, "startDate");
final LocalDate endDate = JdbcSupport.getLocalDate(rs, "endDate");
final String recurrence = rs.getString("recurrence");
CalendarData calendarData = CalendarData.instance(calendarId, calendarInstanceId, entityId, entityType, title, description, location, startDate,
endDate, null, null, false, recurrence, null, null, null, null, null, null, null, null, null, null, null, null, null);
return CenterData.instance(id, name, externalId, status, activationDate, officeId, null, staffId, staffName, hierarchy, null, calendarData);
}
}
@@ -451,4 +506,46 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
this.codeValueReadPlatformService.retrieveCodeValuesByCode(GroupingTypesApiConstants.GROUP_CLOSURE_REASON));
return CenterData.withClosureReasons(closureReasons);
}
@Override
public Collection<StaffCenterData> retriveAllCentersByMeetingDate(final Long officeId, final Date meetingDate, final Long staffId) {
final CenterCalendarDataMapper centerCalendarMapper = new CenterCalendarDataMapper();
String sql = centerCalendarMapper.schema();
Collection<CenterData> centerDataArray = null;
if (staffId != null) {
sql += " and g.staff_id=? ";
centerDataArray = this.jdbcTemplate.query(sql, centerCalendarMapper, new Object[] {officeId, staffId});
} else {
centerDataArray = this.jdbcTemplate.query(sql, centerCalendarMapper, new Object[] {officeId});
}
Collection<StaffCenterData> staffCenterDataArray = new ArrayList<StaffCenterData>();
Boolean flag = false;
for (CenterData centerData : centerDataArray) {
if (centerData.getCollectionMeetingCalendar().isValidRecurringDate(new LocalDate(meetingDate))){
if (staffCenterDataArray.size() <= 0) {
Collection<CenterData> meetingFallCenter = new ArrayList<CenterData>();
meetingFallCenter.add(centerData);
staffCenterDataArray.add(StaffCenterData.instance(centerData.staffId(), centerData.getStaffName(), meetingFallCenter));
} else {
for(StaffCenterData staffCenterData : staffCenterDataArray) {
flag = false;
if (staffCenterData.getStaffId() == centerData.staffId()) {
staffCenterData.getMeetingFallCenters().add(centerData);
flag = true;
break;
}
}
if (!flag) {
Collection<CenterData> meetingFallCenter = new ArrayList<CenterData>();
meetingFallCenter.add(centerData);
staffCenterDataArray.add(StaffCenterData.instance(centerData.staffId(), centerData.getStaffName(), meetingFallCenter));
}
}
}
}
return staffCenterDataArray;
}
}