• Модуль: 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,
			],
		],
	];
}