• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/integration/report/handler/calldynamics/calldynamicsgraph.php
  • Класс: BitrixVoximplantIntegrationReportHandlerCallDynamicsCallDynamicsGraph
  • Вызов: CallDynamicsGraph::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 = StatisticTable::query();

	$this->addDateWithGrouping($subQuery, true);
	$subQuery->addSelect('PREVIOUS_DATE');
	if ($filterParameters['PORTAL_USER_ID'])
	{
		$subQuery->addSelect('PORTAL_USER_ID');
	}

	$this->addToQueryFilterCase($subQuery, $filterParameters);
	$this->addCallTypeField($subQuery, CallType::INCOMING, 'CALL_INCOMING');
	$this->addCallTypeField($subQuery, CallType::OUTGOING, 'CALL_OUTGOING');
	$this->addCallTypeField($subQuery, CallType::MISSED, 'CALL_MISSED');
	$this->addCallTypeField($subQuery, CallType::CALLBACK, 'CALL_CALLBACK');
	$subQuery->whereBetween('CALL_START_DATE', $previousStartDate, $previousFinishDate);

	$this->addIntervalByDatasel($subQuery, $filterParameters['TIME_PERIOD_datesel'], $dateDifference);

	$query = StatisticTable::query();

	$this->addDateWithGrouping($query, true);
	if ($filterParameters['PORTAL_USER_ID'])
	{
		$query->addSelect('PORTAL_USER_ID');
	}

	$this->addToQueryFilterCase($query, $filterParameters);
	$this->addCallTypeField($query, CallType::INCOMING, 'CALL_INCOMING', true);
	$this->addCallTypeField($query, CallType::OUTGOING, 'CALL_OUTGOING', true);
	$this->addCallTypeField($query, CallType::MISSED, 'CALL_MISSED', true);
	$this->addCallTypeField($query, CallType::CALLBACK, 'CALL_CALLBACK', true);
	$query->whereBetween('CALL_START_DATE', $startDate, $finishDate);

	$query->registerRuntimeField(new ReferenceField(
		'previous',
		BitrixMainEntityBase::getInstanceByQuery($subQuery),
		Join::on('this.DATE', 'ref.PREVIOUS_DATE')
	));

	$this->addCallTypeCompareField($query, 'CALL_INCOMING');
	$this->addCallTypeCompareField($query, 'CALL_OUTGOING');
	$this->addCallTypeCompareField($query, 'CALL_MISSED');
	$this->addCallTypeCompareField($query, 'CALL_CALLBACK');

	return $query;
}