Add client within a group, add new group within a parent group
This commit is contained in:
+18
-4
@@ -7,13 +7,17 @@ package org.mifosplatform.portfolio.client.domain;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.JoinTable;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
import javax.persistence.ManyToOne;
|
import javax.persistence.ManyToOne;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
import javax.persistence.Temporal;
|
import javax.persistence.Temporal;
|
||||||
@@ -29,6 +33,7 @@ import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
|
|||||||
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
|
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||||
import org.mifosplatform.infrastructure.security.service.RandomPasswordGenerator;
|
import org.mifosplatform.infrastructure.security.service.RandomPasswordGenerator;
|
||||||
import org.mifosplatform.organisation.office.domain.Office;
|
import org.mifosplatform.organisation.office.domain.Office;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.Group;
|
||||||
import org.springframework.data.jpa.domain.AbstractPersistable;
|
import org.springframework.data.jpa.domain.AbstractPersistable;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@@ -71,10 +76,14 @@ public class Client extends AbstractPersistable<Long> {
|
|||||||
@Column(name = "image_key", length = 500)
|
@Column(name = "image_key", length = 500)
|
||||||
private String imageKey;
|
private String imageKey;
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
@JoinTable(name = "m_group_client", joinColumns = @JoinColumn(name = "client_id"), inverseJoinColumns = @JoinColumn(name = "group_id"))
|
||||||
|
private Set<Group> parentGroups;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
private boolean accountNumberRequiresAutoGeneration = false;
|
private boolean accountNumberRequiresAutoGeneration = false;
|
||||||
|
|
||||||
public static Client fromJson(final Office clientOffice, final JsonCommand command) {
|
public static Client fromJson(final Office clientOffice, final Group clientParentGroup , final JsonCommand command) {
|
||||||
|
|
||||||
final String accountNo = command.stringValueOfParameterNamed("accountNo");
|
final String accountNo = command.stringValueOfParameterNamed("accountNo");
|
||||||
final String firstname = command.stringValueOfParameterNamed("firstname");
|
final String firstname = command.stringValueOfParameterNamed("firstname");
|
||||||
@@ -84,14 +93,14 @@ public class Client extends AbstractPersistable<Long> {
|
|||||||
final LocalDate joiningDate = command.localDateValueOfParameterNamed("joinedDate");
|
final LocalDate joiningDate = command.localDateValueOfParameterNamed("joinedDate");
|
||||||
final String externalId = command.stringValueOfParameterNamed("externalId");
|
final String externalId = command.stringValueOfParameterNamed("externalId");
|
||||||
|
|
||||||
return new Client(clientOffice, accountNo, firstname, middlename, lastname, fullname, joiningDate, externalId);
|
return new Client(clientOffice, clientParentGroup ,accountNo, firstname, middlename, lastname, fullname, joiningDate, externalId);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Client() {
|
protected Client() {
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Client(final Office office, final String accountNo, final String firstname, final String middlename, final String lastname,
|
private Client(final Office office, final Group clientParentGroup, final String accountNo, final String firstname, final String middlename, final String lastname,
|
||||||
final String fullname, final LocalDate openingDate, final String externalId) {
|
final String fullname, final LocalDate openingDate, final String externalId) {
|
||||||
if (StringUtils.isBlank(accountNo)) {
|
if (StringUtils.isBlank(accountNo)) {
|
||||||
this.accountNumber = new RandomPasswordGenerator(19).generate();
|
this.accountNumber = new RandomPasswordGenerator(19).generate();
|
||||||
@@ -130,6 +139,11 @@ public class Client extends AbstractPersistable<Long> {
|
|||||||
this.fullname = null;
|
this.fullname = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(clientParentGroup != null){
|
||||||
|
this.parentGroups = new HashSet<Group>();
|
||||||
|
this.parentGroups.add(clientParentGroup);
|
||||||
|
}
|
||||||
|
|
||||||
deriveDisplayName();
|
deriveDisplayName();
|
||||||
validateNameParts();
|
validateNameParts();
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -40,7 +40,7 @@ public final class ClientCommandFromApiJsonDeserializer extends AbstractFromApiJ
|
|||||||
* The parameters supported for this command.
|
* The parameters supported for this command.
|
||||||
*/
|
*/
|
||||||
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "accountNo", "externalId", "firstname",
|
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "accountNo", "externalId", "firstname",
|
||||||
"middlename", "lastname", "fullname", "officeId", "joinedDate", "locale", "dateFormat"));
|
"middlename", "lastname", "fullname", "officeId", "joinedDate", "locale", "dateFormat", "groupId"));
|
||||||
|
|
||||||
private final FromJsonHelper fromApiJsonHelper;
|
private final FromJsonHelper fromApiJsonHelper;
|
||||||
|
|
||||||
@@ -174,6 +174,12 @@ public final class ClientCommandFromApiJsonDeserializer extends AbstractFromApiJ
|
|||||||
baseDataValidator.reset().parameter(officeIdParameterName).value(officeId).notNull().integerGreaterThanZero();
|
baseDataValidator.reset().parameter(officeIdParameterName).value(officeId).notNull().integerGreaterThanZero();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String groupIdParameterName = "groupId";
|
||||||
|
if (fromApiJsonHelper.parameterExists(groupIdParameterName, element)) {
|
||||||
|
final Long groupId = fromApiJsonHelper.extractLongNamed(groupIdParameterName, element);
|
||||||
|
baseDataValidator.reset().parameter(groupIdParameterName).value(groupId).notNull().integerGreaterThanZero();
|
||||||
|
}
|
||||||
|
|
||||||
final String joinedDateParameterName = "joinedDate";
|
final String joinedDateParameterName = "joinedDate";
|
||||||
if (fromApiJsonHelper.parameterExists(joinedDateParameterName, element)) {
|
if (fromApiJsonHelper.parameterExists(joinedDateParameterName, element)) {
|
||||||
|
|
||||||
|
|||||||
+17
-2
@@ -42,6 +42,9 @@ import org.mifosplatform.portfolio.client.exception.NoteNotFoundException;
|
|||||||
import org.mifosplatform.portfolio.client.serialization.ClientCommandFromApiJsonDeserializer;
|
import org.mifosplatform.portfolio.client.serialization.ClientCommandFromApiJsonDeserializer;
|
||||||
import org.mifosplatform.portfolio.client.serialization.ClientIdentifierCommandFromApiJsonDeserializer;
|
import org.mifosplatform.portfolio.client.serialization.ClientIdentifierCommandFromApiJsonDeserializer;
|
||||||
import org.mifosplatform.portfolio.client.serialization.ClientNoteCommandFromApiJsonDeserializer;
|
import org.mifosplatform.portfolio.client.serialization.ClientNoteCommandFromApiJsonDeserializer;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.Group;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.GroupRepository;
|
||||||
|
import org.mifosplatform.portfolio.group.exception.GroupNotFoundException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -58,6 +61,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
|
|||||||
private final ClientRepository clientRepository;
|
private final ClientRepository clientRepository;
|
||||||
private final ClientIdentifierRepository clientIdentifierRepository;
|
private final ClientIdentifierRepository clientIdentifierRepository;
|
||||||
private final OfficeRepository officeRepository;
|
private final OfficeRepository officeRepository;
|
||||||
|
private final GroupRepository groupRepository;
|
||||||
private final NoteRepository noteRepository;
|
private final NoteRepository noteRepository;
|
||||||
private final CodeValueRepositoryWrapper codeValueRepository;
|
private final CodeValueRepositoryWrapper codeValueRepository;
|
||||||
private final ClientCommandFromApiJsonDeserializer fromApiJsonDeserializer;
|
private final ClientCommandFromApiJsonDeserializer fromApiJsonDeserializer;
|
||||||
@@ -72,7 +76,8 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
|
|||||||
final ClientCommandFromApiJsonDeserializer fromApiJsonDeserializer,
|
final ClientCommandFromApiJsonDeserializer fromApiJsonDeserializer,
|
||||||
final ClientNoteCommandFromApiJsonDeserializer clientNoteFromApiJsonDeserializer,
|
final ClientNoteCommandFromApiJsonDeserializer clientNoteFromApiJsonDeserializer,
|
||||||
final ClientIdentifierCommandFromApiJsonDeserializer clientIdentifierCommandFromApiJsonDeserializer,
|
final ClientIdentifierCommandFromApiJsonDeserializer clientIdentifierCommandFromApiJsonDeserializer,
|
||||||
final AccountNumberGeneratorFactory accountIdentifierGeneratorFactory) {
|
final AccountNumberGeneratorFactory accountIdentifierGeneratorFactory,
|
||||||
|
final GroupRepository groupRepository) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.clientRepository = clientRepository;
|
this.clientRepository = clientRepository;
|
||||||
this.clientIdentifierRepository = clientIdentifierRepository;
|
this.clientIdentifierRepository = clientIdentifierRepository;
|
||||||
@@ -83,6 +88,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
|
|||||||
this.clientNoteFromApiJsonDeserializer = clientNoteFromApiJsonDeserializer;
|
this.clientNoteFromApiJsonDeserializer = clientNoteFromApiJsonDeserializer;
|
||||||
this.clientIdentifierCommandFromApiJsonDeserializer = clientIdentifierCommandFromApiJsonDeserializer;
|
this.clientIdentifierCommandFromApiJsonDeserializer = clientIdentifierCommandFromApiJsonDeserializer;
|
||||||
this.accountIdentifierGeneratorFactory = accountIdentifierGeneratorFactory;
|
this.accountIdentifierGeneratorFactory = accountIdentifierGeneratorFactory;
|
||||||
|
this.groupRepository = groupRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -137,7 +143,16 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
|
|||||||
final Office clientOffice = this.officeRepository.findOne(officeId);
|
final Office clientOffice = this.officeRepository.findOne(officeId);
|
||||||
if (clientOffice == null) { throw new OfficeNotFoundException(officeId); }
|
if (clientOffice == null) { throw new OfficeNotFoundException(officeId); }
|
||||||
|
|
||||||
final Client newClient = Client.fromJson(clientOffice, command);
|
final Long groupId = command.longValueOfParameterNamed("groupId");
|
||||||
|
|
||||||
|
Group clientParentGroup = null;
|
||||||
|
|
||||||
|
if(groupId != null){
|
||||||
|
clientParentGroup = this.groupRepository.findOne(groupId);
|
||||||
|
if (clientParentGroup == null) { throw new GroupNotFoundException(groupId); }
|
||||||
|
}
|
||||||
|
|
||||||
|
final Client newClient = Client.fromJson(clientOffice, clientParentGroup , command);
|
||||||
this.clientRepository.save(newClient);
|
this.clientRepository.save(newClient);
|
||||||
|
|
||||||
if (newClient.isAccountNumberRequiresAutoGeneration()) {
|
if (newClient.isAccountNumberRequiresAutoGeneration()) {
|
||||||
|
|||||||
+3
-3
@@ -45,7 +45,7 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
|
|||||||
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
|
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
|
||||||
final Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
|
final Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
|
||||||
|
|
||||||
final Set<String> supportedParams = new HashSet<String>(Arrays.asList("name", "officeId", "levelId", "parentId", "loanOfficerId",
|
final Set<String> supportedParams = new HashSet<String>(Arrays.asList("name", "officeId", "levelId", "parentId", "staffId",
|
||||||
"externalId", "clientMembers"));
|
"externalId", "clientMembers"));
|
||||||
|
|
||||||
checkForUnsupportedParameters(requestMap, supportedParams);
|
checkForUnsupportedParameters(requestMap, supportedParams);
|
||||||
@@ -56,7 +56,7 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
|
|||||||
final Long officeId = extractLongParameter("officeId", requestMap, modifiedParameters);
|
final Long officeId = extractLongParameter("officeId", requestMap, modifiedParameters);
|
||||||
final Long levelId = extractLongParameter("levelId", requestMap, modifiedParameters);
|
final Long levelId = extractLongParameter("levelId", requestMap, modifiedParameters);
|
||||||
final Long parentId = extractLongParameter("parentId", requestMap, modifiedParameters);
|
final Long parentId = extractLongParameter("parentId", requestMap, modifiedParameters);
|
||||||
final Long loanOfficerId = extractLongParameter("loanOfficerId", requestMap, modifiedParameters);
|
final Long staffId = extractLongParameter("staffId", requestMap, modifiedParameters);
|
||||||
final String externalId = extractStringParameter("externalId", requestMap, modifiedParameters);
|
final String externalId = extractStringParameter("externalId", requestMap, modifiedParameters);
|
||||||
|
|
||||||
final JsonParser parser = new JsonParser();
|
final JsonParser parser = new JsonParser();
|
||||||
@@ -75,7 +75,7 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new GroupCommand(modifiedParameters, resourceIdentifier, externalId, name, officeId, loanOfficerId, clientMembers, parentId,
|
return new GroupCommand(modifiedParameters, resourceIdentifier, externalId, name, officeId, staffId, clientMembers, parentId,
|
||||||
levelId);
|
levelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-7
@@ -110,15 +110,18 @@ public class GroupsApiResource {
|
|||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
public String newGroupDetails(@Context final UriInfo uriInfo, @QueryParam("officeId") final Long officeId,
|
public String newGroupDetails(@Context final UriInfo uriInfo, @QueryParam("officeId") final Long officeId,
|
||||||
@QueryParam("levelId") final Long levelId) {
|
@QueryParam("levelId") final Long levelId, @QueryParam("parentGroupId") final Long parentGroupId) {
|
||||||
|
|
||||||
context.authenticatedUser().validateHasReadPermission("GROUP");
|
context.authenticatedUser().validateHasReadPermission("GROUP");
|
||||||
|
|
||||||
GroupData groupTemplateData = null;
|
GroupData groupTemplateData = null;
|
||||||
if (officeId != null && levelId != null) {
|
if (levelId != null && parentGroupId != null) {
|
||||||
|
groupTemplateData = this.groupReadPlatformService.retrieveNewChildGroupDetails(officeId, levelId, parentGroupId);
|
||||||
|
} else if (officeId != null && levelId != null) {
|
||||||
groupTemplateData = this.groupReadPlatformService.retrieveNewGroupDetails(officeId, levelId);
|
groupTemplateData = this.groupReadPlatformService.retrieveNewGroupDetails(officeId, levelId);
|
||||||
} else if (levelId != null) {
|
} else if (levelId != null) {
|
||||||
groupTemplateData = this.groupReadPlatformService.retrieveNewGroupDetails(context.authenticatedUser().getOffice().getId(), levelId);
|
groupTemplateData = this.groupReadPlatformService.retrieveNewGroupDetails(context.authenticatedUser().getOffice().getId(),
|
||||||
|
levelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
@@ -138,27 +141,27 @@ public class GroupsApiResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("{groupId}/command/assign_loanofficer")
|
@Path("{groupId}/command/assign_staff")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
public String assignLoanOfficer(@PathParam("groupId") final Long groupId, final String jsonRequestBody) {
|
public String assignLoanOfficer(@PathParam("groupId") final Long groupId, final String jsonRequestBody) {
|
||||||
|
|
||||||
final GroupCommand command = this.apiDataConversionService.convertJsonToGroupCommand(groupId, jsonRequestBody);
|
final GroupCommand command = this.apiDataConversionService.convertJsonToGroupCommand(groupId, jsonRequestBody);
|
||||||
|
|
||||||
CommandProcessingResult entityIdentifier = this.groupWritePlatformService.assignLoanOfficer(command);
|
CommandProcessingResult entityIdentifier = this.groupWritePlatformService.assignStaff(command);
|
||||||
|
|
||||||
return this.toApiJsonSerializer.serialize(entityIdentifier);
|
return this.toApiJsonSerializer.serialize(entityIdentifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("{groupId}/command/unassign_loanofficer")
|
@Path("{groupId}/command/unassign_staff")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
public String unassignLoanOfficer(@PathParam("groupId") final Long groupId, final String jsonRequestBody) {
|
public String unassignLoanOfficer(@PathParam("groupId") final Long groupId, final String jsonRequestBody) {
|
||||||
|
|
||||||
final GroupCommand command = this.apiDataConversionService.convertJsonToGroupCommand(groupId, jsonRequestBody);
|
final GroupCommand command = this.apiDataConversionService.convertJsonToGroupCommand(groupId, jsonRequestBody);
|
||||||
|
|
||||||
CommandProcessingResult entityIdentifier = this.groupWritePlatformService.unassignLoanOfficer(command);
|
CommandProcessingResult entityIdentifier = this.groupWritePlatformService.unassignStaff(command);
|
||||||
|
|
||||||
return this.toApiJsonSerializer.serialize(entityIdentifier);
|
return this.toApiJsonSerializer.serialize(entityIdentifier);
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-7
@@ -13,7 +13,7 @@ public class GroupCommand {
|
|||||||
private final String externalId;
|
private final String externalId;
|
||||||
private final String name;
|
private final String name;
|
||||||
private final Long officeId;
|
private final Long officeId;
|
||||||
private final Long loanOfficerId;
|
private final Long staffId;
|
||||||
private final Long parentId;
|
private final Long parentId;
|
||||||
private final Long levelId;
|
private final Long levelId;
|
||||||
|
|
||||||
@@ -22,10 +22,10 @@ public class GroupCommand {
|
|||||||
private final Set<String> modifiedParameters;
|
private final Set<String> modifiedParameters;
|
||||||
|
|
||||||
public GroupCommand(Set<String> modifiedParameters, final Long id, final String externalId, final String name,
|
public GroupCommand(Set<String> modifiedParameters, final Long id, final String externalId, final String name,
|
||||||
final Long officeId, final Long loanOfficerId, String[] clientMembers , final Long parentId ,final Long levelId) {
|
final Long officeId, final Long staffId, String[] clientMembers , final Long parentId ,final Long levelId) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.officeId = officeId;
|
this.officeId = officeId;
|
||||||
this.loanOfficerId = loanOfficerId;
|
this.staffId = staffId;
|
||||||
this.parentId = parentId;
|
this.parentId = parentId;
|
||||||
this.levelId = levelId;
|
this.levelId = levelId;
|
||||||
this.externalId = externalId;
|
this.externalId = externalId;
|
||||||
@@ -47,8 +47,8 @@ public class GroupCommand {
|
|||||||
return levelId;
|
return levelId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getLoanOfficeId() {
|
public Long getStaffId() {
|
||||||
return loanOfficerId;
|
return staffId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getExternalId() {
|
public String getExternalId() {
|
||||||
@@ -79,8 +79,8 @@ public class GroupCommand {
|
|||||||
return this.modifiedParameters.contains("levelId");
|
return this.modifiedParameters.contains("levelId");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLoanOfficerChanged() {
|
public boolean isStaffChanged() {
|
||||||
return this.modifiedParameters.contains("loanOfficerId");
|
return this.modifiedParameters.contains("staffId");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isNameChanged() {
|
public boolean isNameChanged() {
|
||||||
|
|||||||
+3
-3
@@ -55,7 +55,7 @@ public class GroupCommandValidator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void validateForLoanOfficerUpdate() {
|
public void validateForStaffUpdate() {
|
||||||
|
|
||||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||||
|
|
||||||
@@ -63,8 +63,8 @@ public class GroupCommandValidator {
|
|||||||
|
|
||||||
baseDataValidator.reset().parameter("id").value(command.getId()).notNull();
|
baseDataValidator.reset().parameter("id").value(command.getId()).notNull();
|
||||||
|
|
||||||
if (command.isLoanOfficerChanged()) {
|
if (command.isStaffChanged()) {
|
||||||
baseDataValidator.reset().parameter("loanOfficerId").value(command.getLoanOfficeId()).notNull().integerGreaterThanZero();
|
baseDataValidator.reset().parameter("staffId").value(command.getStaffId()).notNull().integerGreaterThanZero();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dataValidationErrors.isEmpty()) {
|
if (!dataValidationErrors.isEmpty()) {
|
||||||
|
|||||||
+4
-4
@@ -7,7 +7,7 @@ package org.mifosplatform.portfolio.group.data;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.mifosplatform.organisation.office.data.OfficeLookup;
|
import org.mifosplatform.organisation.office.data.OfficeData;
|
||||||
import org.mifosplatform.organisation.staff.data.StaffData;
|
import org.mifosplatform.organisation.staff.data.StaffData;
|
||||||
import org.mifosplatform.portfolio.client.data.ClientLookup;
|
import org.mifosplatform.portfolio.client.data.ClientLookup;
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ public class GroupData {
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final Collection<ClientLookup> allowedClients;
|
private final Collection<ClientLookup> allowedClients;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final Collection<OfficeLookup> allowedOffices;
|
private final Collection<OfficeData> allowedOffices;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final Collection<GroupLookupData> allowedParentGroups;
|
private final Collection<GroupLookupData> allowedParentGroups;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@@ -67,7 +67,7 @@ public class GroupData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GroupData(final GroupData group, final Collection<ClientLookup> clientMembers, final Collection<ClientLookup> allowedClients,
|
public GroupData(final GroupData group, final Collection<ClientLookup> clientMembers, final Collection<ClientLookup> allowedClients,
|
||||||
final Collection<OfficeLookup> allowedOffices, final Collection<GroupLookupData> allowedParentGroups,
|
final Collection<OfficeData> allowedOffices, final Collection<GroupLookupData> allowedParentGroups,
|
||||||
final GroupLevelData groupLevelData, final Collection<StaffData> allowedStaffs, final Collection<GroupLookupData> childGroups , final GroupSummaryData groupSummaryData) {
|
final GroupLevelData groupLevelData, final Collection<StaffData> allowedStaffs, final Collection<GroupLookupData> childGroups , final GroupSummaryData groupSummaryData) {
|
||||||
this.id = group.getId();
|
this.id = group.getId();
|
||||||
this.officeId = group.getOfficeId();
|
this.officeId = group.getOfficeId();
|
||||||
@@ -91,7 +91,7 @@ public class GroupData {
|
|||||||
this.childGroups = childGroups;
|
this.childGroups = childGroups;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupData(final Long officeId, final Collection<ClientLookup> allowedClients, final Collection<OfficeLookup> allowedOffices,
|
public GroupData(final Long officeId, final Collection<ClientLookup> allowedClients, final Collection<OfficeData> allowedOffices,
|
||||||
final Collection<GroupLookupData> allowedParentGroups, final GroupLevelData groupLevelData,
|
final Collection<GroupLookupData> allowedParentGroups, final GroupLevelData groupLevelData,
|
||||||
final Collection<StaffData> allowedStaffs) {
|
final Collection<StaffData> allowedStaffs) {
|
||||||
this.id = null;
|
this.id = null;
|
||||||
|
|||||||
+36
-16
@@ -45,7 +45,7 @@ public class Group extends AbstractPersistable<Long> {
|
|||||||
|
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@JoinColumn(name = "staff_id", nullable = true)
|
@JoinColumn(name = "staff_id", nullable = true)
|
||||||
private Staff loanOfficer;
|
private Staff staff;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@Column(name = "level_id", nullable = false)
|
@Column(name = "level_id", nullable = false)
|
||||||
@@ -73,13 +73,13 @@ public class Group extends AbstractPersistable<Long> {
|
|||||||
this.clientMembers = new HashSet<Client>();
|
this.clientMembers = new HashSet<Client>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Group newGroup(final Office office, final Staff loanOfficer , final Group parent ,final long levelId , final String name, final String externalId, final Set<Client> clientMembers) {
|
public static Group newGroup(final Office office, final Staff staff , final Group parent ,final long levelId , final String name, final String externalId, final Set<Client> clientMembers) {
|
||||||
return new Group(office, loanOfficer , parent , levelId , name, externalId, clientMembers);
|
return new Group(office, staff , parent , levelId , name, externalId, clientMembers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Group(final Office office, final Staff loanOfficer , final Group parent ,final long levelId , final String name, final String externalId, final Set<Client> clientMembers) {
|
public Group(final Office office, final Staff staff , final Group parent ,final long levelId , final String name, final String externalId, final Set<Client> clientMembers) {
|
||||||
this.office = office;
|
this.office = office;
|
||||||
this.loanOfficer = loanOfficer;
|
this.staff = staff;
|
||||||
this.levelId =levelId;
|
this.levelId =levelId;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
|
|
||||||
@@ -110,11 +110,31 @@ public class Group extends AbstractPersistable<Long> {
|
|||||||
return this.office.getId();
|
return this.office.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getLoanOfficerId() {
|
|
||||||
return this.loanOfficer.getId();
|
public Staff getStaff() {
|
||||||
|
return this.staff;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(final GroupCommand command, final Office groupOffice, final Staff newLoanOfficer, final Set<Client> clientMembers) {
|
|
||||||
|
public void setStaff(Staff staff) {
|
||||||
|
this.staff = staff;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getStaffId() {
|
||||||
|
return this.staff.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Long getLevelId() {
|
||||||
|
return this.levelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setLevelId(Long levelId) {
|
||||||
|
this.levelId = levelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(final GroupCommand command, final Office groupOffice, final Staff staff, final Set<Client> clientMembers) {
|
||||||
if (command.isExternalIdChanged()) {
|
if (command.isExternalIdChanged()) {
|
||||||
this.externalId = command.getExternalId();
|
this.externalId = command.getExternalId();
|
||||||
}
|
}
|
||||||
@@ -123,8 +143,8 @@ public class Group extends AbstractPersistable<Long> {
|
|||||||
this.office = groupOffice;
|
this.office = groupOffice;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command.isLoanOfficerChanged()) {
|
if (command.isStaffChanged()) {
|
||||||
this.loanOfficer = newLoanOfficer;
|
this.staff = staff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command.isNameChanged()) {
|
if (command.isNameChanged()) {
|
||||||
@@ -136,15 +156,15 @@ public class Group extends AbstractPersistable<Long> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void assigLoanOfficer(final GroupCommand command , final Staff newLoanOfficer){
|
public void assigStaff(final GroupCommand command , final Staff newStaff){
|
||||||
if (command.isLoanOfficerChanged()) {
|
if (command.isStaffChanged()) {
|
||||||
this.loanOfficer = newLoanOfficer;
|
this.staff = newStaff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unassigLoanOfficer(final GroupCommand command) {
|
public void unassigStaff(final GroupCommand command) {
|
||||||
if (command.isLoanOfficerChanged()) {
|
if (command.isStaffChanged()) {
|
||||||
this.loanOfficer = null;
|
this.staff = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
-4
@@ -19,7 +19,7 @@ public class GroupLevel extends AbstractPersistable<Long> {
|
|||||||
private final Long parentId;
|
private final Long parentId;
|
||||||
|
|
||||||
@Column(name = "super_parent", nullable = false)
|
@Column(name = "super_parent", nullable = false)
|
||||||
private final boolean isSuperParent;
|
private final boolean superParent;
|
||||||
|
|
||||||
@Column(name = "level_name", nullable = false, length = 100, unique = true)
|
@Column(name = "level_name", nullable = false, length = 100, unique = true)
|
||||||
private final String levelName;
|
private final String levelName;
|
||||||
@@ -33,7 +33,7 @@ public class GroupLevel extends AbstractPersistable<Long> {
|
|||||||
public GroupLevel() {
|
public GroupLevel() {
|
||||||
|
|
||||||
this.parentId = null;
|
this.parentId = null;
|
||||||
this.isSuperParent = false;
|
this.superParent = false;
|
||||||
this.levelName = null;
|
this.levelName = null;
|
||||||
this.recursable = false;
|
this.recursable = false;
|
||||||
this.canHaveClients = false;
|
this.canHaveClients = false;
|
||||||
@@ -43,7 +43,7 @@ public class GroupLevel extends AbstractPersistable<Long> {
|
|||||||
public GroupLevel(final Long parentId, final boolean isSuperParent, final String levelName, final boolean recursable,
|
public GroupLevel(final Long parentId, final boolean isSuperParent, final String levelName, final boolean recursable,
|
||||||
final boolean canHaveClients) {
|
final boolean canHaveClients) {
|
||||||
|
|
||||||
this.isSuperParent = isSuperParent;
|
this.superParent = isSuperParent;
|
||||||
this.parentId = parentId;
|
this.parentId = parentId;
|
||||||
this.levelName = levelName;
|
this.levelName = levelName;
|
||||||
this.recursable = recursable;
|
this.recursable = recursable;
|
||||||
@@ -56,7 +56,7 @@ public class GroupLevel extends AbstractPersistable<Long> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean getIsSuperParent() {
|
public boolean getIsSuperParent() {
|
||||||
return this.isSuperParent;
|
return this.superParent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLevelName() {
|
public String getLevelName() {
|
||||||
@@ -71,4 +71,9 @@ public class GroupLevel extends AbstractPersistable<Long> {
|
|||||||
return this.canHaveClients;
|
return this.canHaveClients;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isSuperParent() {
|
||||||
|
return this.superParent;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
package org.mifosplatform.portfolio.group.exception;
|
||||||
|
|
||||||
|
import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link AbstractPlatformDomainRuleException} thrown when parentGroup'd level is not equal to parent level of the levelid param,.
|
||||||
|
*/
|
||||||
|
public class InvalidGroupLevelException extends AbstractPlatformDomainRuleException {
|
||||||
|
|
||||||
|
public InvalidGroupLevelException(final String action, String postFix, String defaultUserMessage, Object... defaultUserMessageArgs) {
|
||||||
|
super("error.msg.group." + action + "." + postFix, defaultUserMessage, defaultUserMessageArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+4
@@ -45,4 +45,8 @@ public interface GroupReadPlatformService {
|
|||||||
Long retrieveTotalClients(String hierarchy);
|
Long retrieveTotalClients(String hierarchy);
|
||||||
|
|
||||||
Collection<MoneyData> retrieveGroupLoanPortfolio(String hierarchy);
|
Collection<MoneyData> retrieveGroupLoanPortfolio(String hierarchy);
|
||||||
|
|
||||||
|
GroupData retrieveNewChildGroupDetails(Long officeId, Long levelId, Long parentGroupId);
|
||||||
|
|
||||||
|
StaffData retrieveStaffsbyId(Long staffId);
|
||||||
}
|
}
|
||||||
|
|||||||
+81
-37
@@ -17,9 +17,10 @@ import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
|
|||||||
import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource;
|
import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource;
|
||||||
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
||||||
import org.mifosplatform.organisation.monetary.data.MoneyData;
|
import org.mifosplatform.organisation.monetary.data.MoneyData;
|
||||||
import org.mifosplatform.organisation.office.data.OfficeLookup;
|
import org.mifosplatform.organisation.office.data.OfficeData;
|
||||||
import org.mifosplatform.organisation.office.service.OfficeReadPlatformService;
|
import org.mifosplatform.organisation.office.service.OfficeReadPlatformService;
|
||||||
import org.mifosplatform.organisation.staff.data.StaffData;
|
import org.mifosplatform.organisation.staff.data.StaffData;
|
||||||
|
import org.mifosplatform.organisation.staff.domain.Staff;
|
||||||
import org.mifosplatform.organisation.staff.exception.StaffNotFoundException;
|
import org.mifosplatform.organisation.staff.exception.StaffNotFoundException;
|
||||||
import org.mifosplatform.portfolio.client.data.ClientLookup;
|
import org.mifosplatform.portfolio.client.data.ClientLookup;
|
||||||
import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
|
import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
|
||||||
@@ -30,6 +31,8 @@ import org.mifosplatform.portfolio.group.data.GroupData;
|
|||||||
import org.mifosplatform.portfolio.group.data.GroupLevelData;
|
import org.mifosplatform.portfolio.group.data.GroupLevelData;
|
||||||
import org.mifosplatform.portfolio.group.data.GroupLookupData;
|
import org.mifosplatform.portfolio.group.data.GroupLookupData;
|
||||||
import org.mifosplatform.portfolio.group.data.GroupSummaryData;
|
import org.mifosplatform.portfolio.group.data.GroupSummaryData;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.Group;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.GroupRepository;
|
||||||
import org.mifosplatform.portfolio.group.exception.GroupLevelNotFoundException;
|
import org.mifosplatform.portfolio.group.exception.GroupLevelNotFoundException;
|
||||||
import org.mifosplatform.portfolio.group.exception.GroupNotFoundException;
|
import org.mifosplatform.portfolio.group.exception.GroupNotFoundException;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -45,14 +48,17 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
private final PlatformSecurityContext context;
|
private final PlatformSecurityContext context;
|
||||||
private final ClientReadPlatformService clientReadPlatformService;
|
private final ClientReadPlatformService clientReadPlatformService;
|
||||||
private final OfficeReadPlatformService officeReadPlatformService;
|
private final OfficeReadPlatformService officeReadPlatformService;
|
||||||
|
private final GroupRepository groupRepository;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public GroupReadPlatformServiceImpl(final PlatformSecurityContext context, final TenantAwareRoutingDataSource dataSource,
|
public GroupReadPlatformServiceImpl(final PlatformSecurityContext context, final TenantAwareRoutingDataSource dataSource,
|
||||||
ClientReadPlatformService clientReadPlatformService, final OfficeReadPlatformService officeReadPlatformService) {
|
ClientReadPlatformService clientReadPlatformService, final OfficeReadPlatformService officeReadPlatformService,
|
||||||
|
final GroupRepository groupRepository) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
||||||
this.clientReadPlatformService = clientReadPlatformService;
|
this.clientReadPlatformService = clientReadPlatformService;
|
||||||
this.officeReadPlatformService = officeReadPlatformService;
|
this.officeReadPlatformService = officeReadPlatformService;
|
||||||
|
this.groupRepository = groupRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,38 +96,34 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
@Override
|
@Override
|
||||||
public Collection<GroupLookupData> retrieveAllGroupsbyOfficeIdAndLevelId(final Long officeId, final Long levelId) {
|
public Collection<GroupLookupData> retrieveAllGroupsbyOfficeIdAndLevelId(final Long officeId, final Long levelId) {
|
||||||
|
|
||||||
|
this.context.authenticatedUser();
|
||||||
|
GroupLookupMapper rm = new GroupLookupMapper();
|
||||||
|
String sql = "select " + rm.groupLookupSchema() + " from m_group g where g.office_id = ? and level_id = ? and g.is_deleted=0";
|
||||||
|
return this.jdbcTemplate.query(sql, rm, new Object[] { officeId, levelId });
|
||||||
|
}
|
||||||
|
|
||||||
|
private GroupLookupData retrieveGroupbyId(Long parentGroupId) {
|
||||||
try {
|
try {
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
|
|
||||||
GroupLookupMapper rm = new GroupLookupMapper();
|
GroupLookupMapper rm = new GroupLookupMapper();
|
||||||
|
String sql = "select " + rm.groupLookupSchema() + " from m_group g where g.id = ? and g.is_deleted=0";
|
||||||
String sql = "select " + rm.groupLookupSchema() + " from m_group g where g.office_id = ? and level_id = ? and g.is_deleted=0";
|
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { parentGroupId });
|
||||||
|
|
||||||
return this.jdbcTemplate.query(sql, rm, new Object[] { officeId, levelId });
|
|
||||||
|
|
||||||
} catch (EmptyResultDataAccessException e) {
|
} catch (EmptyResultDataAccessException e) {
|
||||||
|
throw new GroupNotFoundException(parentGroupId);
|
||||||
// TODO need throw proper exception
|
|
||||||
throw new GroupNotFoundException(officeId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<GroupLookupData> retrieveChildGroupsbyGroupId(final Long groupId) {
|
public Collection<GroupLookupData> retrieveChildGroupsbyGroupId(final Long groupId) {
|
||||||
|
|
||||||
try {
|
this.context.authenticatedUser();
|
||||||
this.context.authenticatedUser();
|
GroupLookupMapper rm = new GroupLookupMapper();
|
||||||
|
String sql = "select " + rm.groupLookupSchema()
|
||||||
|
+ " from m_group pg join m_group g where pg.id = g.parent_id and pg.id = ? and g.is_deleted=0";
|
||||||
|
|
||||||
GroupLookupMapper rm = new GroupLookupMapper();
|
return this.jdbcTemplate.query(sql, rm, new Object[] { groupId });
|
||||||
|
|
||||||
String sql = "select " + rm.groupLookupSchema()
|
|
||||||
+ " from m_group pg join m_group g where pg.id = g.parent_id and pg.id = ? and g.is_deleted=0";
|
|
||||||
|
|
||||||
return this.jdbcTemplate.query(sql, rm, new Object[] { groupId });
|
|
||||||
|
|
||||||
} catch (EmptyResultDataAccessException e) {
|
|
||||||
throw new GroupNotFoundException(groupId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -129,11 +131,8 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
|
|
||||||
GroupLevelDataMapper rm = new GroupLevelDataMapper();
|
GroupLevelDataMapper rm = new GroupLevelDataMapper();
|
||||||
|
|
||||||
String sql = "select " + rm.groupLevelSchema() + " where gl.id = ? ";
|
String sql = "select " + rm.groupLevelSchema() + " where gl.id = ? ";
|
||||||
|
|
||||||
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { levelId });
|
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { levelId });
|
||||||
|
|
||||||
} catch (EmptyResultDataAccessException e) {
|
} catch (EmptyResultDataAccessException e) {
|
||||||
@@ -155,7 +154,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(officeId));
|
this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(officeId));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<OfficeLookup> allowedOffices = new ArrayList<OfficeLookup>(officeReadPlatformService.retrieveAllOfficesForLookup());
|
List<OfficeData> allowedOffices = new ArrayList<OfficeData>(officeReadPlatformService.retrieveAllOfficesForDropdown());
|
||||||
|
|
||||||
List<GroupLookupData> allowedParentGroups = null;
|
List<GroupLookupData> allowedParentGroups = null;
|
||||||
|
|
||||||
@@ -169,13 +168,49 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
return new GroupData(officeId, allowedClients, allowedOffices, allowedParentGroups, groupLevelData, allowedStaffs);
|
return new GroupData(officeId, allowedClients, allowedOffices, allowedParentGroups, groupLevelData, allowedStaffs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GroupData retrieveNewChildGroupDetails(Long officeId, Long levelId, Long parentGroupId) {
|
||||||
|
GroupLevelData groupLevelData = this.retrieveGroupLevelDetails(levelId);
|
||||||
|
if (groupLevelData == null) { throw new GroupLevelNotFoundException(levelId); }
|
||||||
|
|
||||||
|
Group group = groupRepository.findOne(parentGroupId);
|
||||||
|
if (group == null) { throw new GroupNotFoundException(parentGroupId); }
|
||||||
|
|
||||||
|
if (officeId == null) {
|
||||||
|
officeId = group.getOfficeId();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ClientLookup> allowedClients = null;
|
||||||
|
|
||||||
|
if (groupLevelData.isCanHaveClients()) {
|
||||||
|
allowedClients = new ArrayList<ClientLookup>(
|
||||||
|
this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(officeId));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<OfficeData> allowedOffices = new ArrayList<OfficeData>();
|
||||||
|
allowedOffices.add(officeReadPlatformService.retrieveOffice(officeId));
|
||||||
|
|
||||||
|
List<GroupLookupData> allowedParentGroups = new ArrayList<GroupLookupData>();
|
||||||
|
allowedParentGroups.add(this.retrieveGroupbyId(parentGroupId));
|
||||||
|
|
||||||
|
List<StaffData> allowedStaffs = new ArrayList<StaffData>();
|
||||||
|
final Staff staff = group.getStaff();
|
||||||
|
if (staff == null) {
|
||||||
|
allowedStaffs.addAll(this.retrieveStaffsbyOfficeId(officeId));
|
||||||
|
} else {
|
||||||
|
allowedStaffs.add(this.retrieveStaffsbyId(staff.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new GroupData(officeId, allowedClients, allowedOffices, allowedParentGroups, groupLevelData, allowedStaffs);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GroupData retrieveGroupDetails(final Long groupId, final boolean template) {
|
public GroupData retrieveGroupDetails(final Long groupId, final boolean template) {
|
||||||
|
|
||||||
GroupData group = this.retrieveGroup(groupId);
|
GroupData group = this.retrieveGroup(groupId);
|
||||||
final Collection<ClientLookup> clientMembers = this.retrieveClientMembers(groupId);
|
final Collection<ClientLookup> clientMembers = this.retrieveClientMembers(groupId);
|
||||||
Collection<ClientLookup> availableClients = null;
|
Collection<ClientLookup> availableClients = null;
|
||||||
Collection<OfficeLookup> allowedOffices = null;
|
Collection<OfficeData> allowedOffices = null;
|
||||||
Collection<GroupLookupData> allowedParentGroups = null;
|
Collection<GroupLookupData> allowedParentGroups = null;
|
||||||
GroupLevelData groupLevelData = this.retrieveGroupLevelDetails(group.getGroupLevel());
|
GroupLevelData groupLevelData = this.retrieveGroupLevelDetails(group.getGroupLevel());
|
||||||
;
|
;
|
||||||
@@ -197,7 +232,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(group.getOfficeId());
|
availableClients = this.clientReadPlatformService.retrieveAllIndividualClientsForLookupByOfficeId(group.getOfficeId());
|
||||||
availableClients.removeAll(group.clientMembers());
|
availableClients.removeAll(group.clientMembers());
|
||||||
}
|
}
|
||||||
allowedOffices = officeReadPlatformService.retrieveAllOfficesForLookup();
|
allowedOffices = officeReadPlatformService.retrieveAllOfficesForDropdown();
|
||||||
if (groupLevelData.getParentLevelId() != null) {
|
if (groupLevelData.getParentLevelId() != null) {
|
||||||
allowedParentGroups = this.retrieveAllGroupsbyOfficeIdAndLevelId(group.getOfficeId(), groupLevelData.getParentLevelId());
|
allowedParentGroups = this.retrieveAllGroupsbyOfficeIdAndLevelId(group.getOfficeId(), groupLevelData.getParentLevelId());
|
||||||
}
|
}
|
||||||
@@ -214,23 +249,29 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
@Override
|
@Override
|
||||||
public Collection<StaffData> retrieveStaffsbyOfficeId(final Long officeId) {
|
public Collection<StaffData> retrieveStaffsbyOfficeId(final Long officeId) {
|
||||||
|
|
||||||
|
this.context.authenticatedUser();
|
||||||
|
StaffDataMapper rm = new StaffDataMapper();
|
||||||
|
String sql = "select " + rm.staffDataSchema() + " where o.id = ?";
|
||||||
|
return this.jdbcTemplate.query(sql, rm, new Object[] { officeId });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StaffData retrieveStaffsbyId(final Long staffId) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
|
|
||||||
StaffDataMapper rm = new StaffDataMapper();
|
StaffDataMapper rm = new StaffDataMapper();
|
||||||
|
String sql = "select " + rm.staffDataSchema() + " where s.id = ?";
|
||||||
String sql = "select " + rm.staffDataSchema() + " where o.id = ?";
|
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { staffId });
|
||||||
|
|
||||||
return this.jdbcTemplate.query(sql, rm, new Object[] { officeId });
|
|
||||||
|
|
||||||
} catch (EmptyResultDataAccessException e) {
|
} catch (EmptyResultDataAccessException e) {
|
||||||
// TODO throw Staff not found in given office
|
throw new StaffNotFoundException(staffId);
|
||||||
throw new StaffNotFoundException(officeId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long retrieveTotalClients(final String hierarchy) {
|
public Long retrieveTotalClients(final String hierarchy) {
|
||||||
|
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
|
|
||||||
@@ -239,6 +280,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
+ "ON gc.group_id = g.id WHERE g.hierarchy LIKE ? ";
|
+ "ON gc.group_id = g.id WHERE g.hierarchy LIKE ? ";
|
||||||
return this.jdbcTemplate.queryForLong(sqlTotalClients, new Object[] { groupHierarchy });
|
return this.jdbcTemplate.queryForLong(sqlTotalClients, new Object[] { groupHierarchy });
|
||||||
|
|
||||||
|
// TODO to need catch EmptyResultDataAccessException ?
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -306,9 +348,10 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
String parentName = rs.getString("parentName");
|
String parentName = rs.getString("parentName");
|
||||||
Long staffId = rs.getLong("staffId");
|
Long staffId = rs.getLong("staffId");
|
||||||
String staffName = rs.getString("staffName");
|
String staffName = rs.getString("staffName");
|
||||||
String hierarchy =rs.getString("hierarchy");
|
String hierarchy = rs.getString("hierarchy");
|
||||||
|
|
||||||
return new GroupData(id, officeId, officeName, name, externalId, groupLevel, parentId, parentName, staffId, staffName , hierarchy);
|
return new GroupData(id, officeId, officeName, name, externalId, groupLevel, parentId, parentName, staffId, staffName,
|
||||||
|
hierarchy);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -516,4 +559,5 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
|||||||
return new GroupAccountSummaryData(id, externalId, productId, loanProductName, loanStatusId);
|
return new GroupAccountSummaryData(id, externalId, productId, loanProductName, loanStatusId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -21,9 +21,9 @@ public interface GroupWritePlatformService {
|
|||||||
CommandProcessingResult deleteGroup(Long groupId);
|
CommandProcessingResult deleteGroup(Long groupId);
|
||||||
|
|
||||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_GROUP')")
|
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_GROUP')")
|
||||||
CommandProcessingResult assignLoanOfficer(GroupCommand command);
|
CommandProcessingResult assignStaff(GroupCommand command);
|
||||||
|
|
||||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_GROUP')")
|
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_GROUP')")
|
||||||
CommandProcessingResult unassignLoanOfficer(GroupCommand command);
|
CommandProcessingResult unassignStaff(GroupCommand command);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+72
-50
@@ -24,8 +24,12 @@ import org.mifosplatform.portfolio.client.exception.ClientNotFoundException;
|
|||||||
import org.mifosplatform.portfolio.group.command.GroupCommand;
|
import org.mifosplatform.portfolio.group.command.GroupCommand;
|
||||||
import org.mifosplatform.portfolio.group.command.GroupCommandValidator;
|
import org.mifosplatform.portfolio.group.command.GroupCommandValidator;
|
||||||
import org.mifosplatform.portfolio.group.domain.Group;
|
import org.mifosplatform.portfolio.group.domain.Group;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.GroupLevel;
|
||||||
|
import org.mifosplatform.portfolio.group.domain.GroupLevelRepository;
|
||||||
import org.mifosplatform.portfolio.group.domain.GroupRepository;
|
import org.mifosplatform.portfolio.group.domain.GroupRepository;
|
||||||
|
import org.mifosplatform.portfolio.group.exception.GroupLevelNotFoundException;
|
||||||
import org.mifosplatform.portfolio.group.exception.GroupNotFoundException;
|
import org.mifosplatform.portfolio.group.exception.GroupNotFoundException;
|
||||||
|
import org.mifosplatform.portfolio.group.exception.InvalidGroupLevelException;
|
||||||
import org.mifosplatform.portfolio.group.exception.LoanOfficerNotFoundException;
|
import org.mifosplatform.portfolio.group.exception.LoanOfficerNotFoundException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -50,14 +54,18 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla
|
|||||||
|
|
||||||
private final StaffRepository staffRepository;
|
private final StaffRepository staffRepository;
|
||||||
|
|
||||||
|
private final GroupLevelRepository groupLevelRepository;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public GroupWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final GroupRepository groupRepository,
|
public GroupWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final GroupRepository groupRepository,
|
||||||
final ClientRepository clientRepository, final OfficeRepository officeRepository, final StaffRepository staffRepository) {
|
final ClientRepository clientRepository, final OfficeRepository officeRepository, final StaffRepository staffRepository,
|
||||||
|
final GroupLevelRepository groupLevelRepository) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.groupRepository = groupRepository;
|
this.groupRepository = groupRepository;
|
||||||
this.clientRepository = clientRepository;
|
this.clientRepository = clientRepository;
|
||||||
this.officeRepository = officeRepository;
|
this.officeRepository = officeRepository;
|
||||||
this.staffRepository = staffRepository;
|
this.staffRepository = staffRepository;
|
||||||
|
this.groupLevelRepository = groupLevelRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -73,15 +81,15 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla
|
|||||||
|
|
||||||
if (groupOffice == null) { throw new OfficeNotFoundException(command.getOfficeId()); }
|
if (groupOffice == null) { throw new OfficeNotFoundException(command.getOfficeId()); }
|
||||||
|
|
||||||
Staff loanOfficer = null;
|
Staff staff = null;
|
||||||
final Long loanOfficerId = command.getLoanOfficeId();
|
final Long staffId = command.getStaffId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate the loan officer is present in the given office or not
|
* Validate the staff is present in the given office or not
|
||||||
*/
|
*/
|
||||||
if (loanOfficerId != null) {
|
if (staffId != null) {
|
||||||
loanOfficer = this.staffRepository.findByOffice(loanOfficerId, command.getOfficeId());
|
staff = this.staffRepository.findByOffice(staffId, command.getOfficeId());
|
||||||
if (loanOfficer == null) { throw new StaffNotFoundException(loanOfficerId); }
|
if (staff == null) { throw new StaffNotFoundException(staffId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
final Long parentId = command.getParentId();
|
final Long parentId = command.getParentId();
|
||||||
@@ -90,22 +98,36 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla
|
|||||||
/**
|
/**
|
||||||
* Validate the parent group to check it is present.
|
* Validate the parent group to check it is present.
|
||||||
*/
|
*/
|
||||||
|
Long parentGroupLevelId = null;
|
||||||
if (parentId != null) {
|
if (parentId != null) {
|
||||||
parent = this.groupRepository.findOne(parentId);
|
parent = this.groupRepository.findOne(parentId);
|
||||||
if (parent == null) { throw new GroupNotFoundException(parentId); }
|
if (parent == null) { throw new GroupNotFoundException(parentId); }
|
||||||
|
parentGroupLevelId = parent.getLevelId();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Need to validate level is immediate child level of the Parent group's level
|
|
||||||
*/
|
|
||||||
// TODO level validation
|
|
||||||
|
|
||||||
final Long levelId = command.getLevelId();
|
final Long levelId = command.getLevelId();
|
||||||
|
|
||||||
|
final GroupLevel groupLevel = groupLevelRepository.findOne(levelId);
|
||||||
|
|
||||||
|
if(groupLevel == null){throw new GroupLevelNotFoundException(levelId);}
|
||||||
|
|
||||||
|
final Long parentLevelId = groupLevel.getParentId();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If Group is not super parent then validate group level's parent level is same as group parent's level
|
||||||
|
* this check makes sure new group is added at immediate next level in hierarchy
|
||||||
|
*/
|
||||||
|
if(!groupLevel.isSuperParent()){
|
||||||
|
if (parentGroupLevelId != parentLevelId) {
|
||||||
|
final String errorMessage = "Parent group's level[" + parentLevelId + "] is not equal to child level's parent level ["
|
||||||
|
+ parentGroupLevelId + "]";
|
||||||
|
throw new InvalidGroupLevelException("add", "invalid.level", errorMessage, parentLevelId , parentGroupLevelId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final Set<Client> clientMembers = assembleSetOfClients(command);
|
final Set<Client> clientMembers = assembleSetOfClients(command);
|
||||||
|
|
||||||
final Group newGroup = Group.newGroup(groupOffice, loanOfficer, parent , levelId , command.getName(), command.getExternalId(), clientMembers);
|
final Group newGroup = Group.newGroup(groupOffice, staff, parent , levelId , command.getName(), command.getExternalId(), clientMembers);
|
||||||
|
|
||||||
// pre save to generate id for use in group hierarchy
|
// pre save to generate id for use in group hierarchy
|
||||||
this.groupRepository.save(newGroup);
|
this.groupRepository.save(newGroup);
|
||||||
@@ -137,55 +159,55 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla
|
|||||||
|
|
||||||
Office groupOffice = null;
|
Office groupOffice = null;
|
||||||
final Long officeId = command.getOfficeId();
|
final Long officeId = command.getOfficeId();
|
||||||
Staff loanOfficer = null;
|
Staff staff = null;
|
||||||
final Long loanOfficerId = command.getLoanOfficeId();
|
final Long staffId = command.getStaffId();
|
||||||
|
|
||||||
if (command.isOfficeIdChanged() && command.isLoanOfficerChanged()) {
|
if (command.isOfficeIdChanged() && command.isStaffChanged()) {
|
||||||
/**
|
/**
|
||||||
* Scenario: Both Office and loan officer are changed, check new
|
* Scenario: Both Office and Staff are changed, check new
|
||||||
* loan officer is present in new office
|
* staff is present in new office
|
||||||
*/
|
*/
|
||||||
if (officeId != null) {
|
if (officeId != null) {
|
||||||
groupOffice = this.officeRepository.findOne(officeId);
|
groupOffice = this.officeRepository.findOne(officeId);
|
||||||
if (groupOffice == null) { throw new OfficeNotFoundException(command.getOfficeId()); }
|
if (groupOffice == null) { throw new OfficeNotFoundException(command.getOfficeId()); }
|
||||||
}
|
}
|
||||||
if (loanOfficerId != null) {
|
if (staffId != null) {
|
||||||
loanOfficer = this.staffRepository.findByOffice(loanOfficerId, officeId);
|
staff = this.staffRepository.findByOffice(staffId, officeId);
|
||||||
if (loanOfficer == null) { throw new LoanOfficerNotFoundException(loanOfficerId); }
|
if (staff == null) { throw new LoanOfficerNotFoundException(staffId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (command.isOfficeIdChanged()) {
|
} else if (command.isOfficeIdChanged()) {
|
||||||
/**
|
/**
|
||||||
* Scenario: Only Office is changed, check new office has
|
* Scenario: Only Office is changed, check new office has
|
||||||
* present loan officer, This situation is not practical as loan
|
* present staff, This situation is not practical as
|
||||||
* officer can't be present in two offices
|
* staff can't be present in two offices
|
||||||
*/
|
*/
|
||||||
// TODO When office is changed need to make sure all the loan
|
// TODO When office is changed need to make sure all the staff
|
||||||
// officer at loan level are also updated or verified
|
// at loan level are also updated or verified
|
||||||
|
|
||||||
if (officeId != null) {
|
if (officeId != null) {
|
||||||
groupOffice = this.officeRepository.findOne(officeId);
|
groupOffice = this.officeRepository.findOne(officeId);
|
||||||
if (groupOffice == null) { throw new OfficeNotFoundException(command.getOfficeId()); }
|
if (groupOffice == null) { throw new OfficeNotFoundException(command.getOfficeId()); }
|
||||||
}
|
}
|
||||||
if (loanOfficerId != null) {
|
if (staffId != null) {
|
||||||
loanOfficer = this.staffRepository.findByOffice(loanOfficerId, groupForUpdate.getOfficeId());
|
staff = this.staffRepository.findByOffice(staffId, groupForUpdate.getOfficeId());
|
||||||
if (loanOfficer == null) { throw new LoanOfficerNotFoundException(loanOfficerId); }
|
if (staff == null) { throw new LoanOfficerNotFoundException(staffId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (command.isLoanOfficerChanged()) {
|
} else if (command.isStaffChanged()) {
|
||||||
/**
|
/**
|
||||||
* Scenario: Only Loan Officer is changed, check new new loan
|
* Scenario: Only staff is changed, check new new loan
|
||||||
* officer is in present assigned office
|
* officer is in present assigned office
|
||||||
*/
|
*/
|
||||||
if (loanOfficerId != null) {
|
if (staffId != null) {
|
||||||
loanOfficer = this.staffRepository.findByOffice(loanOfficerId, groupForUpdate.getOfficeId());
|
staff = this.staffRepository.findByOffice(staffId, groupForUpdate.getOfficeId());
|
||||||
if (loanOfficer == null) { throw new LoanOfficerNotFoundException(loanOfficerId); }
|
if (staff == null) { throw new LoanOfficerNotFoundException(staffId); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final Set<Client> clientMembers = assembleSetOfClients(command);
|
final Set<Client> clientMembers = assembleSetOfClients(command);
|
||||||
|
|
||||||
groupForUpdate.update(command, groupOffice, loanOfficer, clientMembers);
|
groupForUpdate.update(command, groupOffice, staff, clientMembers);
|
||||||
|
|
||||||
this.groupRepository.saveAndFlush(groupForUpdate);
|
this.groupRepository.saveAndFlush(groupForUpdate);
|
||||||
|
|
||||||
@@ -199,24 +221,24 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla
|
|||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
|
|
||||||
public CommandProcessingResult assignLoanOfficer(final GroupCommand command) {
|
public CommandProcessingResult assignStaff(final GroupCommand command) {
|
||||||
|
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
|
|
||||||
final GroupCommandValidator validator = new GroupCommandValidator(command);
|
final GroupCommandValidator validator = new GroupCommandValidator(command);
|
||||||
validator.validateForLoanOfficerUpdate();
|
validator.validateForStaffUpdate();
|
||||||
|
|
||||||
final Group groupForUpdate = this.groupRepository.findOne(command.getId());
|
final Group groupForUpdate = this.groupRepository.findOne(command.getId());
|
||||||
if (groupForUpdate == null || groupForUpdate.isDeleted()) { throw new GroupNotFoundException(command.getId()); }
|
if (groupForUpdate == null || groupForUpdate.isDeleted()) { throw new GroupNotFoundException(command.getId()); }
|
||||||
|
|
||||||
Staff loanOfficer = null;
|
Staff staff = null;
|
||||||
final Long loanOfficerId = command.getLoanOfficeId();
|
final Long staffId = command.getStaffId();
|
||||||
if (command.isLoanOfficerChanged() && loanOfficerId != null) {
|
if (command.isStaffChanged() && staffId != null) {
|
||||||
loanOfficer = this.staffRepository.findByOffice(loanOfficerId, groupForUpdate.getOfficeId());
|
staff = this.staffRepository.findByOffice(staffId, groupForUpdate.getOfficeId());
|
||||||
if (loanOfficer == null) { throw new LoanOfficerNotFoundException(loanOfficerId); }
|
if (staff == null) { throw new LoanOfficerNotFoundException(staffId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
groupForUpdate.assigLoanOfficer(command, loanOfficer);
|
groupForUpdate.assigStaff(command, staff);
|
||||||
|
|
||||||
this.groupRepository.saveAndFlush(groupForUpdate);
|
this.groupRepository.saveAndFlush(groupForUpdate);
|
||||||
|
|
||||||
@@ -225,24 +247,24 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult unassignLoanOfficer(final GroupCommand command) {
|
public CommandProcessingResult unassignStaff(final GroupCommand command) {
|
||||||
|
|
||||||
this.context.authenticatedUser();
|
this.context.authenticatedUser();
|
||||||
|
|
||||||
final GroupCommandValidator validator = new GroupCommandValidator(command);
|
final GroupCommandValidator validator = new GroupCommandValidator(command);
|
||||||
validator.validateForLoanOfficerUpdate();
|
validator.validateForStaffUpdate();
|
||||||
|
|
||||||
final Group groupForUpdate = this.groupRepository.findOne(command.getId());
|
final Group groupForUpdate = this.groupRepository.findOne(command.getId());
|
||||||
if (groupForUpdate == null || groupForUpdate.isDeleted()) { throw new GroupNotFoundException(command.getId()); }
|
if (groupForUpdate == null || groupForUpdate.isDeleted()) { throw new GroupNotFoundException(command.getId()); }
|
||||||
|
|
||||||
final Long loanOfficerId = command.getLoanOfficeId();
|
final Long staffId = command.getStaffId();
|
||||||
final Long presentLoanOfficerId = groupForUpdate.getLoanOfficerId();
|
final Long presentStaffId = groupForUpdate.getStaffId();
|
||||||
|
|
||||||
if (command.isLoanOfficerChanged() && loanOfficerId != null) {
|
if (command.isStaffChanged() && staffId != null) {
|
||||||
if (!loanOfficerId.equals(presentLoanOfficerId)) { throw new LoanOfficerNotFoundException(loanOfficerId); }
|
if (!staffId.equals(presentStaffId)) { throw new LoanOfficerNotFoundException(staffId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
groupForUpdate.unassigLoanOfficer(command);
|
groupForUpdate.unassigStaff(command);
|
||||||
|
|
||||||
this.groupRepository.saveAndFlush(groupForUpdate);
|
this.groupRepository.saveAndFlush(groupForUpdate);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user