- Модуль: voximplant
- Путь к файлу: ~/bitrix/modules/voximplant/lib/integration/report/handler/lostcalls/lostcalls.php
- Класс: BitrixVoximplantIntegrationReportHandlerLostCallsLostCalls
- Вызов: LostCalls::getQueryForReport
public function getQueryForReport(): Query
{
$filterParameters = $this->getFilterParameters();
$startDate = DateTime::createFromUserTime($filterParameters['TIME_PERIOD_from']);
$finishDate = DateTime::createFromUserTime($filterParameters['TIME_PERIOD_to']);
$previousPeriod = $this->getPreviousPeriod($startDate, $finishDate);
$previousStartDate = $previousPeriod['from'];
$previousFinishDate = $previousPeriod['to'];
$dateDifference = $this->getDateInterval($filterParameters['TIME_PERIOD_datesel'], $previousPeriod['diff']);
$subQuery = StatisticMissedTable::query();
$this->addDateWithGrouping($subQuery, true);
$subQuery->addSelect('PREVIOUS_DATE');
$subQuery->addSelect('LOST_CALLS_COUNT');
$this->addToQueryFilterCase($subQuery, $filterParameters);
$subQuery->whereBetween('CALL_START_DATE', $previousStartDate, $previousFinishDate);
$this->addIntervalByDatasel($subQuery, $filterParameters['TIME_PERIOD_datesel'], $dateDifference);
$subQuery->registerRuntimeField(new ExpressionField(
'LOST_CALLS_COUNT',
'(sum(if(DATE_SUB(%s, INTERVAL 24 HOUR) <= %s, 0, 1)))',
['CALLBACK_CALL_START_DATE', 'CALL_START_DATE']
));
$query = StatisticMissedTable::query();
$this->addDateWithGrouping($query, true);
$query->addSelect('LOST_CALLS_COUNT');
$query->addSelect('LOST_CALLS_COUNT_COMPARE');
$this->addToQueryFilterCase($query, $filterParameters);
$query->whereBetween('CALL_START_DATE', $startDate, $finishDate);
$query->registerRuntimeField(new ExpressionField(
'LOST_CALLS_COUNT',
'(sum(if(DATE_SUB(%s, INTERVAL 24 HOUR) <= %s, 0, 1)))',
['CALLBACK_CALL_START_DATE', 'CALL_START_DATE']
));
$query->registerRuntimeField(new ReferenceField(
'previous',
BitrixMainEntityBase::getInstanceByQuery($subQuery),
Join::on('this.DATE', 'ref.PREVIOUS_DATE')
));
$query->registerRuntimeField(new ExpressionField(
'LOST_CALLS_COUNT_COMPARE',
'if(%s = 0, null, %s - %s)',
['LOST_CALLS_COUNT', 'LOST_CALLS_COUNT', 'previous.LOST_CALLS_COUNT']
));
return $query;
}