MIFOSX-902 productive collection sheet feature is added
This commit is contained in:
+7
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+13
-3
@@ -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);
|
||||
|
||||
|
||||
+7
-1
@@ -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));
|
||||
}
|
||||
+9
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
+29
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -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);
|
||||
}
|
||||
|
||||
+98
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user