From b72c0074e64caafcc9fa4f61718b561af1538604 Mon Sep 17 00:00:00 2001 From: goutham-M Date: Thu, 27 Jun 2013 14:48:22 +0530 Subject: [PATCH] New group activation date is accepting before the office opening date(fixed) --- .../organisation/office/domain/Office.java | 2 +- .../InvalidGroupStateTransitionException.java | 18 +++++++++++++++++ ...WritePlatformServiceJpaRepositoryImpl.java | 20 ++++++++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/exception/InvalidGroupStateTransitionException.java diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/domain/Office.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/domain/Office.java index 0a90b1dd2..5994bedb2 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/domain/Office.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/domain/Office.java @@ -149,7 +149,7 @@ public class Office extends AbstractPersistable { return getOpeningLocalDate().isAfter(activationLocalDate); } - private LocalDate getOpeningLocalDate() { + public LocalDate getOpeningLocalDate() { LocalDate openingLocalDate = null; if (this.openingDate != null) { openingLocalDate = LocalDate.fromDateFields(this.openingDate); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/exception/InvalidGroupStateTransitionException.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/exception/InvalidGroupStateTransitionException.java new file mode 100644 index 000000000..23942057b --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/exception/InvalidGroupStateTransitionException.java @@ -0,0 +1,18 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.mifosplatform.portfolio.group.exception; + +import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException; + + +public class InvalidGroupStateTransitionException extends AbstractPlatformDomainRuleException { + + public InvalidGroupStateTransitionException(final String action, final String postFix, final String defaultUserMessage, + final Object... defaultUserMessageArgs) { + super("error.msg.group." + action + "." + postFix, defaultUserMessage, defaultUserMessageArgs); + } + +} diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java index 4b0e16425..6d3bac502 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java @@ -40,6 +40,7 @@ import org.mifosplatform.portfolio.group.exception.GroupHasNoStaffException; import org.mifosplatform.portfolio.group.exception.GroupLoanExistsException; import org.mifosplatform.portfolio.group.exception.GroupMustBePendingToBeDeletedException; import org.mifosplatform.portfolio.group.exception.InvalidGroupLevelException; +import org.mifosplatform.portfolio.group.exception.InvalidGroupStateTransitionException; import org.mifosplatform.portfolio.group.serialization.GroupingTypesDataValidator; import org.mifosplatform.portfolio.loanaccount.domain.Loan; import org.mifosplatform.portfolio.loanaccount.domain.LoanRepository; @@ -103,7 +104,16 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group final Office groupOffice = this.officeRepository.findOne(officeId); if (groupOffice == null) { throw new OfficeNotFoundException(officeId); } + + final LocalDate activationDate = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName); + if (groupOffice.getOpeningLocalDate().isAfter(activationDate)) { + final String errorMessage = "Group activation date should be greater than or equal to the parent Office's creation date " + + activationDate.toString(); + throw new InvalidGroupStateTransitionException("activate.date", "cannot.be.before.office.activation.date", errorMessage, activationDate, + groupOffice.getOpeningLocalDate()); + } + Staff staff = null; final Long staffId = command.longValueOfParameterNamed(GroupingTypesApiConstants.staffIdParamName); if (staffId != null) { @@ -115,7 +125,6 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group final Set groupMembers = assembleSetOfChildGroups(officeId, command); final boolean active = command.booleanPrimitiveValueOfParameterNamed(GroupingTypesApiConstants.activeParamName); - final LocalDate activationDate = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName); final GroupLevel groupLevel = this.groupLevelRepository.findOne(groupingType.getId()); final Group newGroup = Group.newGroup(groupOffice, staff, parentGroup, groupLevel, name, externalId, active, activationDate, clientMembers, groupMembers); @@ -220,6 +229,15 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group final String groupHierarchy = groupOffice.getHierarchy(); this.context.validateAccessRights(groupHierarchy); + + final LocalDate activationDate = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName); + + if (groupOffice.getOpeningLocalDate().isAfter(activationDate)) { + final String errorMessage = "Group activation date should be greater than or equal to the parent Office's creation date " + + activationDate.toString(); + throw new InvalidGroupStateTransitionException("activate.date", "cannot.be.before.office.activation.date", errorMessage, activationDate, + groupOffice.getOpeningLocalDate()); + } final Map actualChanges = groupForUpdate.update(command);