- Модуль: crmmobile
- Путь к файлу: ~/bitrix/modules/crmmobile/lib/Controller/Category.php
- Класс: BitrixCrmMobileControllerCategory
- Вызов: Category::prepareTunnelData
private function prepareTunnelData(Factory $factory, array $tunnel, array $stageColors = []): ?array
{
$srcStage = $factory->getStage($tunnel['srcStage']);
$dstStage = $factory->getStage($tunnel['dstStage']);
if ($srcStage === null || $dstStage === null)
{
return null;
}
$dstCategory = $factory->getCategory($tunnel['dstCategory']);
$srcCategory = $factory->getCategory($tunnel['srcCategory']);
if ($dstCategory === null || $srcCategory === null)
{
return null;
}
$userLabel = CBPHelper::UsersArrayToString(
$tunnel['robot']['Properties']['Responsible'] ?? [],
[],
CCrmBizProcHelper::ResolveDocumentType($factory->getEntityTypeId()),
false
);
$userId = (int)CBPHelper::StripUserPrefix($tunnel['robot']['Properties']['Responsible'][0] ?? null);
$conditionGroup = [];
if (!empty($tunnel['robot']['Condition']['items']) && is_array($tunnel['robot']['Condition']['items']))
{
foreach ($tunnel['robot']['Condition']['items'] as $condition)
{
$object = $condition[0]['object'] ?? null;
$field = $condition[0]['field'] ?? null;
if ($object === SourceType::GlobalVariable)
{
$field = $this->getTunnelGlobalVariables($factory->getEntityTypeId())[$field] ?? $field;
}
elseif ($object === SourceType::GlobalConstant)
{
$field = $this->getTunnelGlobalConstants($factory->getEntityTypeId())[$field] ?? $field;
}
elseif ($object === SourceType::DocumentField)
{
$this->usedDocumentFields[$field] = $field;
$field = $this->getTunnelDocumentFields($factory->getEntityTypeId())[$field]['name'] ?? $field;
}
$conditionGroup[] = [
'joiner' => $condition[1],
'properties' => [
'operator' => $condition[0]['operator'],
'value' => $condition[0]['value'],
'field' => $field,
'object' => $object,
],
];
}
}
$robotProperties = [];
if (!empty($tunnel['robot']['Properties']))
{
$properties = $tunnel['robot']['Properties'];
$robotProperties = [
'categoryId' => $properties['CategoryId'],
'stageId' => $properties['StageId'],
];
}
if (!empty($tunnel['robot']['Delay']))
{
$basisId = $this->extractDelayBasisId($tunnel['robot']['Delay']['basis']);
$robotDelayBasisName = $this->getTunnelDocumentFields($factory->getEntityTypeId())[$basisId] ?? null;
$tunnel['robot']['Delay']['basisName'] = $robotDelayBasisName['name'] ?? null;
}
return [
'dstStageId' => $dstStage->getId(),
'dstStageStatusId' => $dstStage->getStatusId(),
'dstStageName' => $dstStage->getName(),
'dstStageColor' => $stageColors[$dstStage->getStatusId()]['COLOR'] ?? $dstStage->getColor(),
'dstCategoryId' => $dstCategory->getId(),
'dstCategoryName' => $dstCategory->getName(),
'srcStageId' => $srcStage->getId(),
'srcStageStatusId' => $srcStage->getStatusId(),
'srcCategoryId' => $srcCategory->getId(),
'srcStageColor' => $stageColors[$srcStage->getStatusId()]['COLOR'] ?? $srcStage->getColor(),
'robot' => [
'name' => $tunnel['robot']['Name'] ?? '',
'properties' => $robotProperties,
'delay' => $tunnel['robot']['Delay'] ?? null,
'conditionGroup' => [
'type' => $tunnel['robot']['Condition']['type'] ?? null,
'items' => $conditionGroup,
],
'responsible' => [
'id' => $userId,
'label' => $userLabel,
],
],
];
}