• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/routing/queue.php
  • Класс: BitrixVoximplantRoutingQueue
  • Вызов: Queue::getUsersToInvite
protected function getUsersToInvite(BitrixVoximplantQueue $queue, array $queueHistory)
{
	$query = QueueUserTable::query()
		->setSelect([
			'ID',
			'USER_ID',
			'IS_ONLINE' => 'USER.IS_ONLINE',
			'IS_BUSY' => 'USER.IS_BUSY',
			'UF_VI_PHONE' => 'USER.UF_VI_PHONE'
		])
		->where('QUEUE_ID', $this->queueId)
		->where('USER.ACTIVE', 'Y');

	if($queue->getType() == CVoxImplantConfig::QUEUE_TYPE_EVENLY)
	{
		$query->setOrder(['LAST_ACTIVITY_DATE' => 'asc']);
	}
	else
	{
		$query->setOrder(['ID' => 'asc']);
	}

	if (!empty($queueHistory))
	{
		$query->whereNotIn('USER_ID', $queueHistory);
	}

	$users = [];
	$busyUsers = [];
	$cursor = $query->exec();
	//echo $query->getQuery();
	while ($row = $cursor->fetch())
	{
		$hasMobile = CVoxImplantUser::hasMobile($row['USER_ID']);

		if ($row['IS_ONLINE'] != 'Y' && $row['UF_VI_PHONE'] != 'Y' && !$hasMobile)
		{
			continue;
		}
		if ($this->checkTimeman && !CVoxImplantUser::GetActiveStatusByTimeman($row['USER_ID']))
		{
			continue;
		}

		if ($row['IS_BUSY'] == "Y")
		{
			$busyUsers[] = $row['USER_ID'];
			continue;
		}

		$users[$row['USER_ID']] = [
			'USER_ID' => $row['USER_ID'],
			'USER_HAVE_PHONE' => $row['UF_VI_PHONE'] == 'Y'? 'Y': 'N',
			'USER_HAVE_MOBILE' => $hasMobile ? 'Y' : 'N'
		];

		if($queue->getType() != CVoxImplantConfig::QUEUE_TYPE_ALL)
		{
			break;
		}
	}

	return [
		$users,
		$busyUsers
	];
}