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