Merge branch 'staffjoiningdate' of git://github.com/binnygopinath/mifosx into binnygopinath-staffjoiningdate

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