Validation changes when setting staff to inactive.
This commit is contained in:
+23
-2
@@ -20,6 +20,7 @@ import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
|
|||||||
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
|
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
|
||||||
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
|
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||||
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
|
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
|
||||||
|
import org.mifosplatform.organisation.staff.service.StaffReadPlatformService;
|
||||||
import org.mifosplatform.portfolio.client.api.ClientApiConstants;
|
import org.mifosplatform.portfolio.client.api.ClientApiConstants;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -34,13 +35,18 @@ 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", "joiningDate", "dateFormat", "locale"));
|
"mobileNo", "isLoanOfficer", "isActive", "joiningDate", "dateFormat", "locale", "forceStatus"));
|
||||||
|
|
||||||
private final FromJsonHelper fromApiJsonHelper;
|
private final FromJsonHelper fromApiJsonHelper;
|
||||||
|
|
||||||
|
private final StaffReadPlatformService staffReadPlatformService;
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public StaffCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper) {
|
public StaffCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper,
|
||||||
|
final StaffReadPlatformService staffReadPlatformService) {
|
||||||
this.fromApiJsonHelper = fromApiJsonHelper;
|
this.fromApiJsonHelper = fromApiJsonHelper;
|
||||||
|
this.staffReadPlatformService = staffReadPlatformService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void validateForCreate(final String json) {
|
public void validateForCreate(final String json) {
|
||||||
@@ -98,6 +104,10 @@ public final class StaffCommandFromApiJsonDeserializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void validateForUpdate(final String json) {
|
public void validateForUpdate(final String json) {
|
||||||
|
validateForUpdate(json, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validateForUpdate(final String json,Long staffId) {
|
||||||
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
|
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
|
||||||
|
|
||||||
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
|
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
|
||||||
@@ -134,6 +144,17 @@ public final class StaffCommandFromApiJsonDeserializer {
|
|||||||
|
|
||||||
if (this.fromApiJsonHelper.parameterExists("isActive", element)) {
|
if (this.fromApiJsonHelper.parameterExists("isActive", element)) {
|
||||||
final Boolean activeFlag = this.fromApiJsonHelper.extractBooleanNamed("isActive", element);
|
final Boolean activeFlag = this.fromApiJsonHelper.extractBooleanNamed("isActive", element);
|
||||||
|
//Need to add here check to see if any clients, group, account and loans are assigned to this staff if staff is being set to inactive --LJB
|
||||||
|
final Boolean forceStatus = this.fromApiJsonHelper.extractBooleanNamed("forceStatus", element);
|
||||||
|
if ((!activeFlag && forceStatus == null) ||
|
||||||
|
(!activeFlag && forceStatus)) {
|
||||||
|
Object[] result = staffReadPlatformService.hasAssociatedItems(staffId);
|
||||||
|
|
||||||
|
if (result != null && result.length > 0) {
|
||||||
|
baseDataValidator.reset().parameter("isactive").failWithCode("staff.is.assigned",result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
baseDataValidator.reset().parameter("isActive").value(activeFlag).notNull();
|
baseDataValidator.reset().parameter("isActive").value(activeFlag).notNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -24,4 +24,6 @@ public interface StaffReadPlatformService {
|
|||||||
Collection<StaffData> retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(Long officeId, boolean loanOfficersOnly);
|
Collection<StaffData> retrieveAllStaffInOfficeAndItsParentOfficeHierarchy(Long officeId, boolean loanOfficersOnly);
|
||||||
|
|
||||||
Collection<StaffData> retrieveAllStaff(String sqlSearch, Long officeId, boolean loanOfficersOnly, String status);
|
Collection<StaffData> retrieveAllStaff(String sqlSearch, Long officeId, boolean loanOfficersOnly, String status);
|
||||||
|
|
||||||
|
Object[] hasAssociatedItems(final Long staffId);
|
||||||
}
|
}
|
||||||
+41
@@ -7,7 +7,10 @@ package org.mifosplatform.organisation.staff.service;
|
|||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
@@ -17,6 +20,9 @@ import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
|
|||||||
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
||||||
import org.mifosplatform.organisation.staff.data.StaffData;
|
import org.mifosplatform.organisation.staff.data.StaffData;
|
||||||
import org.mifosplatform.organisation.staff.exception.StaffNotFoundException;
|
import org.mifosplatform.organisation.staff.exception.StaffNotFoundException;
|
||||||
|
import org.mifosplatform.portfolio.client.domain.ClientStatus;
|
||||||
|
import org.mifosplatform.portfolio.loanaccount.domain.LoanStatus;
|
||||||
|
import org.mifosplatform.portfolio.savings.domain.SavingsAccountStatusType;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.dao.EmptyResultDataAccessException;
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
@@ -239,4 +245,39 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
|
|||||||
sql = sql + " order by s.lastname";
|
sql = sql + " order by s.lastname";
|
||||||
return this.jdbcTemplate.query(sql, this.staffInOfficeHierarchyMapper, new Object[] { officeId });
|
return this.jdbcTemplate.query(sql, this.staffInOfficeHierarchyMapper, new Object[] { officeId });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] hasAssociatedItems(final Long staffId){
|
||||||
|
ArrayList<String> params = new ArrayList<String>();
|
||||||
|
|
||||||
|
String sql = "select c.display_name as client, g.display_name as grp,l.loan_officer_id as loan, s.field_officer_id as sav"+
|
||||||
|
" from m_staff staff "+
|
||||||
|
" left outer join m_client c on staff.id = c.staff_id AND c.status_enum < "+ ClientStatus.CLOSED.getValue() +
|
||||||
|
" left outer join m_group g on staff.id = g.staff_id " +
|
||||||
|
" left outer join m_loan l on staff.id = l.loan_officer_id and l.loan_status_id < " + LoanStatus.WITHDRAWN_BY_CLIENT.getValue() +
|
||||||
|
" left outer join m_savings_account s on c.staff_id = s.field_officer_id and s.status_enum < "+ SavingsAccountStatusType.WITHDRAWN_BY_APPLICANT.getValue() +
|
||||||
|
" where staff.id = " + staffId +
|
||||||
|
" group by staff.id";
|
||||||
|
|
||||||
|
|
||||||
|
List<Map<String, Object>> result = this.jdbcTemplate.queryForList(sql);
|
||||||
|
if (result != null) {
|
||||||
|
for (Map<String, Object> map : result) {
|
||||||
|
if (map.get("client") != null) {
|
||||||
|
params.add("client");
|
||||||
|
}
|
||||||
|
if (map.get("grp") != null) {
|
||||||
|
params.add("group");
|
||||||
|
}
|
||||||
|
if (map.get("loan") != null) {
|
||||||
|
params.add("loan");
|
||||||
|
}
|
||||||
|
if (map.get("sav") != null) {
|
||||||
|
params.add("savings account");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return params.toArray();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -74,7 +74,7 @@ public class StaffWritePlatformServiceJpaRepositoryImpl implements StaffWritePla
|
|||||||
public CommandProcessingResult updateStaff(final Long staffId, final JsonCommand command) {
|
public CommandProcessingResult updateStaff(final Long staffId, final JsonCommand command) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.fromApiJsonDeserializer.validateForUpdate(command.json());
|
this.fromApiJsonDeserializer.validateForUpdate(command.json(), staffId);
|
||||||
|
|
||||||
final Staff staffForUpdate = this.staffRepository.findOne(staffId);
|
final Staff staffForUpdate = this.staffRepository.findOne(staffId);
|
||||||
if (staffForUpdate == null) { throw new StaffNotFoundException(staffId); }
|
if (staffForUpdate == null) { throw new StaffNotFoundException(staffId); }
|
||||||
|
|||||||
Reference in New Issue
Block a user