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