- Модуль: bizproc
- Путь к файлу: ~/bitrix/modules/bizproc/classes/general/document.php
- Класс: CBPDocument
- Вызов: CBPDocument::delegateTasks
static function delegateTasks($fromUserId, $toUserId, $ids = array(), &$errors = array(), $allowedDelegationType = null)
{
$filter = array(
'USER_ID' => $fromUserId,
'STATUS' => CBPTaskStatus::Running,
'USER_STATUS' => CBPTaskUserStatus::Waiting
);
if ($ids)
{
$ids = array_filter(array_map('intval', (array)$ids));
if ($ids)
$filter['ID'] = $ids;
}
$iterator = CBPTaskService::GetList(
array('ID'=>'ASC'),
$filter,
false,
false,
array('ID', 'NAME', 'WORKFLOW_ID', 'ACTIVITY_NAME', 'DELEGATION_TYPE')
);
$found = false;
$trackingService = null;
$sendImNotify = (CModule::IncludeModule("im"));
while ($task = $iterator->fetch())
{
if ($allowedDelegationType && !in_array((int)$task['DELEGATION_TYPE'], $allowedDelegationType, true))
{
$errors[] = GetMessage('BPCGDOC_ERROR_DELEGATE_'.$task['DELEGATION_TYPE'], array('#NAME#' => $task['NAME']));
}
elseif (!CBPTaskService::delegateTask($task['ID'], $fromUserId, $toUserId))
{
$errors[] = GetMessage('BPCGDOC_ERROR_DELEGATE', array('#NAME#' => $task['NAME']));
}
else
{
if (!$found)
{
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
/** @var CBPTrackingService $trackingService */
$trackingService = $runtime->GetService('TrackingService');
}
$found = true;
$trackingService->Write(
$task['WORKFLOW_ID'],
CBPTrackingType::Custom,
$task['ACTIVITY_NAME'],
CBPActivityExecutionStatus::Executing,
CBPActivityExecutionResult::None,
GetMessage('BPCGDOC_DELEGATE_LOG_TITLE'),
GetMessage('BPCGDOC_DELEGATE_LOG', array(
'#NAME#' => $task['NAME'],
'#FROM#' => '{=user:user_'.$fromUserId.'}',
'#TO#' => '{=user:user_'.$toUserId.'}'
))
);
if ($sendImNotify)
{
CIMNotify::Add(array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
'FROM_USER_ID' => $fromUserId,
'TO_USER_ID' => $toUserId,
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "bizproc",
"NOTIFY_EVENT" => "delegate_task",
"NOTIFY_TAG" => "BIZPROC|TASK|".$task['ID'],
'MESSAGE' => GetMessage('BPCGDOC_DELEGATE_NOTIFY_TEXT', array(
'#TASK_URL#' => '/company/personal/bizproc/'.(int)$task['ID'].'/',
'#TASK_NAME#' => $task['NAME']
))
));
}
}
}
return $found;
}