MIFOSX-1468 - Added field 'Joining Date' for Staff
This commit is contained in:
+10
-4
@@ -13703,7 +13703,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">
|
||||
@@ -13738,7 +13741,8 @@ GET https://DomainName/api/v1/staff
|
||||
"officeName": "Head Office",
|
||||
"isLoanOfficer": true,
|
||||
"externalId": "17H",
|
||||
"isActive": "true"
|
||||
"isActive": "true",
|
||||
"joiningDate":[2009,8,1]
|
||||
}
|
||||
]
|
||||
</code>
|
||||
@@ -13765,7 +13769,8 @@ GET https://DomainName/api/v1/staff
|
||||
"officeName": "Head Office",
|
||||
"isLoanOfficer": true,
|
||||
"externalId": "17H",
|
||||
"isActive": "true"
|
||||
"isActive": "true",
|
||||
"joiningDate":[2009,8,1]
|
||||
}
|
||||
</code>
|
||||
</div>
|
||||
@@ -13794,7 +13799,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`),
|
||||
|
||||
+1
-1
@@ -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";
|
||||
|
||||
|
||||
+12
-5
@@ -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;
|
||||
}
|
||||
}
|
||||
+30
-2
@@ -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;
|
||||
}
|
||||
|
||||
+32
-1
@@ -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);
|
||||
}
|
||||
|
||||
+9
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user