• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/tracker.php
  • Класс: BitrixImOpenLinesTracker
  • Вызов: Tracker::getExpectationTrackId
public function getExpectationTrackId(array $params): string
{
	if (!Loader::includeModule('crm'))
	{
		return '';
	}

	$filter = [
		'=ACTION' => Tracker::ACTION_EXPECT,
		'>DATE_CREATE' => (new DateTime())->add('-'.self::EXPECTATION_LIVE_TIME),
	];

	$add = [];
	foreach ($params as $entity)
	{
		switch ($entity['ENTITY_TYPE_ID'])
		{
			case CCrmOwnerType::Deal:
				$add['CRM_DEAL_ID'] = $entity['ENTITY_ID'];
				$filter['=CRM_DEAL_ID'] = $entity['ENTITY_ID'];
				if (empty($add['CRM_ENTITY_ID']))
				{
					$add['CRM_ENTITY_TYPE'] = CCrmOwnerType::DealName;
					$add['CRM_ENTITY_ID'] = $entity['ENTITY_ID'];
				}
				break;
			case CCrmOwnerType::Lead:
				$add['CRM_LEAD_ID'] = $entity['ENTITY_ID'];
				$filter['=CRM_LEAD_ID'] = $entity['ENTITY_ID'];
				if (empty($add['CRM_ENTITY_ID']))
				{
					$add['CRM_ENTITY_TYPE'] = CCrmOwnerType::LeadName;
					$add['CRM_ENTITY_ID'] = $entity['ENTITY_ID'];
				}
				break;
			case CCrmOwnerType::Contact:
				$add['CRM_CONTACT_ID'] = $entity['ENTITY_ID'];
				$filter['=CRM_CONTACT_ID'] = $entity['ENTITY_ID'];
				break;
			case CCrmOwnerType::Company:
				$add['CRM_COMPANY_ID'] = $entity['ENTITY_ID'];
				$filter['=CRM_COMPANY_ID'] = $entity['ENTITY_ID'];
				break;
			default:
				$add['CRM_ENTITY_TYPE'] = CCrmOwnerType::ResolveID($entity['ENTITY_TYPE_ID']);
				$add['CRM_ENTITY_ID'] = $entity['ENTITY_ID'];
				$filter['=CRM_ENTITY_TYPE'] = $add['CRM_ENTITY_TYPE'];
				$filter['=CRM_ENTITY_ID'] = $entity['ENTITY_ID'];
		}
	}

	$findResult = TrackerTable::getList([
		'select' => ['TRACK_ID'],
		'filter' => $filter,
		'order' => ['ID' => 'DESC'],
		'limit' => 1,
	]);
	if (
		($row = $findResult->fetch())
		&& !empty($row['TRACK_ID'])
	)
	{
		return $row['TRACK_ID'];
	}

	$trackId = self::PREFIX . Random::getString(10);

	$add['ACTION'] = Tracker::ACTION_EXPECT;
	$add['TRACK_ID'] = $trackId;

	$addResult = TrackerTable::add($add);
	if (!$addResult->isSuccess())
	{
		return '';
	}

	return $trackId;
}