• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/integration/report/handler/lostcalls/lostcalls.php
  • Класс: BitrixVoximplantIntegrationReportHandlerLostCallsLostCalls
  • Вызов: LostCalls::prepareEntityListFilter
public function prepareEntityListFilter($requestParameters): Query
{
	$missedQuery = StatisticMissedTable::query();
	$fields = StatisticMissedTable::getEntity()->getScalarFields();

	foreach ($fields as $field)
	{
		$missedQuery->addSelect($field->getName());
	}

	$missedQuery->registerRuntimeField(new ExpressionField(
		'UNANSWERED',
		"if(DATE_SUB(%s, INTERVAL 24 HOUR) <= %s, 'N', 'Y')",
		['CALLBACK_CALL_START_DATE', 'CALL_START_DATE'])
	);
	$missedQuery->where('UNANSWERED', '=', 'Y');

	$sliderFilterParameters = $this->mergeRequestWithReportFilter($requestParameters->toArray());

	$this->addToQueryFilterCase($missedQuery, $sliderFilterParameters);

	$missedQuery->whereBetween(
		'CALL_START_DATE',
		DateTime::createFromUserTime($requestParameters->get('START_DATE_from')),
		DateTime::createFromUserTime($requestParameters->get('START_DATE_to'))
	);

	//The calling code expects that this method will return a query to StatisticTable
	// and can add filters to its fields.
	// @see CVoximplantStatisticDetailComponent createReportSliderQuery
	$query = StatisticTable::query();
	$query->setSelect(['ID']);
	$query->registerRuntimeField(new Reference(
		'STATISTIC_MISSED',
		BitrixMainEntityBase::getInstanceByQuery($missedQuery),
		Join::on('this.ID', 'ref.ID'),
		['join_type' => Join::TYPE_INNER]
	));

	return $query;
}