- Модуль: voximplant
- Путь к файлу: ~/bitrix/modules/voximplant/lib/integration/report/handler/base.php
- Класс: BitrixVoximplantIntegrationReportHandlerBase
- Вызов: Base::addToQueryFilterCase
protected function addToQueryFilterCase(Query $query, array $filterParameters): void
{
$allowedUserIds = $this->getAllowedUserIds();
if (!$filterParameters['PORTAL_USER_ID'] && $allowedUserIds)
{
$query->whereIn('PORTAL_USER_ID', $allowedUserIds);
}
foreach ($filterParameters as $filterKey => $filterValue)
{
if ($filterValue === '')
{
continue;
}
switch ($filterKey)
{
case 'PORTAL_USER_ID':
if ($allowedUserIds)
{
$availableUserIds = array_intersect($allowedUserIds, [$filterValue]);
$portalUserIds = $availableUserIds ?: [-1];
$query->whereIn('PORTAL_USER_ID', $portalUserIds);
}
else
{
$query->whereIn('PORTAL_USER_ID', $filterValue);
}
break;
case 'PORTAL_NUMBER':
$query->whereIn('PORTAL_NUMBER', $filterValue);
break;
case 'PHONE_NUMBER':
$query->whereIn('PHONE_NUMBER', $filterValue);
break;
case 'COMMENT':
$query->whereLike('COMMENT', $filterValue);
break;
case 'INCOMING':
if (is_array($filterValue))
{
$query->whereIn('INCOMING', $filterValue);
}
else
{
$query->where('INCOMING', '=', $filterValue);
}
break;
case 'STATUS':
if ($filterValue === self::CALL_STATUS_SUCCESS)
{
$query->where('CALL_FAILED_CODE', '=', '200');
}
elseif ($filterValue === self::CALL_STATUS_FAILURE)
{
$query->where('CALL_FAILED_CODE', '!=', '200');
}
break;
case 'CALL_DURATION_numsel':
$durationField = 'CALL_DURATION';
switch ($filterValue)
{
case NumberType::SINGLE:
case NumberType::RANGE:
$query->whereBetween(
$durationField,
$filterParameters[$durationField.'_from'],
$filterParameters[$durationField.'_to']
);
break;
case NumberType::MORE:
$query->where($durationField, '>', $filterParameters[$durationField.'_from']);
break;
case NumberType::LESS:
$query->where($durationField, '<', $filterParameters[$durationField.'_from']);
break;
}
break;
case 'HOUR':
$dateWithShift = $this->getDateExpressionWithTimeShiftForQuery();
$query->registerRuntimeField(new ExpressionField(
'HOUR',
"hour($dateWithShift)",
['CALL_START_DATE']
));
$query->where('HOUR', '=', $filterValue);
break;
case 'DAY_OF_WEEK':
$dateWithShift = $this->getDateExpressionWithTimeShiftForQuery();
$query->registerRuntimeField(new BitrixMainEntityExpressionField(
'DAY_OF_WEEK',
"dayofweek($dateWithShift) - 1",
['CALL_START_DATE']
));
$query->where('DAY_OF_WEEK', '=', $filterValue);
break;
}
}
}