Merge pull request #498 from johnw65/externalIds

mifosx-567 externalId updates (this for staff)
This commit is contained in:
John Woodlock
2013-07-31 09:38:04 -07:00
7 changed files with 52 additions and 22 deletions
+11 -6
View File
@@ -861,7 +861,7 @@
<tr>
<td><a href="#staff">Staff</a></td>
<td>staff</td>
<td><a href="#staff_create">Create a Staff</a></td>
<td><a href="#staff_create">Create a Staff Member</a></td>
<td><a href="#staff_list">List Staff</a></td>
<td></td>
<td></td>
@@ -10029,7 +10029,8 @@ Request Body:
"officeId": 1,
"firstname": "John",
"lastname": "Doe",
"isLoanOfficer": "true"
"isLoanOfficer": "true",
"externalId": "17H"
}
</code>
<code class="method-response">
@@ -10062,7 +10063,8 @@ GET https://DomainName/api/v1/staff
"displayName": "Doe, John",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true
"isLoanOfficer": true,
"externalId": "17H"
}
]
</code>
@@ -10087,7 +10089,8 @@ GET https://DomainName/api/v1/staff
"displayName": "Doe, John",
"officeId": 1,
"officeName": "Head Office",
"isLoanOfficer": true
"isLoanOfficer": true,
"externalId": "17H"
}
</code>
</div>
@@ -10108,7 +10111,8 @@ PUT staff/1
Content-Type: application/json
Request Body:
{
"isLoanOfficer": "false"
"isLoanOfficer": "false",
"externalId": "17Hbb"
}
</code>
<code class="method-response">
@@ -10116,7 +10120,8 @@ Request Body:
"officeId": 1,
"resourceId": 1,
"changes": {
"isLoanOfficer": false
"isLoanOfficer": false,
"externalId": "17Hbb"
}
}
</code>
@@ -48,7 +48,7 @@ public class StaffApiResource {
* {@link StaffData}.
*/
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "firstname", "lastname", "displayName",
"officeId", "officeName", "loanOfficerFlag", "allowedOffices"));
"officeId", "officeName", "loanOfficerFlag", "externalId", "allowedOffices"));
private final String resourceNameForPermissions = "STAFF";
@@ -21,32 +21,34 @@ public class StaffData {
private final Long officeId;
private final String officeName;
private final Boolean isLoanOfficer;
private final String externalId;
@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, allowedOffices);
staff.isLoanOfficer, staff.externalId, allowedOffices);
}
public static StaffData lookup(final Long id, final String displayName) {
return new StaffData(id, null, null, displayName, null, null, null, null);
return new StaffData(id, null, null, displayName, 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) {
return new StaffData(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, null);
final Long officeId, final String officeName, final Boolean isLoanOfficer, final String externalId) {
return new StaffData(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, null);
}
private StaffData(final Long id, final String firstname, final String lastname, final String displayName, final Long officeId,
final String officeName, final Boolean isLoanOfficer, final Collection<OfficeData> allowedOffices) {
final String officeName, final Boolean isLoanOfficer, final String externalId, final Collection<OfficeData> allowedOffices) {
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
this.displayName = displayName;
this.officeName = officeName;
this.isLoanOfficer = isLoanOfficer;
this.externalId = externalId;
this.officeId = officeId;
this.allowedOffices = allowedOffices;
}
@@ -34,6 +34,9 @@ public class Staff extends AbstractPersistable<Long> {
@Column(name = "display_name", length = 100)
private String displayName;
@Column(name = "external_id", length = 100, nullable = true, unique = true)
private String externalId;
// Office to which this employee belongs
@ManyToOne
@JoinColumn(name = "office_id", nullable = false)
@@ -58,25 +61,29 @@ public class Staff extends AbstractPersistable<Long> {
final String lastnameParamName = "lastname";
String lastname = command.stringValueOfParameterNamed(lastnameParamName);
final String externalIdParamName = "externalId";
String externalId = command.stringValueOfParameterNamed(externalIdParamName);
final String isLoanOfficerParamName = "isLoanOfficer";
final boolean isLoanOfficer = command.booleanPrimitiveValueOfParameterNamed(isLoanOfficerParamName);
return new Staff(staffOffice, firstname, lastname, isLoanOfficer);
return new Staff(staffOffice, firstname, lastname, externalId, isLoanOfficer);
}
public static Staff createNew(final Office staffOffice, final String firstname, final String lastname, final boolean isLoanOfficer) {
return new Staff(staffOffice, firstname, lastname, isLoanOfficer);
public static Staff createNew(final Office staffOffice, final String firstname, final String lastname, final String externalId, final boolean isLoanOfficer) {
return new Staff(staffOffice, firstname, lastname, externalId, isLoanOfficer);
}
protected Staff() {
//
}
private Staff(final Office staffOffice, final String firstname, final String lastname, final boolean isLoanOfficer) {
private Staff(final Office staffOffice, final String firstname, final String lastname, final String externalId, final boolean isLoanOfficer) {
this.office = staffOffice;
this.firstname = StringUtils.defaultIfEmpty(firstname, null);
this.lastname = StringUtils.defaultIfEmpty(lastname, null);
this.externalId = externalId;
this.loanOfficer = isLoanOfficer;
deriveDisplayName(firstname);
}
@@ -125,6 +132,13 @@ public class Staff extends AbstractPersistable<Long> {
deriveDisplayName(this.firstname);
}
final String externalIdParamName = "externalId";
if (command.isChangeInStringParameterNamed(externalIdParamName, this.externalId)) {
final String newValue = command.stringValueOfParameterNamed(externalIdParamName);
actualChanges.put(externalIdParamName, newValue);
this.externalId = newValue;
}
final String isLoanOfficerParamName = "isLoanOfficer";
if (command.isChangeInBooleanParameterNamed(isLoanOfficerParamName, this.loanOfficer)) {
final boolean newValue = command.booleanPrimitiveValueOfParameterNamed(isLoanOfficerParamName);
@@ -31,7 +31,7 @@ public final class StaffCommandFromApiJsonDeserializer {
/**
* The parameters supported for this command.
*/
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("firstname", "lastname", "officeId", "isLoanOfficer"));
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("firstname", "lastname", "officeId", "externalId", "isLoanOfficer"));
private final FromJsonHelper fromApiJsonHelper;
@@ -38,7 +38,7 @@ 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 from m_staff s "
+ " s.display_name as displayName, s.is_loan_officer as isLoanOfficer, s.external_id as externalId from m_staff s "
+ " join m_office o on o.id = s.office_id";
}
@@ -52,8 +52,9 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
final Long officeId = rs.getLong("officeId");
final boolean isLoanOfficer = rs.getBoolean("isLoanOfficer");
final String officeName = rs.getString("officeName");
final String externalId = rs.getString("externalId");
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer);
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId);
}
}
@@ -64,7 +65,7 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("s.id as id, s.office_id as officeId, o.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 ");
sqlBuilder.append("s.display_name as displayName, s.is_loan_officer as isLoanOfficer, s.external_id as externalId ");
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 ");
@@ -88,8 +89,9 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
final Long officeId = rs.getLong("officeId");
final String officeName = rs.getString("officeName");
final boolean isLoanOfficer = rs.getBoolean("isLoanOfficer");
final String externalId = rs.getString("externalId");
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer);
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId);
}
}
@@ -115,7 +115,14 @@ public class StaffWritePlatformServiceJpaRepositoryImpl implements StaffWritePla
*/
private void handleStaffDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) {
Throwable realCause = dve.getMostSpecificCause();
if (realCause.getMessage().contains("display_name")) {
if (realCause.getMessage().contains("external_id")) {
final String externalId = command.stringValueOfParameterNamed("externalId");
throw new PlatformDataIntegrityException("error.msg.staff.duplicate.externalId", "Staff with externalId `" + externalId
+ "` already exists", "externalId", externalId);
}
else if (realCause.getMessage().contains("display_name")) {
final String lastname = command.stringValueOfParameterNamed("lastname");
String displayName = lastname;
if (!StringUtils.isBlank(displayName)) {