• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/rest/helper.php
  • Класс: BitrixVoximplantRestHelper
  • Вызов: Helper::searchCrmEntities
static function searchCrmEntities($phoneNumber)
{
	$result = new Result();

	if (!Loader::includeModule('crm'))
	{
		$result->addError(new Error('CRM is not installed.'));
		return $result;
	}

	$timeManInstalled = Loader::includeModule('timeman');

	$userId = SecurityHelper::getCurrentUserId();
	$searchResult = CCrmSipHelper::findByPhoneNumber($phoneNumber, ['USER_ID' => $userId]);
	$resultData = [];
	$userIds = [];
	$entities = [];

	$entityNames = [CCrmOwnerType::ContactName, CCrmOwnerType::LeadName, CCrmOwnerType::CompanyName];
	foreach ($entityNames as $entityName)
	{
		if (isset($searchResult[$entityName]))
		{
			foreach ($searchResult[$entityName] as $entityData)
			{
				$resultData[] = [
					'CRM_ENTITY_TYPE' => $entityName,
					'CRM_ENTITY_ID' => $entityData['ID'],
					'ASSIGNED_BY_ID' => $entityData['ASSIGNED_BY_ID']
				];
				$userIds[] = $entityData['ASSIGNED_BY_ID'];
				$entities[] = [
					'TYPE' => $entityName,
					'ID' => $entityData['ID']
				];
			}
		}
	}

	$crmEntityFields = CVoxImplantCrmHelper::resolveEntitiesFields($entities);

	foreach ($resultData as $k => $v)
	{
		if (isset($crmEntityFields[$v['CRM_ENTITY_TYPE'] . ':' . $v['CRM_ENTITY_ID']]))
		{
			$resultData[$k]['NAME'] = $crmEntityFields[$v['CRM_ENTITY_TYPE'] . ':' . $v['CRM_ENTITY_ID']]['NAME'];
		}
	}

	$userCursor = UserTable::getList([
		'select' => ['ID', 'UF_PHONE_INNER', 'WORK_PHONE', 'PERSONAL_PHONE' , 'PERSONAL_MOBILE'],
		'filter' => [
			'=ID' => $userIds
		]
	]);

	$userData = [];
	while ($row = $userCursor->fetch())
	{
		$userId = $row['ID'];
		$userData[$userId] = $row;

		if ($timeManInstalled)
		{
			$tmUser = new CTimeManUser($userId);
			$tmSettings = $tmUser->GetSettings(['UF_TIMEMAN']);
			if (!$tmSettings['UF_TIMEMAN'])
			{
				$userData[$userId]['TIMEMAN_STATUS'] = 'UNAVAILABLE';
			}
			else
			{
				$userData[$userId]['TIMEMAN_STATUS'] = $tmUser->State();
			}
		}
		else
		{
			$userData[$userId]['TIMEMAN_STATUS'] = 'NOT_INSTALLED';
		}
	}

	foreach ($resultData as $k => $v)
	{
		$row = $userData[$v['ASSIGNED_BY_ID']];
		$resultData[$k]['ASSIGNED_BY'] = [
			'ID' => $row['ID'],
			'TIMEMAN_STATUS' => $row['TIMEMAN_STATUS'],
			'USER_PHONE_INNER' => $row['UF_PHONE_INNER'],
			'WORK_PHONE' => $row['WORK_PHONE'],
			'PERSONAL_PHONE' => $row['PERSONAL_PHONE'],
			'PERSONAL_MOBILE' => $row['PERSONAL_MOBILE'],
		];
	}
	$result->setData($resultData);

	return $result;
}