Merge branch 'binnygopinath-staffjoiningdate' into develop

This commit is contained in:
Vishwas Babu A J
2014-08-06 02:14:45 -07:00
8 changed files with 97 additions and 17 deletions
+10 -4
View File
@@ -14360,7 +14360,10 @@ Request Body:
"isLoanOfficer": "true",
"externalId": "17H",
"mobileNo": "+353851239876",
"isActive": "true"
"isActive": "true",
"joiningDate": "01 January 2009",
"locale":"en",
"dateFormat":"dd MMMM yyyy"
}
</code>
<code class="method-response">
@@ -14395,7 +14398,8 @@ GET https://DomainName/api/v1/staff
"officeName": "Head Office",
"isLoanOfficer": true,
"externalId": "17H",
"isActive": "true"
"isActive": "true",
"joiningDate":[2009,8,1]
}
]
</code>
@@ -14422,7 +14426,8 @@ GET https://DomainName/api/v1/staff
"officeName": "Head Office",
"isLoanOfficer": true,
"externalId": "17H",
"isActive": "true"
"isActive": "true",
"joiningDate":[2009,8,1]
}
</code>
</div>
@@ -14451,7 +14456,8 @@ GET https://DomainName/api/v1/staff
"officeName": "Head Office",
"isLoanOfficer": true,
"externalId": "17H",
"isActive": "true"
"isActive": "true",
"joiningDate":[2009,8,1]
}
</code>
</div>
@@ -0,0 +1,2 @@
alter table m_staff
add column joining_date date;
@@ -346,6 +346,7 @@ CREATE TABLE `m_staff` (
`firstname` varchar(50) DEFAULT NULL,
`lastname` varchar(50) DEFAULT NULL,
`display_name` varchar(100) NOT NULL,
`joining_date` date,
PRIMARY KEY (`id`),
UNIQUE KEY `display_name` (`display_name`),
KEY `FK_m_staff_m_office` (`office_id`),
@@ -49,7 +49,7 @@ public class StaffApiResource {
* {@link StaffData}.
*/
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("id", "firstname", "lastname", "displayName",
"officeId", "officeName", "isLoanOfficer", "externalId", "mobileNo", "allowedOffices", "isActive"));
"officeId", "officeName", "isLoanOfficer", "externalId", "mobileNo", "allowedOffices", "isActive", "dateJoined"));
private final String resourceNameForPermissions = "STAFF";
@@ -7,6 +7,7 @@ package org.mifosplatform.organisation.staff.data;
import java.util.Collection;
import org.joda.time.LocalDate;
import org.mifosplatform.organisation.office.data.OfficeData;
/**
@@ -24,29 +25,30 @@ public class StaffData {
private final String officeName;
private final Boolean isLoanOfficer;
private final Boolean isActive;
private final LocalDate joiningDate;
@SuppressWarnings("unused")
private final Collection<OfficeData> allowedOffices;
public static StaffData templateData(final StaffData staff, final Collection<OfficeData> allowedOffices) {
return new StaffData(staff.id, staff.firstname, staff.lastname, staff.displayName, staff.officeId, staff.officeName,
staff.isLoanOfficer, staff.externalId, staff.mobileNo, allowedOffices, staff.isActive);
staff.isLoanOfficer, staff.externalId, staff.mobileNo, allowedOffices, staff.isActive, staff.joiningDate);
}
public static StaffData lookup(final Long id, final String displayName) {
return new StaffData(id, null, null, displayName, null, null, null, null, null, null, null);
return new StaffData(id, null, null, displayName, null, null, null, null, null, null, null, null);
}
public static StaffData instance(final Long id, final String firstname, final String lastname, final String displayName,
final Long officeId, final String officeName, final Boolean isLoanOfficer, final String externalId, final String mobileNo,
final boolean isActive) {
final boolean isActive, final LocalDate joiningDate) {
return new StaffData(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo, null,
isActive);
isActive, joiningDate);
}
private StaffData(final Long id, final String firstname, final String lastname, final String displayName, final Long officeId,
final String officeName, final Boolean isLoanOfficer, final String externalId, final String mobileNo,
final Collection<OfficeData> allowedOffices, final Boolean isActive) {
final Collection<OfficeData> allowedOffices, final Boolean isActive, final LocalDate joiningDate) {
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
@@ -58,6 +60,7 @@ public class StaffData {
this.mobileNo = mobileNo;
this.allowedOffices = allowedOffices;
this.isActive = isActive;
this.joiningDate = joiningDate;
}
public Long getId() {
@@ -79,4 +82,8 @@ public class StaffData {
public String getOfficeName() {
return this.officeName;
}
public LocalDate getJoiningDate() {
return this.joiningDate;
}
}
@@ -5,6 +5,7 @@
*/
package org.mifosplatform.organisation.staff.domain;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -13,12 +14,16 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.organisation.office.domain.Office;
import org.mifosplatform.portfolio.client.api.ClientApiConstants;
import org.springframework.data.jpa.domain.AbstractPersistable;
@Entity
@@ -55,6 +60,10 @@ public class Staff extends AbstractPersistable<Long> {
@Column(name = "is_active", nullable = false)
private boolean active;
@Column(name = "joining_date", nullable = false)
@Temporal(TemporalType.DATE)
private Date joiningDate;
@ManyToOne
@JoinColumn(name = "organisational_role_parent_staff_id", nullable = true)
private Staff organisationalRoleParentStaff;
@@ -78,8 +87,15 @@ public class Staff extends AbstractPersistable<Long> {
final String isActiveParamName = "isActive";
final Boolean isActive = command.booleanObjectValueOfParameterNamed(isActiveParamName);
LocalDate joiningDate = null;
final String joiningDateParamName = "joiningDate";
if (command.hasParameter(joiningDateParamName)) {
joiningDate = command.localDateValueOfParameterNamed(joiningDateParamName);
}
return new Staff(staffOffice, firstname, lastname, externalId, mobileNo, isLoanOfficer, isActive);
return new Staff(staffOffice, firstname, lastname, externalId, mobileNo, isLoanOfficer, isActive, joiningDate);
}
protected Staff() {
@@ -87,7 +103,8 @@ public class Staff extends AbstractPersistable<Long> {
}
private Staff(final Office staffOffice, final String firstname, final String lastname, final String externalId, final String mobileNo,
final boolean isLoanOfficer, final Boolean isActive) {
final boolean isLoanOfficer, final Boolean isActive,
final LocalDate joiningDate) {
this.office = staffOffice;
this.firstname = StringUtils.defaultIfEmpty(firstname, null);
this.lastname = StringUtils.defaultIfEmpty(lastname, null);
@@ -96,6 +113,9 @@ public class Staff extends AbstractPersistable<Long> {
this.loanOfficer = isLoanOfficer;
this.active = (isActive == null) ? true : isActive;
deriveDisplayName(firstname);
if (joiningDate != null) {
this.joiningDate = joiningDate.toDateTimeAtStartOfDay().toDate();
}
}
public EnumOptionData organisationalRoleData() {
@@ -169,6 +189,14 @@ public class Staff extends AbstractPersistable<Long> {
actualChanges.put(isActiveParamName, newValue);
this.active = newValue;
}
final String joiningDateParamName = "joiningDate";
if (command.isChangeInDateParameterNamed(joiningDateParamName, this.joiningDate)) {
final String valueAsInput = command.stringValueOfParameterNamed(joiningDateParamName);
actualChanges.put(joiningDateParamName, valueAsInput);
final LocalDate newValue = command.localDateValueOfParameterNamed(joiningDateParamName);
this.joiningDate = newValue.toDate();
}
return actualChanges;
}
@@ -14,6 +14,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.data.ApiParameterError;
import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
@@ -33,7 +34,7 @@ public final class StaffCommandFromApiJsonDeserializer {
* The parameters supported for this command.
*/
private final Set<String> supportedParameters = new HashSet<>(Arrays.asList("firstname", "lastname", "officeId", "externalId",
"mobileNo", "isLoanOfficer", "isActive"));
"mobileNo", "isLoanOfficer", "isActive", "joiningDate", "dateFormat", "locale"));
private final FromJsonHelper fromApiJsonHelper;
@@ -77,6 +78,21 @@ public final class StaffCommandFromApiJsonDeserializer {
final Boolean activeFlag = this.fromApiJsonHelper.extractBooleanNamed("isActive", element);
baseDataValidator.reset().parameter("isActive").value(activeFlag).notNull();
}
if (this.fromApiJsonHelper.parameterExists("joiningDate", element)) {
final LocalDate joiningDate = this.fromApiJsonHelper.extractLocalDateNamed("joiningDate", element);
baseDataValidator.reset().parameter("joiningDate").value(joiningDate).notNull();
}
if (this.fromApiJsonHelper.parameterExists("dateFormat", element)) {
final String dateFormat = this.fromApiJsonHelper.extractStringNamed("dateFormat", element);
baseDataValidator.reset().parameter("dateFormat").value(dateFormat).notBlank();
}
if (this.fromApiJsonHelper.parameterExists("locale", element)) {
final String locale = this.fromApiJsonHelper.extractStringNamed("locale", element);
baseDataValidator.reset().parameter("locale").value(locale).notBlank();
}
throwExceptionIfValidationWarningsExist(dataValidationErrors);
}
@@ -120,6 +136,21 @@ public final class StaffCommandFromApiJsonDeserializer {
final Boolean activeFlag = this.fromApiJsonHelper.extractBooleanNamed("isActive", element);
baseDataValidator.reset().parameter("isActive").value(activeFlag).notNull();
}
if (this.fromApiJsonHelper.parameterExists("joiningDate", element)) {
final LocalDate joiningDate = this.fromApiJsonHelper.extractLocalDateNamed("joiningDate", element);
baseDataValidator.reset().parameter("joiningDate").value(joiningDate).notNull();
}
if (this.fromApiJsonHelper.parameterExists("dateFormat", element)) {
final String dateFormat = this.fromApiJsonHelper.extractStringNamed("dateFormat", element);
baseDataValidator.reset().parameter("dateFormat").value(dateFormat).notBlank();
}
if (this.fromApiJsonHelper.parameterExists("locale", element)) {
final String locale = this.fromApiJsonHelper.extractStringNamed("locale", element);
baseDataValidator.reset().parameter("locale").value(locale).notBlank();
}
throwExceptionIfValidationWarningsExist(dataValidationErrors);
}
@@ -10,6 +10,8 @@ import java.sql.SQLException;
import java.util.Collection;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
import org.mifosplatform.infrastructure.core.exception.UnrecognizedQueryParamException;
import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
@@ -39,7 +41,8 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
public String schema() {
return " s.id as id,s.office_id as officeId, o.name as officeName, s.firstname as firstname, s.lastname as lastname,"
+ " s.display_name as displayName, s.is_loan_officer as isLoanOfficer, s.external_id as externalId, s.mobile_no as mobileNo, s.is_active as isActive from m_staff s "
+ " s.display_name as displayName, s.is_loan_officer as isLoanOfficer, s.external_id as externalId, s.mobile_no as mobileNo,"
+ " s.is_active as isActive, s.joining_date as joiningDate from m_staff s "
+ " join m_office o on o.id = s.office_id";
}
@@ -56,9 +59,10 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
final String externalId = rs.getString("externalId");
final String mobileNo = rs.getString("mobileNo");
final boolean isActive = rs.getBoolean("isActive");
final LocalDate joiningDate = JdbcSupport.getLocalDate(rs, "joiningDate");
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo,
isActive);
isActive, joiningDate);
}
}
@@ -71,7 +75,7 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
sqlBuilder.append("s.id as id, s.office_id as officeId, ohierarchy.name as officeName,");
sqlBuilder.append("s.firstname as firstname, s.lastname as lastname,");
sqlBuilder.append("s.display_name as displayName, s.is_loan_officer as isLoanOfficer, s.external_id as externalId, ");
sqlBuilder.append("s.mobile_no as mobileNo, s.is_active as isActive ");
sqlBuilder.append("s.mobile_no as mobileNo, s.is_active as isActive, s.joining_date as joiningDate ");
sqlBuilder.append("from m_office o ");
sqlBuilder.append("join m_office ohierarchy on o.hierarchy like concat(ohierarchy.hierarchy, '%') ");
sqlBuilder.append("join m_staff s on s.office_id = ohierarchy.id and s.is_active=1 ");
@@ -98,9 +102,10 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
final String externalId = rs.getString("externalId");
final String mobileNo = rs.getString("mobileNo");
final boolean isActive = rs.getBoolean("isActive");
final LocalDate joiningDate = JdbcSupport.getLocalDate(rs, "joiningDate");
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo,
isActive);
isActive, joiningDate);
}
}