PMCORE-4063

This commit is contained in:
Luciana Nuñez
2022-11-24 10:18:35 -04:00
parent 48b9a96f67
commit e030cf18bb
3 changed files with 140 additions and 0 deletions

View File

@@ -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']);
}
}

View File

@@ -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
*

View File

@@ -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.
*