diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java index 357e19f0c..e545a4071 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java @@ -156,13 +156,13 @@ public class CalendarCommandFromApiJsonDeserializer extends AbstractFromApiJsonD if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.FIRST_REMINDER.getValue(), element)) { final Integer firstReminder = this.fromApiJsonHelper.extractIntegerSansLocaleNamed( CALENDAR_SUPPORTED_PARAMETERS.FIRST_REMINDER.getValue(), element); - baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.FIRST_REMINDER.getValue()).value(firstReminder).notNull(); + baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.FIRST_REMINDER.getValue()).value(firstReminder).ignoreIfNull().integerGreaterThanZero(); } if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER.getValue(), element)) { final Integer secondReminder = this.fromApiJsonHelper.extractIntegerSansLocaleNamed( CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER.getValue(), element); - baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER.getValue()).value(secondReminder).notNull(); + baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER.getValue()).value(secondReminder).ignoreIfNull().integerGreaterThanZero(); } if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/api/CollectionSheetApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/api/CollectionSheetApiResource.java index c82206ea4..2673f557a 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/api/CollectionSheetApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/api/CollectionSheetApiResource.java @@ -1,7 +1,9 @@ package org.mifosplatform.portfolio.collectionsheet.api; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; import javax.ws.rs.Consumes; @@ -15,12 +17,16 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriInfo; +import org.apache.commons.lang.StringUtils; 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.ApiRequestParameterHelper; +import org.mifosplatform.infrastructure.core.data.ApiParameterError; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; +import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder; +import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.ToApiJsonSerializer; import org.mifosplatform.infrastructure.core.service.DateUtils; @@ -46,7 +52,7 @@ public class CollectionSheetApiResource { /* * dueDate format is ISO 8601 Calendar Date (YYYYMMDD) */ - private final String datePattern = "YYYYMMDD"; + private final String datePattern = "yyyyMMdd"; private final PlatformSecurityContext context; private final CollectionSheetReadPlatformService collectionSheetReadPlatformService; private final ToApiJsonSerializer toApiJsonSerializer; @@ -72,13 +78,37 @@ public class CollectionSheetApiResource { @QueryParam("dueDate") final String dueDate) { this.context.authenticatedUser().validateHasReadPermission("COLLECTIONSHEET"); - final LocalDate localDate = DateUtils.parseLocalDate(dueDate, this.datePattern); + + validateRequest(groupId, dueDate); + + LocalDate localDate = null; + if(StringUtils.isBlank(dueDate)){ + localDate = DateUtils.getLocalDateOfTenant(); + }else{ + localDate = DateUtils.parseLocalDate(dueDate, datePattern); + } + + final JLGCollectionSheetData collectionSheet = this.collectionSheetReadPlatformService.retriveCollectionSheet(localDate, groupId); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return this.toApiJsonSerializer.serialize(settings, collectionSheet, this.COLLECTIONSHEET_DATA_PARAMETERS); } + private void validateRequest(Long groupId, String dueDate) { + final List dataValidationErrors = new ArrayList(); + + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("collectionsheet"); + + baseDataValidator.reset().parameter("groupId").value(groupId).notBlank().longGreaterThanZero(); + + baseDataValidator.reset().parameter("dueDate").value(dueDate).notBlank(); + + if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", + "Validation errors exist.", dataValidationErrors); } + + } + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java index d75b130c5..aa8e51964 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java @@ -3,6 +3,8 @@ package org.mifosplatform.portfolio.collectionsheet.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -145,15 +147,15 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe // FIXME Need to check last loan is added under previous // client/group or new client / previous group or new client / new // group - - final ClientLoansData lastClientLoansData = corrCollectioSheetFlatData.getClientLoansData(); - lastClientLoansData.setLoans(loanDueDatas); - clientLoansDatas.add(lastClientLoansData); - - final JLGClientsData jlgClientsData = corrCollectioSheetFlatData.getJLGClientsData(); - jlgClientsData.setClients(clientLoansDatas); - - jlgClientsDatas.add(jlgClientsData); + if(corrCollectioSheetFlatData != null){ + final ClientLoansData lastClientLoansData = corrCollectioSheetFlatData.getClientLoansData(); + lastClientLoansData.setLoans(loanDueDatas); + clientLoansDatas.add(lastClientLoansData); + + final JLGClientsData jlgClientsData = corrCollectioSheetFlatData.getJLGClientsData(); + jlgClientsData.setClients(clientLoansDatas); + jlgClientsDatas.add(jlgClientsData); + } jlgCollectionSheetData = new JLGCollectionSheetData(dueDate, loanProducts, jlgClientsDatas); } @@ -167,9 +169,10 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe final JLGCollectionSheetFaltDataMapper mapper = new JLGCollectionSheetFaltDataMapper(); final String sql = mapper.collectionSheetSchema(); - + final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + final String dueDateStr = df.format(dueDate.toDate()); final SqlParameterSource namedParameters = new MapSqlParameterSource().addValue("hierarchy", groupHierarchy) - .addValue("dueDate", dueDate).addValue("officeHierarchy", officeHierarchy); + .addValue("dueDate", dueDateStr).addValue("officeHierarchy", officeHierarchy); return this.namedParameterjdbcTemplate.query(sql, namedParameters, mapper); }