• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/lib/Task/Service/TaskService.php
  • Класс: BitrixBizprocTaskServiceTaskService
  • Вызов: TaskService::delegateTasks
public function delegateTasks(DelegateTasksOptions $options): DelegateTasksResult
{
	$delegateResult = new DelegateTasksResult();

	$tasksToDelegate = null;
	try
	{
		$tasksToDelegate = TasksToBeDelegated::createFromOptions($options);
	}
	catch (ArgumentOutOfRangeException $e)
	{
		$errorMessage =
			in_array($e->getParameter(), ['fromUserId', 'toUserId'], true)
				? Loc::getMessage('BIZPROC_LIB_TASK_TASK_SERVICE_DELEGATE_TASK_ERROR_INCORRECT_USER_ID')
				: $e->getMessage()
		;
		$delegateResult->addError(new Error($errorMessage));
	}
	catch (ArgumentException $e)
	{
		$delegateResult->addError(
			new Error(Loc::getMessage('BIZPROC_LIB_TASK_TASK_SERVICE_DELEGATE_TASK_ERROR_NO_TASKS'))
		);
	}
	if (!$tasksToDelegate || !$delegateResult->isSuccess())
	{
		return $delegateResult;
	}

	$checkAccessResult = $this->accessService->checkDelegateTask(
		$tasksToDelegate->getToUserId(),
		$tasksToDelegate->getFromUserId()
	);
	if (!$checkAccessResult->isSuccess())
	{
		return $delegateResult->addErrors($checkAccessResult->getErrors());
	}

	$allowedDelegationType = $checkAccessResult->getAllowedDelegationTypes();

	$errors = [];
	$isDelegated = CBPDocument::delegateTasks(
		$tasksToDelegate->getFromUserId(),
		$tasksToDelegate->getToUserId(),
		$tasksToDelegate->getTaskIds(),
		$errors,
		$allowedDelegationType
	);

	if (!$isDelegated && !$errors)
	{
		$errors = [Loc::getMessage('BIZPROC_LIB_TASK_TASK_SERVICE_DELEGATE_TASK_ERROR_NO_TASKS')];
	}
	foreach ($errors as $errorMessage)
	{
		$delegateResult->addError(new Error($errorMessage));
	}

	if ($delegateResult->isSuccess())
	{
		$delegateResult->setData([
			'successMessage' => Loc::getMessage(
				'BIZPROC_LIB_TASK_TASK_SERVICE_DELEGATE_TASK_SUCCESS_MESSAGE',
				['#USER_NAME#' => CBPHelper::convertUserToPrintableForm($tasksToDelegate->getToUserId(), '', false)]
			),
		]);
	}

	return $delegateResult;
}