wip:MIFOSX-256 - attaching calendar to loan

This commit is contained in:
ashok-conflux
2013-03-19 20:51:38 +05:30
parent cb8b8e72d1
commit 473b579df3
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.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<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
calendarsData = handleRecurringDates(calendarsData);
@@ -14,6 +14,8 @@ public interface CalendarReadPlatformService {
CalendarData retrieveCalendar(final Long calendarId, Long entityId, Integer entityTypeId);
Collection<CalendarData> retrieveCalendarsByEntity(final Long entityId, final Integer entityTypeId);
Collection<CalendarData> retrieveParentCalendarsByEntity(final Long entityId, final Integer entityTypeId);
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.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<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
public Collection<CalendarData> 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;
}
}
@@ -43,16 +43,17 @@ public class CalendarWrapperService {
public Collection<LocalDate> 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<LocalDate> getNextRecurrencesList(final CalendarData calendarData, int maxCount) {
public Collection<LocalDate> 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());
@@ -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)) {
@@ -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()) //