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 e95e180be..acbd95e0e 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 @@ -28,6 +28,7 @@ import org.joda.time.LocalDate; import org.mifosplatform.commands.domain.CommandWrapper; import org.mifosplatform.commands.service.CommandWrapperBuilder; import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService; +import org.mifosplatform.infrastructure.core.api.ApiParameterHelper; import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.data.EnumOptionData; @@ -107,9 +108,21 @@ public class CalendarsApiResource { @Context final UriInfo uriInfo) { this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); + + final Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); + + Collection calendarsData = new ArrayList(); + + if (!associationParameters.isEmpty()) { + if (associationParameters.contains("parentCalendars")) { + calendarsData.addAll(this.readPlatformService.retrieveParentCalendarsByEntity(entityId, + CalendarEntityType.valueOf(entityType.toUpperCase()).getValue())); + } + } + + calendarsData.addAll(this.readPlatformService.retrieveCalendarsByEntity(entityId, CalendarEntityType.valueOf(entityType.toUpperCase()) + .getValue())); - Collection calendarsData = this.readPlatformService.retrieveCalendarsByEntity(entityId, - CalendarEntityType.valueOf(entityType.toUpperCase()).getValue()); //Add recurring dates calendarsData = handleRecurringDates(calendarsData); 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 a9d464b4d..6eb205d94 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 @@ -14,6 +14,8 @@ public interface CalendarReadPlatformService { CalendarData retrieveCalendar(final Long calendarId, Long entityId, Integer entityTypeId); Collection retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId); + + Collection retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId); 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 10ad87c2f..de1018657 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 @@ -14,6 +14,7 @@ import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.domain.JdbcSupport; import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; import org.mifosplatform.portfolio.calendar.data.CalendarData; +import org.mifosplatform.portfolio.calendar.domain.CalendarEntityType; import org.mifosplatform.portfolio.calendar.exception.CalendarNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; @@ -101,6 +102,18 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ return this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); } + + @Override + public Collection retrieveParentCalendarsByEntity(Long entityId, Integer entityTypeId) { + + final CalendarDataMapper rm = new CalendarDataMapper(); + 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 "; + + return this.jdbcTemplate.query(sql, rm, new Object[] { entityId, CalendarEntityType.GROUPS.getValue() }); + } @Override public Collection retrieveAllCalendars() { @@ -116,5 +129,32 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ public CalendarData retrieveNewCalendarDetails() { return CalendarData.sensibleDefaultsForNewCalendarCreation(); } + + 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? + 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 + conditionSql = " and ci.entity_id = ? ) "; + break; + + case LOANS: + //TODO : AA: do we need parent hierarchy calendars for loans? + conditionSql = " and ci.entity_id = ? ) "; + break; + + default: + break; + } + + return conditionSql; + } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarWrapperService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarWrapperService.java index 2fe574877..88844099f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarWrapperService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/service/CalendarWrapperService.java @@ -43,16 +43,17 @@ public class CalendarWrapperService { public Collection getNextRecurrencesList(final CalendarData calendarData) { int maxCount = 10;//Default number of recurring dates - return getNextRecurrencesList(calendarData, maxCount); + LocalDate periodStartDate = new LocalDate(Calendar.getInstance().getTime()); + return getNextRecurrencesList(calendarData, maxCount, periodStartDate); } - public Collection getNextRecurrencesList(final CalendarData calendarData, int maxCount) { + public Collection getNextRecurrencesList(final CalendarData calendarData, int maxCount, final LocalDate psDate) { final Recur recur = getRecur(calendarData); if (recur == null) { return null; } final Date seed = new Date(calendarData.getStartDate().toDate()); - final DateTime periodStart = new DateTime(calendarData.getStartDate().toDate()); + final DateTime periodStart = new DateTime(psDate.toDate()); Calendar endDate = Calendar.getInstance(); endDate.setTime(calendarData.getStartDate().toDate()); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java index cf7069d84..577a68706 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java @@ -43,7 +43,8 @@ public final class LoanApplicationCommandFromApiJsonHelper { "submittedOnDate", "submittedOnNote", // "accountNo", "externalId", "fundId", "loanOfficerId", // optional "loanPurposeId", "inArrearsTolerance", "charges", "collateral", // optional - "transactionProcessingStrategyId" // settings + "transactionProcessingStrategyId", // settings + "calendarId" // optional )); private final FromJsonHelper fromApiJsonHelper; @@ -207,6 +208,12 @@ public final class LoanApplicationCommandFromApiJsonHelper { baseDataValidator.reset().parameter(transactionProcessingStrategyIdParameterName).value(transactionProcessingStrategyId).notNull() .integerGreaterThanZero(); + final String calendarIdParameterName = "calendarId"; + if (fromApiJsonHelper.parameterExists(calendarIdParameterName, element)) { + final Long calendarId = fromApiJsonHelper.extractLongNamed(calendarIdParameterName, element); + baseDataValidator.reset().parameter(calendarIdParameterName).value(calendarId).ignoreIfNull().integerGreaterThanZero(); + } + // charges final String chargesParameterName = "charges"; if (element.isJsonObject() && fromApiJsonHelper.parameterExists(chargesParameterName, element)) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java index a4cf5bdc7..2a9673433 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java @@ -138,6 +138,12 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa Note note = Note.loanNote(newLoanApplication, submittedOnNote); this.noteRepository.save(note); } + + //get calendar + final Long calendarId = command.longValueOfParameterNamed("calendarId"); + if(calendarId != null && calendarId != 0){ + //Save calendar instance + } return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) //