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