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