diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php index c337a3adb..2af00b599 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php @@ -9,6 +9,8 @@ use ProcessMaker\Model\AppDelay; use ProcessMaker\Model\Application; use ProcessMaker\Model\Delegation; use ProcessMaker\Model\Documents; +use ProcessMaker\Model\GroupUser; +use ProcessMaker\Model\Groupwf; use ProcessMaker\Model\ListUnassigned; use ProcessMaker\Model\Process; use ProcessMaker\Model\ProcessUser; @@ -483,4 +485,43 @@ class CasesTest extends TestCase // Asserts $this->assertNotTrue($result); } + + /** + * It tests get users to reassign + * + * @covers \ProcessMaker\BusinessModel\Cases::usersToReassign() + * @test + */ + public function it_should_test_users_to_reassign() + { + $process = Process::factory()->create(); + $task = Task::factory()->create([ + 'PRO_UID' => $process->PRO_UID, + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@arrayOfusers' + ]); + $users = User::factory(3)->create(); + $groupwf = Groupwf::factory()->create(); + + GroupUser::factory()->create([ + 'GRP_UID' => $groupwf->GRP_UID, + 'GRP_ID' => $groupwf->GRP_ID, + 'USR_UID' => $users[1]->USR_UID + ]); + GroupUser::factory()->create([ + 'GRP_UID' => $groupwf->GRP_UID, + 'GRP_ID' => $groupwf->GRP_ID, + 'USR_UID' => $users[2]->USR_UID + ]); + + $application = Application::factory()->create([ + 'PRO_UID' => $process->PRO_UID, + 'APP_DATA' => serialize(['arrayOfusers' => [$groupwf->GRP_UID, $users[0]->USR_UID]]) + ]); + + $cases = new Cases(); + $result = $cases->usersToReassign($users[0]['USR_UID'], $task->TAS_UID, $application->APP_UID); + // Asserts + $this->assertCount(3, $result['data']); + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index a376a3314..abf64e254 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -53,9 +53,12 @@ use ProcessMaker\Model\AppNotes as Notes; use ProcessMaker\Model\AppTimeoutAction; use ProcessMaker\Model\Delegation; use ProcessMaker\Model\Documents; +use ProcessMaker\Model\Groupwf; +use ProcessMaker\Model\GroupUser; use ProcessMaker\Model\ListUnassigned; use ProcessMaker\Model\Triggers; use ProcessMaker\Model\ProcessUser; +use ProcessMaker\Model\Task; use ProcessMaker\Model\User; use ProcessMaker\Plugins\PluginRegistry; use ProcessMaker\Services\Api; @@ -2761,6 +2764,75 @@ class Cases } } + /** + * Get Users to reassign + * + * @param string $userUid Unique id of User (User logged) + * @param string $taskUid Unique id of Task + * @param string $appUid Unique id of Application + * + * @return array Return Users to reassign + * @throws Exception + */ + public function usersToReassign( + $userUid, + $taskUid, + $appUid + ) { + $task = Task::where('TAS_UID', '=', $taskUid)->first(); + $type = $task->TAS_ASSIGN_TYPE; + $variable = $task->TAS_GROUP_VARIABLE; + $result = []; + + if ($type === 'SELF_SERVICE' && $variable !== '') { + $variable = substr($variable, 2); + $case = new ClassesCases(); + $app = new ModelApplication(); + $fields = $app::where('APP_UID', '=', $appUid)->first(); + $data = $case::unserializeData($fields->APP_DATA); + + $row = []; + $groups = new GroupUser(); + $groupwf = new Groupwf(); + + if (!empty($data[$variable])) { + foreach ($data[$variable] as $uid) { + $group = $groupwf::where('GRP_UID', '=', $uid)->first(); + if (!empty($group)) { + $users = $groups::where('GRP_UID', '=', $uid)->get()->toArray(); + foreach ($users as $data) { + $row[] = $data['USR_UID']; + } + } else { + $row[] = $uid; + } + } + } + + $user = new User(); + $users = []; + foreach ($row as $data) { + $obj = $user::where('USR_UID', '=', $data)->Active()->first(); + if (!is_null($obj) && $obj->USR_USERNAME !== "") { + $users[] = $obj; + } + } + + foreach ($users as $user) { + $result[] = [ + "USR_UID" => $user->USR_UID, + "USR_USERNAME" => $user->USR_USERNAME, + "USR_FIRSTNAME" => $user->USR_FIRSTNAME, + "USR_LASTNAME"=> $user->USR_LASTNAME + ]; + } + + } else { + $result = $this->getUsersToReassign($userUid, $taskUid)['data']; + } + return ['data' => $result]; + } + /** * Get Users to reassign * diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php index 216ad4c77..60c459d79 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php @@ -1093,6 +1093,33 @@ class Cases extends Api } } + + + /** + * Get users to reassign or assign + * + * @url GET /:task_uid/:app_uid/userstoreassign + * + * @param string $task_uid + * @param string $app_uid + * + * @return array + * @throws RestException + * + * @access protected + * @class AccessControl {@permission PM_CASES} + */ + public function usersToReasign($task_uid, $app_uid) + { + try { + $usr_uid = $this->getUserId(); + $cases = new BmCases(); + return $cases->usersToReassign($usr_uid, $task_uid, $app_uid); + } catch (Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + } + /** * Execute trigger in a case. *