diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/api/CalendarsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/api/CalendarsApiResource.java index d9fa91303..d7a80ef7e 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/api/CalendarsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/api/CalendarsApiResource.java @@ -18,9 +18,7 @@ import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext import org.mifosplatform.portfolio.calendar.data.CalendarData; import org.mifosplatform.portfolio.calendar.domain.Calendar; import org.mifosplatform.portfolio.calendar.domain.CalendarEntityType; -import org.mifosplatform.portfolio.calendar.domain.CalendarType; import org.mifosplatform.portfolio.calendar.service.CalendarDropdownReadPlatformService; -import org.mifosplatform.portfolio.calendar.service.CalendarEnumerations; import org.mifosplatform.portfolio.calendar.service.CalendarReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; @@ -87,6 +85,14 @@ public class CalendarsApiResource { return this.toApiJsonSerializer.serialize(settings, calendarData, this.RESPONSE_DATA_PARAMETERS); } + + /** + * @param entityType + * @param entityId + * @param uriInfo + * @param calendarType + * @return + */ @GET @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @@ -99,7 +105,7 @@ public class CalendarsApiResource { Collection calendarsData = new ArrayList(); - List calendarTypeOptions = createEnumOptionDataListFromQueryParameter(calendarType); + List calendarTypeOptions = createIntegerListFromQueryParameter(calendarType); if (!associationParameters.isEmpty()) { @@ -186,10 +192,14 @@ public class CalendarsApiResource { } - public List createEnumOptionDataListFromQueryParameter(String calendarTypeQuery) { - List calendarTypeOptions = new ArrayList(); - // adding all calendar Types if + public List createIntegerListFromQueryParameter(String calendarTypeQuery) { + List calendarTypeOptions = new ArrayList(); + // adding all calendar Types if query parameter is "all" if(calendarTypeQuery.equalsIgnoreCase("all")){ + calendarTypeOptions.add(1); + calendarTypeOptions.add(2); + calendarTypeOptions.add(3); + calendarTypeOptions.add(4); return calendarTypeOptions; } // creating a list of calendar type options from the comma separated query parameter. @@ -201,13 +211,13 @@ public class CalendarsApiResource { for(String calType : calendarTypeOptionsInQuery){ if(calType.equalsIgnoreCase("collection")) { - calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.COLLECTION)); + calendarTypeOptions.add(1); } else if(calType.equalsIgnoreCase("training")) { - calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.TRAINING)); + calendarTypeOptions.add(2); } else if(calType.equalsIgnoreCase("audit")) { - calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.AUDIT)); + calendarTypeOptions.add(3); } else if(calType.equalsIgnoreCase("general")) { - calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.GENERAL)); + calendarTypeOptions.add(4); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformService.java index 3a70381a3..81b02a433 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformService.java @@ -5,7 +5,6 @@ */ package org.mifosplatform.portfolio.calendar.service; -import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.portfolio.calendar.data.CalendarData; import java.util.Collection; @@ -15,9 +14,9 @@ public interface CalendarReadPlatformService { CalendarData retrieveCalendar(final Long calendarId, Long entityId, Integer entityTypeId); - Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions); + Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions); - Collection retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions); + Collection retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions); Collection retrieveAllCalendars(); @@ -28,4 +27,5 @@ public interface CalendarReadPlatformService { Collection generateRecurringDates(final Collection calendarsData); CalendarData retrieveLoanCalendar(final Long loanId); + } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java index 0a5e788b5..9d0a4c67b 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java @@ -68,11 +68,11 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ final String recurrence = rs.getString("recurrence"); final Integer remindById = rs.getInt("remindById"); EnumOptionData remindBy = null; - if(remindById != null && remindById != 0) remindBy = CalendarEnumerations.calendarRemindBy(remindById); + if (remindById != null && remindById != 0) remindBy = CalendarEnumerations.calendarRemindBy(remindById); final Integer firstReminder = rs.getInt("firstReminder"); final Integer secondReminder = rs.getInt("secondReminder"); final String humanReadable = CalendarHelper.getRRuleReadable(startDate, recurrence); - + final LocalDate createdDate = JdbcSupport.getLocalDate(rs, "createdDate"); final LocalDate lastUpdatedDate = JdbcSupport.getLocalDate(rs, "updatedDate"); final Long createdByUserId = rs.getLong("creatingUserId"); @@ -80,7 +80,9 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ final Long lastUpdatedByUserId = rs.getLong("updatingUserId"); final String lastUpdatedByUserName = rs.getString("updatingUserName"); - return new CalendarData(id, entityId, entityType, title, description, location, startDate, endDate, duration, type, repeating, recurrence, remindBy, firstReminder, secondReminder, humanReadable, createdDate, lastUpdatedDate, createdByUserId, createdByUserName, lastUpdatedByUserId, lastUpdatedByUserName); + return new CalendarData(id, entityId, entityType, title, description, location, startDate, endDate, duration, type, repeating, + recurrence, remindBy, firstReminder, secondReminder, humanReadable, createdDate, lastUpdatedDate, createdByUserId, + createdByUserName, lastUpdatedByUserId, lastUpdatedByUserName); } } @@ -99,41 +101,46 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ } @Override - public Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId, final List calendarTypeOptions) { + public Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId, + final List calendarTypeOptions) { final CalendarDataMapper rm = new CalendarDataMapper(); - Collection result=null; + Collection result = null; - String sql=""; + String sql = ""; if (calendarTypeOptions == null || calendarTypeOptions.isEmpty()) { sql = rm.schema() + " and ci.entity_id = ? and ci.entity_type_enum = ? order by c.start_date "; - result = this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); - } else if(!calendarTypeOptions.isEmpty()){ - String sqlCalendarTypeOptions = createSqlValuesInString(calendarTypeOptions); - sql = rm.schema() + " and ci.entity_id = ? and ci.entity_type_enum = ? and c.calendar_type_enum in (?) order by c.start_date "; - result = this.jdbcTemplate.query(sql,rm, new Object[] {entityId, entityTypeId, sqlCalendarTypeOptions}); + result = this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); + } else if (!calendarTypeOptions.isEmpty()) { + String sqlCalendarTypeOptions = getSqlCalendarTypeOptionsInString(calendarTypeOptions); + sql = rm.schema() + " and ci.entity_id = ? and ci.entity_type_enum = ? and c.calendar_type_enum in ( " + sqlCalendarTypeOptions + + " ) order by c.start_date "; + result = this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); } return result; } @Override - public Collection retrieveParentCalendarsByEntity( final Long entityId, final Integer entityTypeId, final List calendarTypeOptions ) { + public Collection retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId, + final List calendarTypeOptions) { final CalendarDataMapper rm = new CalendarDataMapper(); - Collection result=null; - String sql=""; + Collection result = null; + String sql = ""; CalendarEntityType ceType = CalendarEntityType.fromInt(entityTypeId); String parentHeirarchyCondition = getParentHierarchyCondition(ceType); - //FIXME :AA center is the parent entity of group, change this code to support more parent entity types. + // FIXME :AA center is the parent entity of group, change this code to + // support more parent entity types. if (calendarTypeOptions == null || calendarTypeOptions.isEmpty()) { sql = rm.schema() + " " + parentHeirarchyCondition + " and ci.entity_type_enum = ? order by c.start_date "; result = this.jdbcTemplate.query(sql, rm, new Object[] { entityId, CalendarEntityType.CENTERS.getValue() }); } else { - String sqlCalendarTypeOptions = createSqlValuesInString(calendarTypeOptions); - sql = rm.schema() + " " + parentHeirarchyCondition + " and ci.entity_type_enum = ? and c.calendar_type_enum in ? order by c.start_date "; - result = this.jdbcTemplate.query(sql,rm, new Object[] {entityId, entityTypeId, sqlCalendarTypeOptions}); + String sqlCalendarTypeOptions = getSqlCalendarTypeOptionsInString(calendarTypeOptions); + sql = rm.schema() + " " + parentHeirarchyCondition + " and ci.entity_type_enum = ? and c.calendar_type_enum in (" + + sqlCalendarTypeOptions + ") order by c.start_date "; + result = this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); } return result; } @@ -152,23 +159,23 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ public CalendarData retrieveNewCalendarDetails() { return CalendarData.sensibleDefaultsForNewCalendarCreation(); } - + @Override public CalendarData generateRecurringDate(final CalendarData calendarData) { - if(!calendarData.isRepeating()) return calendarData; + if (!calendarData.isRepeating()) return calendarData; final String rrule = calendarData.getRecurrence(); final LocalDate currentDate = DateUtils.getLocalDateOfTenant(); LocalDate seedDate = calendarData.getStartDate(); LocalDate endDate = calendarData.getEndDate(); LocalDate startDate = calendarData.getStartDate(); - if(seedDate.isBefore(currentDate.minusYears(1))){ + if (seedDate.isBefore(currentDate.minusYears(1))) { startDate = currentDate.minusYears(1); } - - if(endDate == null || endDate.isAfter(currentDate.plusYears(1))){ + + if (endDate == null || endDate.isAfter(currentDate.plusYears(1))) { endDate = currentDate.plusYears(1); } - + final Collection recurringDates = CalendarHelper.getRecurringDates(rrule, seedDate, startDate, endDate, -1); final Collection nextTenRecurringDates = CalendarHelper.getRecurringDates(rrule, seedDate, endDate); return new CalendarData(calendarData, recurringDates, nextTenRecurringDates); @@ -184,42 +191,44 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ return recuCalendarsData; } - + @Override public CalendarData retrieveLoanCalendar(final Long loanId) { final CalendarDataMapper rm = new CalendarDataMapper(); final String sql = rm.schema() + " and ci.entity_id = ? and ci.entity_type_enum = ? order by c.start_date "; CalendarData calendarData = null; - final Collection calendars = this.jdbcTemplate.query(sql, rm, new Object[] { loanId, CalendarEntityType.LOANS.getValue() }); - - if(!CollectionUtils.isEmpty(calendars)){ + final Collection calendars = this.jdbcTemplate.query(sql, rm, + new Object[] { loanId, CalendarEntityType.LOANS.getValue() }); + + if (!CollectionUtils.isEmpty(calendars)) { for (CalendarData calendar : calendars) { calendarData = calendar; - break;//Loans are associated with only one calendar - } + break;// Loans are associated with only one calendar + } } - + return calendarData; } public static String getParentHierarchyCondition(final CalendarEntityType calendarEntityType) { String conditionSql = ""; - + switch (calendarEntityType) { case CLIENTS: - //TODO : AA : do we need to propagate to top level parent in hierarchy? + // TODO : AA : do we need to propagate to top level parent in + // hierarchy? conditionSql = " and ci.entity_id in (select gc.group_id from m_client c join m_group_client gc " + " on c.id=gc.client_id where c.id = ? ) "; break; - + case GROUPS: - //TODO : AA: add parent hierarchy for groups + // TODO : AA: add parent hierarchy for groups conditionSql = " and ci.entity_id in (select g.parent_id from m_group g where g.id = ? ) "; break; - + case LOANS: - //TODO : AA: do we need parent hierarchy calendars for loans? + // TODO : AA: do we need parent hierarchy calendars for loans? conditionSql = " and ci.entity_id = ? "; break; @@ -231,19 +240,19 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ } /** - * This method takes the List of calendarType options given in the request and creates a string to be used in the sql statement. - * for ex. (1,2,3,4) + * function returns a comma separated list of calendar_type_enum values ex. + * 1,2,3,4 + * * @param calendarTypeOptions * @return */ - public String createSqlValuesInString(final List calendarTypeOptions){ + public String getSqlCalendarTypeOptionsInString(final List calendarTypeOptions) { + String sqlCalendarTypeOptions = ""; int size = calendarTypeOptions.size(); - String sqlCalendarTypeOptions = "(" + calendarTypeOptions.get(0).getId().toString(); - for(int i=1;i