From db9a5b6d16d087a7c623f573dc0847a5333de9aa Mon Sep 17 00:00:00 2001 From: kushagrasingh Date: Wed, 8 May 2013 11:15:49 +0530 Subject: [PATCH 1/3] Issue-331 --- .../core/data/EnumOptionData.java | 8 +++ .../calendar/api/CalendarsApiResource.java | 59 +++++++++------ .../service/CalendarReadPlatformService.java | 10 +-- .../CalendarReadPlatformServiceImpl.java | 71 ++++++++++++++----- 4 files changed, 106 insertions(+), 42 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/data/EnumOptionData.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/data/EnumOptionData.java index aa34ddaad..35c3c011d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/data/EnumOptionData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/data/EnumOptionData.java @@ -26,4 +26,12 @@ public class EnumOptionData { public Long getId() { return id; } + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } } \ No newline at end of file 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 c3dc9ae90..f115fc694 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 @@ -5,25 +5,6 @@ */ package org.mifosplatform.portfolio.calendar.api; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriInfo; - import org.mifosplatform.commands.domain.CommandWrapper; import org.mifosplatform.commands.service.CommandWrapperBuilder; import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService; @@ -37,12 +18,20 @@ 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; import org.springframework.stereotype.Component; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; +import java.util.*; + @Path("/{entityType}/{entityId}/calendars") @Component @Scope("singleton") @@ -102,23 +91,24 @@ public class CalendarsApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public String retrieveCalendarsByEntity(@PathParam("entityType") final String entityType, @PathParam("entityId") final Long entityId, - @Context final UriInfo uriInfo) { + @Context final UriInfo uriInfo, @QueryParam("calendarType") String calendarType) { this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); final Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); Collection calendarsData = new ArrayList(); + List calendarTypeOptions = createEnumOptionDataListFromQueryParameter(calendarType); if (!associationParameters.isEmpty()) { if (associationParameters.contains("parentCalendars")) { calendarsData.addAll(this.readPlatformService.retrieveParentCalendarsByEntity(entityId, - CalendarEntityType.valueOf(entityType.toUpperCase()).getValue())); + CalendarEntityType.valueOf(entityType.toUpperCase()).getValue(),calendarTypeOptions)); } } calendarsData.addAll(this.readPlatformService.retrieveCalendarsByEntity(entityId, - CalendarEntityType.valueOf(entityType.toUpperCase()).getValue())); + CalendarEntityType.valueOf(entityType.toUpperCase()).getValue(),calendarTypeOptions)); // Add recurring dates calendarsData = this.readPlatformService.generateRecurringDates(calendarsData); @@ -192,4 +182,29 @@ public class CalendarsApiResource { final List remindByOptions = this.dropdownReadPlatformService.retrieveCalendarRemindByOptions(); return new CalendarData(calendarData, entityTypeOptions, calendarTypeOptions, remindByOptions); } + + + public List createEnumOptionDataListFromQueryParameter(String calendarTypeQuery) { + List calendarTypeOptions = null; + // creating a list of calendar type options from the comma separated query parameter. + List calendarTypeOptionsInQuery = new ArrayList(); + StringTokenizer st = new StringTokenizer(calendarTypeQuery, ","); + while (st.hasMoreElements()) { + calendarTypeOptionsInQuery.add(st.nextElement().toString()); + } + + for(String calType : calendarTypeOptionsInQuery){ + if(calType.equalsIgnoreCase("collection")) { + calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.COLLECTION)); + } else if(calType.equalsIgnoreCase("training")) { + calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.TRAINING)); + } else if(calType.equalsIgnoreCase("audit")) { + calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.AUDIT)); + } else if(calType.equalsIgnoreCase("general")) { + calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.GENERAL)); + } + } + return calendarTypeOptions; + } + } \ No newline at end of file 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 dc75f2f9f..3a70381a3 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,17 +5,19 @@ */ package org.mifosplatform.portfolio.calendar.service; -import java.util.Collection; - +import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.portfolio.calendar.data.CalendarData; +import java.util.Collection; +import java.util.List; + public interface CalendarReadPlatformService { CalendarData retrieveCalendar(final Long calendarId, Long entityId, Integer entityTypeId); - Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId); + Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions); - Collection retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId); + Collection retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions); Collection retrieveAllCalendars(); 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 fe82f7991..c8d28d219 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 @@ -5,11 +5,6 @@ */ package org.mifosplatform.portfolio.calendar.service; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; - import org.joda.time.LocalDate; import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.domain.JdbcSupport; @@ -25,6 +20,12 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + @Service public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformService { @@ -98,24 +99,43 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ } @Override - public Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId) { + public Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId, List calendarTypeOptions) { final CalendarDataMapper rm = new CalendarDataMapper(); - - final String sql = rm.schema() + " and ci.entity_id = ? and ci.entity_type_enum = ? order by c.start_date "; - - return this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); + // the collection result will store the final result + Collection result=null; + // string sql is the sql statement that will be executed by jdbc. + String sql=""; + // if calendarType options are not given by user then return all calendars. + if(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}); + } + return result; } - + @Override - public Collection retrieveParentCalendarsByEntity(Long entityId, Integer entityTypeId) { - + public Collection retrieveParentCalendarsByEntity( Long entityId, Integer entityTypeId, List calendarTypeOptions ) { + final CalendarDataMapper rm = new CalendarDataMapper(); + Collection result=null; + String sql=""; CalendarEntityType ceType = CalendarEntityType.fromInt(entityTypeId); String parentHeirarchyCondition = getParentHierarchyCondition(ceType); - final String sql = rm.schema() + " " + parentHeirarchyCondition - + " and ci.entity_type_enum = ? order by c.start_date "; + //FIXME :AA center is the parent entity of group, change this code to support more parent entity types. - return this.jdbcTemplate.query(sql, rm, new Object[] { entityId, CalendarEntityType.CENTERS.getValue() }); + if(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}); + } + return result; } @Override @@ -210,4 +230,23 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ return conditionSql; } + /** + * 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) + * @param calendarTypeOptions + * @return + */ + public String createSqlValuesInString(List calendarTypeOptions){ + int size = calendarTypeOptions.size(); + String sqlCalendarTypeOptions = "(" + calendarTypeOptions.get(0).getId().toString(); + for(int i=1;i Date: Wed, 8 May 2013 12:03:17 +0530 Subject: [PATCH 2/3] Issue-331 --- .../calendar/api/CalendarsApiResource.java | 11 ++++-- .../CalendarReadPlatformServiceImpl.java | 2 +- .../service/LoanReadPlatformServiceImpl.java | 34 ++++++------------- 3 files changed, 21 insertions(+), 26 deletions(-) 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 f115fc694..d9fa91303 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 @@ -91,15 +91,17 @@ public class CalendarsApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public String retrieveCalendarsByEntity(@PathParam("entityType") final String entityType, @PathParam("entityId") final Long entityId, - @Context final UriInfo uriInfo, @QueryParam("calendarType") String calendarType) { + @Context final UriInfo uriInfo,@DefaultValue("all") @QueryParam("calendarType") String calendarType) { this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); final Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); Collection calendarsData = new ArrayList(); + List calendarTypeOptions = createEnumOptionDataListFromQueryParameter(calendarType); + if (!associationParameters.isEmpty()) { if (associationParameters.contains("parentCalendars")) { calendarsData.addAll(this.readPlatformService.retrieveParentCalendarsByEntity(entityId, @@ -185,7 +187,11 @@ public class CalendarsApiResource { public List createEnumOptionDataListFromQueryParameter(String calendarTypeQuery) { - List calendarTypeOptions = null; + List calendarTypeOptions = new ArrayList(); + // adding all calendar Types if + if(calendarTypeQuery.equalsIgnoreCase("all")){ + return calendarTypeOptions; + } // creating a list of calendar type options from the comma separated query parameter. List calendarTypeOptionsInQuery = new ArrayList(); StringTokenizer st = new StringTokenizer(calendarTypeQuery, ","); @@ -204,6 +210,7 @@ public class CalendarsApiResource { calendarTypeOptions.add(CalendarEnumerations.calendarType(CalendarType.GENERAL)); } } + return calendarTypeOptions; } 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 c8d28d219..3ae02e02a 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 @@ -111,7 +111,7 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ 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 "; + 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}); } return result; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 2d53cecd3..0792a2d9e 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -5,13 +5,6 @@ */ package org.mifosplatform.portfolio.loanaccount.service; -import java.math.BigDecimal; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - import org.joda.time.Days; import org.joda.time.LocalDate; import org.mifosplatform.infrastructure.codes.data.CodeValueData; @@ -38,20 +31,8 @@ import org.mifosplatform.portfolio.fund.data.FundData; import org.mifosplatform.portfolio.fund.service.FundReadPlatformService; import org.mifosplatform.portfolio.group.data.GroupGeneralData; import org.mifosplatform.portfolio.group.service.GroupReadPlatformService; -import org.mifosplatform.portfolio.loanaccount.data.DisbursementData; -import org.mifosplatform.portfolio.loanaccount.data.LoanAccountData; -import org.mifosplatform.portfolio.loanaccount.data.LoanApplicationTimelineData; -import org.mifosplatform.portfolio.loanaccount.data.LoanStatusEnumData; -import org.mifosplatform.portfolio.loanaccount.data.LoanSummaryData; -import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionData; -import org.mifosplatform.portfolio.loanaccount.data.LoanTransactionEnumData; -import org.mifosplatform.portfolio.loanaccount.data.PaymentDetailData; -import org.mifosplatform.portfolio.loanaccount.data.RepaymentScheduleRelatedLoanData; -import org.mifosplatform.portfolio.loanaccount.domain.Loan; -import org.mifosplatform.portfolio.loanaccount.domain.LoanRepository; -import org.mifosplatform.portfolio.loanaccount.domain.LoanTransaction; -import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionRepository; -import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionType; +import org.mifosplatform.portfolio.loanaccount.data.*; +import org.mifosplatform.portfolio.loanaccount.domain.*; import org.mifosplatform.portfolio.loanaccount.exception.LoanNotFoundException; import org.mifosplatform.portfolio.loanaccount.exception.LoanTransactionNotFoundException; import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanScheduleData; @@ -70,6 +51,13 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + @Service public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { @@ -847,8 +835,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { @Override public Collection retrieveCalendars(Long groupId) { Collection calendarsData = new ArrayList(); - calendarsData.addAll(this.calendarReadPlatformService.retrieveParentCalendarsByEntity(groupId,CalendarEntityType.GROUPS.getValue())); - calendarsData.addAll(this.calendarReadPlatformService.retrieveCalendarsByEntity(groupId,CalendarEntityType.GROUPS.getValue())); + calendarsData.addAll(this.calendarReadPlatformService.retrieveParentCalendarsByEntity(groupId,CalendarEntityType.GROUPS.getValue(),null)); + calendarsData.addAll(this.calendarReadPlatformService.retrieveCalendarsByEntity(groupId,CalendarEntityType.GROUPS.getValue(),null)); calendarsData = this.calendarReadPlatformService.generateRecurringDates(calendarsData); return calendarsData; } From 97b8dab831cf16ced8adc7ccb2c6eab28a6a194d Mon Sep 17 00:00:00 2001 From: kushagrasingh Date: Wed, 8 May 2013 12:11:42 +0530 Subject: [PATCH 3/3] Issue-331 --- .../calendar/service/CalendarReadPlatformServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 3ae02e02a..5591c5bd3 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 @@ -106,7 +106,7 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ // string sql is the sql statement that will be executed by jdbc. String sql=""; // if calendarType options are not given by user then return all calendars. - if(calendarTypeOptions.isEmpty()) { + if(calendarTypeOptions.isEmpty() || calendarTypeOptions == null) { 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()){ @@ -127,7 +127,7 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ String parentHeirarchyCondition = getParentHierarchyCondition(ceType); //FIXME :AA center is the parent entity of group, change this code to support more parent entity types. - if(calendarTypeOptions.isEmpty()){ + if(calendarTypeOptions.isEmpty() || calendarTypeOptions == null){ 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 {