• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/queue/event/evenly.php
  • Класс: BitrixImOpenLinesQueueEventEvenly
  • Вызов: Evenly::returnUserToQueue
public function returnUserToQueue(array $userIds): void
{
	$sessionList = SessionCheckTable::getList(
		[
			'select' => ['SESSION_ID', 'UNDISTRIBUTED'],
			'filter' => [
				'=SESSION.CONFIG_ID' => $this->configLine['ID'],
				' Session::STATUS_ANSWER,
				'!=SESSION.OPERATOR_FROM_CRM' => 'Y'
			]
		]
	)->fetchAll();

	$undistributedSessions = array();
	foreach ($sessionList as $session)
	{
		if ($session['UNDISTRIBUTED'] == 'Y')
		{
			$undistributedSessions[] = $session;
		}
	}

	$undistributedSessionsCount = count($undistributedSessions);
	if ($undistributedSessionsCount > 0)
	{
		$operatorsFreeSlotsCount = 0;

		foreach ($userIds as $userId)
		{
			$operatorsFreeSlotsCount += ImOpenLinesQueue::getCountFreeSlotOperator(
				$userId,
				$this->configLine['ID'],
				$this->configLine['MAX_CHAT'],
				$this->configLine['TYPE_MAX_CHAT']
			);
		}

		if ($undistributedSessionsCount <= $operatorsFreeSlotsCount)
		{
			foreach ($undistributedSessions as $session)
			{
				ImOpenLinesQueue::returnSessionToQueue($session['SESSION_ID']);
			}
		}
		else
		{
			foreach ($sessionList as $session)
			{
				ImOpenLinesQueue::returnSessionToQueue($session['SESSION_ID']);
			}
		}
	}
	else
	{
		foreach ($sessionList as $session)
		{
			ImOpenLinesQueue::returnSessionToQueue($session['SESSION_ID']);
		}
	}

	ImOpenLinesQueue::transferToNextSession(false, ImOpenLinesQueueEvent::COUNT_SESSIONS_REALTIME, $this->configLine['ID']);
}