From 3074735fc5e10eadca89ae0bd8cb2ed86a690d28 Mon Sep 17 00:00:00 2001 From: Alex Power Date: Fri, 30 Oct 2020 10:19:08 +0000 Subject: [PATCH 1/2] Delegate Task --- .../controllers/DataRequestController.java | 11 ++++- .../workflow/dtos/DarDelegateTasksDto.java | 19 +++++++++ .../workflow/services/DataRequestService.java | 3 ++ .../services/DataRequestServiceImpl.java | 42 +++++++++++++++++-- 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/gateway/workflow/dtos/DarDelegateTasksDto.java diff --git a/src/main/java/com/gateway/workflow/controllers/DataRequestController.java b/src/main/java/com/gateway/workflow/controllers/DataRequestController.java index e585695..c906bd1 100644 --- a/src/main/java/com/gateway/workflow/controllers/DataRequestController.java +++ b/src/main/java/com/gateway/workflow/controllers/DataRequestController.java @@ -1,5 +1,6 @@ package com.gateway.workflow.controllers; +import com.gateway.workflow.dtos.DarDelegateTasksDto; import com.gateway.workflow.dtos.DarHistoryAggDto; import com.gateway.workflow.dtos.DarStepReviewDto; import com.gateway.workflow.dtos.ManagerApprovedDto; @@ -36,9 +37,17 @@ public DarStepReviewDto darReviewerStep(@PathVariable("businessKey") String busi return dataRequestService.completeReviewerStep(businessKey, darStepReviewDto); } - @PostMapping(value = "/manager/completed/{businessKey}") + @PostMapping(value = "/manager/complete/{businessKey}") @ResponseStatus(OK) public ManagerApprovedDto darManagerApproval(@PathVariable("businessKey") String businessKey, @Valid @RequestBody ManagerApprovedDto managerApprovedDto) throws NotFoundException { return dataRequestService.managerCompletedReview(businessKey, managerApprovedDto); } + + @PutMapping(value = "/manager/delegate/task/{businessKey}") + @ResponseStatus(OK) + public DarDelegateTasksDto managerDelegateTask(@PathVariable("businessKey") String businessKey, + @RequestParam(value = "reviewerId") String reviewerId, + @RequestParam(value = "managerId") String managerId) throws NotFoundException { + return dataRequestService.managerDelegateTask(businessKey, reviewerId, managerId); + } } diff --git a/src/main/java/com/gateway/workflow/dtos/DarDelegateTasksDto.java b/src/main/java/com/gateway/workflow/dtos/DarDelegateTasksDto.java new file mode 100644 index 0000000..e1df64b --- /dev/null +++ b/src/main/java/com/gateway/workflow/dtos/DarDelegateTasksDto.java @@ -0,0 +1,19 @@ +package com.gateway.workflow.dtos; + +import lombok.*; + +import java.util.List; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Setter +@ToString +public class DarDelegateTasksDto { + + private List delegateTasks; + private String previousAssignee; + private String newAssignee; + private Integer taskCount; +} diff --git a/src/main/java/com/gateway/workflow/services/DataRequestService.java b/src/main/java/com/gateway/workflow/services/DataRequestService.java index 31c83f6..e89671a 100644 --- a/src/main/java/com/gateway/workflow/services/DataRequestService.java +++ b/src/main/java/com/gateway/workflow/services/DataRequestService.java @@ -1,5 +1,6 @@ package com.gateway.workflow.services; +import com.gateway.workflow.dtos.DarDelegateTasksDto; import com.gateway.workflow.dtos.DarHistoryAggDto; import com.gateway.workflow.dtos.DarStepReviewDto; import com.gateway.workflow.dtos.ManagerApprovedDto; @@ -13,5 +14,7 @@ public interface DataRequestService { DarStepReviewDto completeReviewerStep(String businessKey, DarStepReviewDto darStepReviewDto) throws NotFoundException; + DarDelegateTasksDto managerDelegateTask(String businessKey, String reviewerId, String managerId) throws NotFoundException; + DarHistoryAggDto getDarRequestHistory(String businessKey) throws NotFoundException; } diff --git a/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java b/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java index e932dba..0b73a75 100644 --- a/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java +++ b/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java @@ -1,9 +1,6 @@ package com.gateway.workflow.services; -import com.gateway.workflow.dtos.DarHistoryAggDto; -import com.gateway.workflow.dtos.DarHistoryDto; -import com.gateway.workflow.dtos.DarStepReviewDto; -import com.gateway.workflow.dtos.ManagerApprovedDto; +import com.gateway.workflow.dtos.*; import javassist.NotFoundException; import org.camunda.bpm.engine.HistoryService; import org.camunda.bpm.engine.ProcessEngine; @@ -116,6 +113,43 @@ public DarStepReviewDto completeReviewerStep(String businessKey, DarStepReviewDt return darStepReviewDto; } + @Override + public DarDelegateTasksDto managerDelegateTask(String businessKey, String reviewerId, String managerId) throws NotFoundException { + // Get a list of filtered user tasks on the businessKey (DarId) and reviewerId. + // reviewerId - is the user ID you want to delegate from + // managerId - is the user ID you want to delegate to + List userTasks = getUserTasks(businessKey).stream() + .filter(x -> reviewerId.equals(x.getAssignee())) + .collect(Collectors.toList()); + + // If userTasks is null or has a size less than equal to 0 + // then throw a friendly message + if(userTasks == null || userTasks.size() <= 0) { + throw new NotFoundException(String.format("No tasks could be found for assignee: %s for DAR: %s", reviewerId, businessKey)); + } + + //Create a new list to keep track of all user tasks delegated + List delegateTasks = new ArrayList<>(); + + // Iterate over the users tasks and assignee them to the new user (managerId). + for (Task t : userTasks) { + delegateTasks.add(t.getName()); + taskService.setAssignee(t.getId(), managerId); + } + + // Return a new DTO with a list of; + // Tasks that were updated + // The new assigneeId + // The previous assigneeId + // The number of tasks modified + return DarDelegateTasksDto.builder() + .delegateTasks(delegateTasks) + .newAssignee(managerId) + .previousAssignee(reviewerId) + .taskCount(delegateTasks.size()) + .build(); + } + @Override public DarHistoryAggDto getDarRequestHistory(String businessKey) throws NotFoundException { String process = getProcessId(businessKey); From 7a8b7e735b5b03b057378fc22e7d43d956e4846d Mon Sep 17 00:00:00 2001 From: Alex Power Date: Fri, 6 Nov 2020 16:04:56 +0000 Subject: [PATCH 2/2] Updated delegate to any --- .../workflow/services/DataRequestServiceImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java b/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java index 0b73a75..2b59f97 100644 --- a/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java +++ b/src/main/java/com/gateway/workflow/services/DataRequestServiceImpl.java @@ -135,6 +135,15 @@ public DarDelegateTasksDto managerDelegateTask(String businessKey, String review for (Task t : userTasks) { delegateTasks.add(t.getName()); taskService.setAssignee(t.getId(), managerId); + + // Uncomment the below if you wish to complete the task after delegation + /** + * Map processVars = new HashMap<>(); + * processVars.put("managerApproved", true); + * taskService.delegateTask(t.getId(), managerId); + * taskService.complete(t.getId(), processVars); + * */ + } // Return a new DTO with a list of;