• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_incoming.php
  • Класс: CVoxImplantIncoming
  • Вызов: CVoxImplantIncoming::getByInternalPhoneNumber
static function getByInternalPhoneNumber(string $phoneNumber, $checkTimeman = false): ?array
{
	$query = BitrixVoximplantModelUserTable::query();
	$query
		->addSelect(new BitrixMainORMFieldsExpressionField('ENTITY_TYPE', '"user"'))
		->addSelect('ID', 'ENTITY_ID')
		->addSelect('IS_ONLINE')
		->addSelect('IS_BUSY')
		->addSelect('UF_VI_PHONE')
		->where('UF_PHONE_INNER', $phoneNumber)
		->where('ACTIVE', 'Y')
	;

	$query2 = VIModelQueueTable::query();
	$query2
		->addSelect(new BitrixMainORMFieldsExpressionField('ENTITY_TYPE', '"queue"'))
		->addSelect('ID', 'ENTITY_ID')
		->addSelect(new BitrixMainORMFieldsExpressionField('IS_ONLINE', '"Y"'))
		->addSelect(new BitrixMainORMFieldsExpressionField('IS_BUSY', '"N"'))
		->addSelect(new BitrixMainORMFieldsExpressionField('UF_VI_PHONE', '"N"'))
		->where('PHONE_NUMBER', $phoneNumber)
	;
	$query->unionAll($query2);

	$row = $query->fetch();
	if (!$row)
	{
		return null;
	}

	$result = [
		'ENTITY_TYPE' => $row['ENTITY_TYPE'],
		'ENTITY_ID' => (int)$row['ENTITY_ID']
	];

	if ($row['ENTITY_TYPE'] === 'user')
	{
		$skipByTimeman = false;
		if ($checkTimeman)
		{
			$skipByTimeman = !CVoxImplantUser::GetActiveStatusByTimeman($row['ENTITY_ID']);
		}

		$result['USER_DATA'] = [
			'USER_HAVE_PHONE' => $row['UF_VI_PHONE'] === 'Y' ? 'Y' : 'N',
			'USER_HAVE_MOBILE' => CVoxImplantUser::hasMobile($row['ENTITY_ID']) ? 'Y' : 'N',
			'ONLINE' => $row['IS_ONLINE'],
			'BUSY' => $row['IS_BUSY'],
			'AVAILABLE' => (!$skipByTimeman && ($row['IS_BUSY'] !== 'Y') && ($row['IS_ONLINE'] === 'Y' || $row['UF_VI_PHONE'] === 'Y' || $row['USER_HAVE_MOBILE'] === 'Y')) ? 'Y' : 'N',
		];
	}
	return $result;
}