diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index 47902bb85..bf4364b86 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -2053,7 +2053,8 @@ Content-Type: application/json Request Body:
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"active": true,
- "activationDate": "04 March 2009"
+ "activationDate": "04 March 2009",
+ "submittedOnDate":"04 March 2009"
}
@@ -2378,6 +2379,16 @@ GET https://DomainName/api/v1/clients/{clientId}
"displayName": "Client of group",
"officeId": 1,
"officeName": "Head Office",
+ "timeline": {
+ "activatedOnDate": [
+ 2009,
+ 3,
+ 4
+ ],
+ "activatedByUsername": "mifos",
+ "activatedByFirstname": "App",
+ "activatedByLastname": "Administrator"
+ },
"groups": [
{
"id": 1,
@@ -3908,7 +3919,8 @@ Content-Type: application/json Request Body:
"dateFormat": "dd MMMM yyyy",
"locale": "en",
"active": true,
- "activationDate": "04 March 2009"
+ "activationDate": "04 March 2009",
+ "submittedOnDate":"04 March 2009"
}
@@ -4127,7 +4139,17 @@ GET https://DomainName/mifosng-provider/api/v1/groups/1
"externalId": "000-1A",
"officeId": 1,
"officeName": "Head Office",
- "hierarchy": ".1."
+ "hierarchy": ".1.",
+ "timeline": {
+ "activatedOnDate": [
+ 2013,
+ 11,
+ 14
+ ],
+ "activatedByUsername": "mifos",
+ "activatedByFirstname": "App",
+ "activatedByLastname": "Administrator"
+ }
}
@@ -4144,6 +4166,16 @@ GET https://DomainName/mifosng-provider/api/v1/groups/1?associations=clientMembe
"officeId": 1,
"officeName": "Head Office",
"hierarchy": ".1.",
+ "timeline": {
+ "activatedOnDate": [
+ 2013,
+ 11,
+ 14
+ ],
+ "activatedByUsername": "mifos",
+ "activatedByFirstname": "App",
+ "activatedByLastname": "Administrator"
+ },
"clientMembers": [
{
"id": 1,
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientApiConstants.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientApiConstants.java
index 077a480ce..aa53e669f 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientApiConstants.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientApiConstants.java
@@ -57,7 +57,7 @@ public class ClientApiConstants {
public static final Set CLIENT_CREATE_REQUEST_DATA_PARAMETERS = new HashSet(Arrays.asList(localeParamName,
dateFormatParamName, groupIdParamName, accountNoParamName, externalIdParamName, mobileNoParamName, firstnameParamName,
middlenameParamName, lastnameParamName, fullnameParamName, officeIdParamName, activeParamName, activationDateParamName,
- staffIdParamName));
+ staffIdParamName,submittedOnDateParamName));
public static final Set CLIENT_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet(Arrays.asList(localeParamName,
dateFormatParamName, accountNoParamName, externalIdParamName, mobileNoParamName, firstnameParamName, middlenameParamName,
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientDataValidator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientDataValidator.java
index 32b04cdf2..caff2cb07 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientDataValidator.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/data/ClientDataValidator.java
@@ -132,6 +132,12 @@ public final class ClientDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
}
+ if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.submittedOnDateParamName, element))
+ {
+ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(ClientApiConstants.submittedOnDateParamName, element);
+ baseDataValidator.reset().parameter(ClientApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
+ }
+
throwExceptionIfValidationWarningsExist(dataValidationErrors);
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java
index 0e1322129..3adf5cba1 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java
@@ -214,6 +214,18 @@ public final class Client extends AbstractPersistable {
throw new PlatformApiDataValidationException(dataValidationErrors);
}
+ if(activationDate !=null && submittedOnDate.isAfter(activationDate)) {
+
+ final String defaultUserMessage = "submitted date cannot be after the activation date";
+ final ApiParameterError error = ApiParameterError.parameterError("error.msg.clients.submittedOnDate.after.activation.date",
+ defaultUserMessage, ClientApiConstants.submittedOnDateParamName, submittedOnDate);
+
+ final List dataValidationErrors = new ArrayList();
+ dataValidationErrors.add(error);
+
+ throw new PlatformApiDataValidationException(dataValidationErrors);
+ }
+
this.submittedOnDate = submittedOnDate.toDate();
this.submittedBy = currentUser;
@@ -325,6 +337,7 @@ public final class Client extends AbstractPersistable {
throw new PlatformApiDataValidationException(dataValidationErrors);
}
+
this.activationDate = activationLocalDate.toDate();
this.activatedBy = currentUser;
this.officeJoiningDate = this.activationDate;
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java
index 4c7d4a54e..ed4edf4ab 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupingTypesApiConstants.java
@@ -65,7 +65,7 @@ public class GroupingTypesApiConstants {
public static final Set CENTER_REQUEST_DATA_PARAMETERS = new HashSet(Arrays.asList(localeParamName,
dateFormatParamName, idParamName, nameParamName, externalIdParamName, officeIdParamName, staffIdParamName, activeParamName,
- activationDateParamName, groupMembersParamName));
+ activationDateParamName, groupMembersParamName,submittedOnDateParamName));
public static final Set GROUP_REQUEST_DATA_PARAMETERS = new HashSet(Arrays.asList(localeParamName, dateFormatParamName,
idParamName, nameParamName, externalIdParamName, centerIdParamName, officeIdParamName, staffIdParamName, activeParamName,
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/domain/Group.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/domain/Group.java
index c06b50210..22f60c6a2 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/domain/Group.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/domain/Group.java
@@ -188,6 +188,18 @@ public final class Group extends AbstractPersistable {
throw new PlatformApiDataValidationException(dataValidationErrors);
}
+ if(activationDate != null && submittedOnDate.isAfter(activationDate)) {
+
+ final String defaultUserMessage = "submitted date cannot be after the activation date";
+ final ApiParameterError error = ApiParameterError.parameterError("error.msg.group.submittedOnDate.after.activation.date",
+ defaultUserMessage, GroupingTypesApiConstants.submittedOnDateParamName, submittedOnDate);
+
+ final List dataValidationErrors = new ArrayList();
+ dataValidationErrors.add(error);
+
+ throw new PlatformApiDataValidationException(dataValidationErrors);
+ }
+
this.submittedOnDate = submittedOnDate.toDate();
this.submittedBy = currentUser;
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupingTypesDataValidator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupingTypesDataValidator.java
index 41ac94d6d..43e617b6d 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupingTypesDataValidator.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupingTypesDataValidator.java
@@ -97,6 +97,12 @@ public final class GroupingTypesDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
}
+ if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element))
+ {
+ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(GroupingTypesApiConstants.submittedOnDateParamName, element);
+ baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
+ }
+
throwExceptionIfValidationWarningsExist(dataValidationErrors);
}
@@ -155,6 +161,12 @@ public final class GroupingTypesDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
}
+ if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element))
+ {
+ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(GroupingTypesApiConstants.submittedOnDateParamName, element);
+ baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
+ }
+
throwExceptionIfValidationWarningsExist(dataValidationErrors);
}
@@ -209,6 +221,12 @@ public final class GroupingTypesDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
}
+ if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element))
+ {
+ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(GroupingTypesApiConstants.submittedOnDateParamName, element);
+ baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
+ }
+
throwExceptionIfValidationWarningsExist(dataValidationErrors);
}