From 43fe7265f5c0b6d009b0d70ede5d9639201b4139 Mon Sep 17 00:00:00 2001 From: goutham-M Date: Mon, 22 Jul 2013 15:43:01 +0530 Subject: [PATCH] A holiday's Reschedule Repayment to date should not be a non-working day --- ...WritePlatformServiceJpaRepositoryImpl.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java index 8618a15e0..3d028aa4b 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java @@ -18,6 +18,9 @@ import org.mifosplatform.organisation.holiday.exception.HolidayDateException; import org.mifosplatform.organisation.office.domain.Office; import org.mifosplatform.organisation.office.domain.OfficeRepository; import org.mifosplatform.organisation.office.exception.OfficeNotFoundException; +import org.mifosplatform.organisation.workingdays.domain.WorkingDays; +import org.mifosplatform.organisation.workingdays.domain.WorkingDaysRepositoryWrapper; +import org.mifosplatform.organisation.workingdays.service.WorkingDaysUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +38,8 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit private final HolidayDataValidator fromApiJsonDeserializer; private final HolidayRepository holidayRepository; + private final WorkingDaysRepositoryWrapper daysRepositoryWrapper; + private final PlatformSecurityContext context; private final OfficeRepository officeRepository; private final FromJsonHelper fromApiJsonHelper; @@ -42,12 +47,13 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit @Autowired public HolidayWritePlatformServiceJpaRepositoryImpl(final HolidayDataValidator fromApiJsonDeserializer, final HolidayRepository holidayRepository, final PlatformSecurityContext context, final OfficeRepository officeRepository, - final FromJsonHelper fromApiJsonHelper) { + final FromJsonHelper fromApiJsonHelper, final WorkingDaysRepositoryWrapper daysRepositoryWrapper) { this.fromApiJsonDeserializer = fromApiJsonDeserializer; this.holidayRepository = holidayRepository; this.context = context; this.officeRepository = officeRepository; this.fromApiJsonHelper = fromApiJsonHelper; + this.daysRepositoryWrapper = daysRepositoryWrapper; } @Transactional @@ -108,11 +114,30 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit final LocalDate fromDate = command.localDateValueOfParameterNamed(HolidayApiConstants.fromDate); final LocalDate toDate = command.localDateValueOfParameterNamed(HolidayApiConstants.toDate); final LocalDate repaymentsRescheduledTo = command.localDateValueOfParameterNamed(HolidayApiConstants.repaymentsRescheduledTo); + String defaultUserMessage = ""; + if (toDate.isBefore(fromDate)) { - final String defaultUserMessage = "To Date date cannot be before the From Date."; + defaultUserMessage = "To Date date cannot be before the From Date."; throw new HolidayDateException("to.date.cannot.be.before.from.date", defaultUserMessage, fromDate.toString(), toDate.toString()); } + if (repaymentsRescheduledTo.isEqual(fromDate) || repaymentsRescheduledTo.isEqual(toDate) + || (repaymentsRescheduledTo.isAfter(fromDate) && repaymentsRescheduledTo.isBefore(toDate))) { + + defaultUserMessage = "Repayments rescheduled date should be before from date or after to date."; + throw new HolidayDateException("repayments.rescheduled.date.should.be.before.from.date.or.after.to.date", defaultUserMessage, + repaymentsRescheduledTo.toString()); + } + + WorkingDays workingDays = this.daysRepositoryWrapper.findOne(); + Boolean isRepaymentOnWorkingDay = WorkingDaysUtil.isWorkingDay(workingDays, repaymentsRescheduledTo); + + if (!isRepaymentOnWorkingDay) { + defaultUserMessage = "Repayments rescheduled date should not fall on non working days"; + throw new HolidayDateException("repayments.rescheduled.date.should.not.fall.on.non.working.day", defaultUserMessage, + repaymentsRescheduledTo.toString()); + } + //validate repaymentsRescheduledTo date //1. should be within a 7 days date range. //2. Alternative date should not be an exist holiday.//TBD @@ -120,7 +145,7 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit //restricting repaymentsRescheduledTo date to be within 7 days range before or after from date and to date. if(repaymentsRescheduledTo.isBefore(fromDate.minusDays(7)) || repaymentsRescheduledTo.isAfter(toDate.plusDays(7))){ - final String defaultUserMessage = "Repayments Rescheduled to date must be within 7 days before or after from and to dates"; + defaultUserMessage = "Repayments Rescheduled to date must be within 7 days before or after from and to dates"; throw new HolidayDateException("repayments.rescheduled.to.must.be.within.range", defaultUserMessage, fromDate.toString(), toDate.toString(), repaymentsRescheduledTo.toString()); } }