Merge remote-tracking branch 'ashok/MIFOSX-256'

This commit is contained in:
Keith Woodlock
2013-03-19 17:20:23 +00:00
6 changed files with 75 additions and 6 deletions
@@ -28,6 +28,7 @@ import org.joda.time.LocalDate;
import org.mifosplatform.commands.domain.CommandWrapper; import org.mifosplatform.commands.domain.CommandWrapper;
import org.mifosplatform.commands.service.CommandWrapperBuilder; import org.mifosplatform.commands.service.CommandWrapperBuilder;
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService; 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.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.data.EnumOptionData;
@@ -107,9 +108,21 @@ public class CalendarsApiResource {
@Context final UriInfo uriInfo) { @Context final UriInfo uriInfo) {
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions);
final Set<String> associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters());
Collection<CalendarData> calendarsData = new ArrayList<CalendarData>();
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<CalendarData> calendarsData = this.readPlatformService.retrieveCalendarsByEntity(entityId,
CalendarEntityType.valueOf(entityType.toUpperCase()).getValue());
//Add recurring dates //Add recurring dates
calendarsData = handleRecurringDates(calendarsData); calendarsData = handleRecurringDates(calendarsData);
@@ -14,6 +14,8 @@ public interface CalendarReadPlatformService {
CalendarData retrieveCalendar(final Long calendarId, Long entityId, Integer entityTypeId); CalendarData retrieveCalendar(final Long calendarId, Long entityId, Integer entityTypeId);
Collection<CalendarData> retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId); Collection<CalendarData> retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId);
Collection<CalendarData> retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId);
Collection<CalendarData> retrieveAllCalendars(); Collection<CalendarData> retrieveAllCalendars();
@@ -14,6 +14,7 @@ import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.infrastructure.core.domain.JdbcSupport; import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource;
import org.mifosplatform.portfolio.calendar.data.CalendarData; import org.mifosplatform.portfolio.calendar.data.CalendarData;
import org.mifosplatform.portfolio.calendar.domain.CalendarEntityType;
import org.mifosplatform.portfolio.calendar.exception.CalendarNotFoundException; import org.mifosplatform.portfolio.calendar.exception.CalendarNotFoundException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
@@ -101,6 +102,18 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ
return this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId }); return this.jdbcTemplate.query(sql, rm, new Object[] { entityId, entityTypeId });
} }
@Override
public Collection<CalendarData> 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 @Override
public Collection<CalendarData> retrieveAllCalendars() { public Collection<CalendarData> retrieveAllCalendars() {
@@ -116,5 +129,32 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ
public CalendarData retrieveNewCalendarDetails() { public CalendarData retrieveNewCalendarDetails() {
return CalendarData.sensibleDefaultsForNewCalendarCreation(); 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;
}
} }
@@ -43,16 +43,17 @@ public class CalendarWrapperService {
public Collection<LocalDate> getNextRecurrencesList(final CalendarData calendarData) { public Collection<LocalDate> getNextRecurrencesList(final CalendarData calendarData) {
int maxCount = 10;//Default number of recurring dates 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<LocalDate> getNextRecurrencesList(final CalendarData calendarData, int maxCount) { public Collection<LocalDate> getNextRecurrencesList(final CalendarData calendarData, int maxCount, final LocalDate psDate) {
final Recur recur = getRecur(calendarData); final Recur recur = getRecur(calendarData);
if (recur == null) { return null; } if (recur == null) { return null; }
final Date seed = new Date(calendarData.getStartDate().toDate()); 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(); Calendar endDate = Calendar.getInstance();
endDate.setTime(calendarData.getStartDate().toDate()); endDate.setTime(calendarData.getStartDate().toDate());
@@ -43,7 +43,8 @@ public final class LoanApplicationCommandFromApiJsonHelper {
"submittedOnDate", "submittedOnNote", // "submittedOnDate", "submittedOnNote", //
"accountNo", "externalId", "fundId", "loanOfficerId", // optional "accountNo", "externalId", "fundId", "loanOfficerId", // optional
"loanPurposeId", "inArrearsTolerance", "charges", "collateral", // optional "loanPurposeId", "inArrearsTolerance", "charges", "collateral", // optional
"transactionProcessingStrategyId" // settings "transactionProcessingStrategyId", // settings
"calendarId" // optional
)); ));
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
@@ -207,6 +208,12 @@ public final class LoanApplicationCommandFromApiJsonHelper {
baseDataValidator.reset().parameter(transactionProcessingStrategyIdParameterName).value(transactionProcessingStrategyId).notNull() baseDataValidator.reset().parameter(transactionProcessingStrategyIdParameterName).value(transactionProcessingStrategyId).notNull()
.integerGreaterThanZero(); .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 // charges
final String chargesParameterName = "charges"; final String chargesParameterName = "charges";
if (element.isJsonObject() && fromApiJsonHelper.parameterExists(chargesParameterName, element)) { if (element.isJsonObject() && fromApiJsonHelper.parameterExists(chargesParameterName, element)) {
@@ -138,6 +138,12 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
Note note = Note.loanNote(newLoanApplication, submittedOnNote); Note note = Note.loanNote(newLoanApplication, submittedOnNote);
this.noteRepository.save(note); this.noteRepository.save(note);
} }
//get calendar
final Long calendarId = command.longValueOfParameterNamed("calendarId");
if(calendarId != null && calendarId != 0){
//Save calendar instance
}
return new CommandProcessingResultBuilder() // return new CommandProcessingResultBuilder() //
.withCommandId(command.commandId()) // .withCommandId(command.commandId()) //