3namespace Bitrix\Bizproc\Api\Service;
5use Bitrix\Bizproc\Api\Data\TaskService\TasksToGet;
6use Bitrix\Bizproc\Api\Data\TaskService\TasksToBeDelegated;
7use Bitrix\Bizproc\Api\Request\TaskService\DelegateTasksRequest;
8use Bitrix\Bizproc\Api\Request\TaskService\DoInlineTasksRequest;
9use Bitrix\Bizproc\Api\Request\TaskService\DoTaskRequest;
10use Bitrix\Bizproc\Api\Request\TaskService\GetUserTaskRequest;
11use Bitrix\Bizproc\Api\Request\TaskService\GetUserTaskListRequest;
12use Bitrix\Bizproc\Api\Request\TaskService\GetUserTaskByWorkflowIdRequest;
13use Bitrix\Bizproc\Api\Response;
14use Bitrix\Bizproc\Api\Response\TaskService\DelegateTasksResponse;
15use Bitrix\Bizproc\Api\Response\TaskService\GetUserTaskListResponse;
16use Bitrix\Bizproc\Api\Response\TaskService\GetUserTaskByWorkflowIdResponse;
17use Bitrix\Bizproc\Result;
18use Bitrix\Bizproc\Workflow\Task\TaskTable;
19use Bitrix\Main\ArgumentException;
20use Bitrix\Main\ArgumentOutOfRangeException;
22use Bitrix\Main\Localization\Loc;
26 private const TASK_ALREADY_DONE_ERROR_CODE =
'TASK_ALREADY_DONE';
27 private const TASK_USER_NOT_MEMBER_ERROR_CODE =
'TASK_USER_NOT_MEMBER';
28 private const TASK_NOT_FOUND_ERROR_CODE =
'TASK_NOT_FOUND';
39 $tasksToDelegate =
null;
47 in_array($e->
getParameter(), [
'fromUserId',
'toUserId'],
true)
48 ? Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_DELEGATE_TASK_ERROR_INCORRECT_USER_ID')
55 $delegateResponse->addError(
56 new Error(Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_DELEGATE_TASK_ERROR_NO_TASKS'))
59 if (!$tasksToDelegate || !$delegateResponse->isSuccess())
61 return $delegateResponse;
64 $checkAccessResult = $this->accessService->checkDelegateTask(
65 $tasksToDelegate->getToUserId(),
66 $tasksToDelegate->getFromUserId()
68 if (!$checkAccessResult->isSuccess())
70 return $delegateResponse->addErrors($checkAccessResult->getErrors());
73 $allowedDelegationType = $checkAccessResult->getAllowedDelegationTypes();
76 $isDelegated = \CBPDocument::delegateTasks(
77 $tasksToDelegate->getFromUserId(),
78 $tasksToDelegate->getToUserId(),
79 $tasksToDelegate->getTaskIds(),
81 $allowedDelegationType
86 $errors = [Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_DELEGATE_TASK_ERROR_TASKS_NOT_FOUND')];
93 if ($delegateResponse->isSuccess())
95 $delegateResponse->setData([
96 'successMessage' => Loc::getMessage(
97 'BIZPROC_LIB_API_TASK_SERVICE_DELEGATE_TASK_SUCCESS_MESSAGE',
98 [
'#USER_NAME#' => \CBPHelper::convertUserToPrintableForm($tasksToDelegate->getToUserId(),
'',
false)]
103 return $delegateResponse;
119 $getTasksResponse->addError(
new Error($exception->getMessage()));
121 if (!$tasksToGet || !$getTasksResponse->isSuccess())
123 return $getTasksResponse;
126 $checkAccessResult = $this->accessService->checkViewTasks($tasksToGet->getTargetUserId());
127 if (!$checkAccessResult->isSuccess())
129 return $getTasksResponse->addErrors($checkAccessResult->getErrors());
133 $tasksToGet->getSort(),
134 $tasksToGet->getFilter(),
137 'nPageSize' => $tasksToGet->getLimit(),
138 'iNumPage' => (
int)($tasksToGet->getOffset() / $tasksToGet->getLimit()) + 1,
140 $tasksToGet->buildSelectFields()
143 while ($task = $tasksIterator->fetch())
145 $taskList[] = $this->prepareTaskInfo($task, $tasksToGet->getTargetUserId());
148 return $getTasksResponse->setData([
'tasks' => $taskList]);
156 $checkAccessResult = $this->accessService->checkDoTasks(
$request->userId);
157 if (!$checkAccessResult->isSuccess())
159 return $result->addErrors($checkAccessResult->getErrors());
198 Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_DO_TASK_ERROR_ALREADY_DONE'),
199 self::TASK_ALREADY_DONE_ERROR_CODE
204 $task[
'PARAMETERS'][
'DOCUMENT_ID'] = \CBPStateService::GetStateDocumentId($task[
'WORKFLOW_ID']);
205 $task[
'MODULE_ID'] = $task[
'PARAMETERS'][
'DOCUMENT_ID'][0];
206 $task[
'ENTITY'] = $task[
'PARAMETERS'][
'DOCUMENT_ID'][1];
207 $task[
'DOCUMENT_ID'] = $task[
'PARAMETERS'][
'DOCUMENT_ID'][2];
212 if ($task[
'MODULE_ID'] ===
'rpa' &&
$error[
'code'] === \CBPRuntime::EXCEPTION_CODE_INSTANCE_TERMINATED)
217 if (!empty(
$error[
'customData']))
274 $checkAccessResult = $this->accessService->checkViewTasks(
$request->userId);
275 if (!$checkAccessResult->isSuccess())
277 return $response->addErrors($checkAccessResult->getErrors());
307 $task = $this->prepareTaskInfo($task,
$request->userId);
315 $renderer = new \Bitrix\Bizproc\Controller\Response\RenderControlCollectionContent();
330 'TEMPLATE_ID' =>
'WORKFLOW_STATE.WORKFLOW_TEMPLATE_ID',
333 '=WORKFLOW_ID' =>
$request->workflowId,
334 '=TASK_USERS.USER_ID' =>
$request->userId,
337 ->setOrder([
'ID' =>
'DESC'])
340 $task = $taskQuery->fetch();
350 $task[
'saveVariables'] = $task[
'PARAMETERS'][
'SaveVariables'] ??
false;
351 $controls = \CBPDocument::getTaskControls($task,
$request->userId);
353 $task[
'BUTTONS'] = $controls[
'BUTTONS'] ??
null;
354 $task[
'FIELDS'] = $controls[
'FIELDS'] ??
null;
355 if (isset($task[
'DESCRIPTION']))
358 \CBPHelper::convertBBtoText(
359 preg_replace(
'|\n+|',
"\n", trim($task[
'DESCRIPTION']))
364 if ($taskQuery?->fetch())
366 $task[
'IS_LAST_TASK_FOR_USER'] =
false;
371 $task[
'ACTIVITY_NAME'],
373 $task[
'TEMPLATE_ID'],
379 $documentService = \CBPRuntime::getRuntime()->getDocumentService();
380 $documentType = $documentService->getDocumentType($task[
'PARAMETERS'][
'DOCUMENT_ID']);
381 if (isset($task[
'FIELDS']) && is_array($task[
'FIELDS']))
383 foreach ($task[
'FIELDS'] as $parameter)
385 $params[
'Field'] = $parameter[
'FieldId'] ?? $parameter[
'Id'];
386 $params[
'Value'] = $parameter[
'Default'] ??
null;
388 $params[
'RenderMode'] =
'public';
390 $renderer->addProperty($documentType, $parameter,
$params);
402 $task = TaskTable::getByPrimary($taskId)->fetch();
409 Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_ERROR_TASK_ALREADY_DONE'),
410 self::TASK_ALREADY_DONE_ERROR_CODE
418 Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_ERROR_CURRENT_USER_NOT_MEMBER'),
419 self::TASK_USER_NOT_MEMBER_ERROR_CODE,
427 Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_ERROR_TARGET_USER_NOT_MEMBER'),
428 self::TASK_USER_NOT_MEMBER_ERROR_CODE,
439 Loc::getMessage(
'BIZPROC_LIB_API_TASK_SERVICE_DO_TASK_ERROR_NO_TASK'),
440 self::TASK_NOT_FOUND_ERROR_CODE
447 $task[
'STATUS'] = (int)$task[
'STATUS'];
449 if (isset($task[
'MODIFIED']))
455 is_array($task[
'PARAMETERS'][
'DOCUMENT_ID'] ??
null)
456 ? $task[
'PARAMETERS'][
'DOCUMENT_ID']
459 $task[
'DOCUMENT_URL'] = $documentId ? \CBPDocument::getDocumentAdminPage($documentId) :
'';
461 $task[
'MODULE_ID'] = $documentId ? $documentId[0] :
'';
462 $task[
'ENTITY'] = $documentId ? $documentId[1] :
'';
463 $task[
'DOCUMENT_ID'] = $documentId ? $documentId[2] :
'';
464 $task[
'COMPLEX_DOCUMENT_ID'] = $documentId;
466 if (isset($task[
'WORKFLOW_TEMPLATE_NAME']))
468 $task[
'WORKFLOW_NAME'] = $task[
'WORKFLOW_TEMPLATE_NAME'];
470 if (isset($task[
'WORKFLOW_STARTED']))
475 $controls = \CBPDocument::getTaskControls($task,
$userId);
477 $task[
'BUTTONS'] = $controls[
'BUTTONS'] ??
null;
478 $task[
'FIELDS'] = $controls[
'FIELDS'] ??
null;
480 if (isset($task[
'DELEGATION_TYPE']))
482 $task[
'DELEGATION_TYPE'] = (int)$task[
'DELEGATION_TYPE'];
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static createFromRequest(DelegateTasksRequest $request)
static createFromRequest(GetUserTaskListRequest $request)
getUserTask(GetUserTaskRequest $request)
delegateTasks(DelegateTasksRequest $request)
__construct(private TaskAccessService $accessService)
doInlineTasks(DoInlineTasksRequest $request)
getUserTaskByWorkflowId(GetUserTaskByWorkflowIdRequest $request)
doTask(DoTaskRequest $request)
getTasks(GetUserTaskListRequest $request)
static isLastTaskForUserByActivity(string $activityName, int $userId, int $templateId, ?string $activity=null)
static GetList($arOrder=array("ID"=> "DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static getList($arOrder=array("ID"=> "DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static prepareTaskDescription($description)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
FormatDateFromDB($date, $format='FULL', $phpFormat=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']