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

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

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

		$missedReactionQuery->where('UNANSWERED', '=', 'Y');
	}

	$sliderFilterParameters = $this->mergeRequestWithReportFilter($requestFilter);

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

	$missedReactionQuery->whereBetween(
		'CALL_START_DATE',
		DateTime::createFromUserTime($sliderFilterParameters['TIME_PERIOD_from']),
		DateTime::createFromUserTime($sliderFilterParameters['TIME_PERIOD_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($missedReactionQuery),
		Join::on('this.ID', 'ref.ID'),
		['join_type' => Join::TYPE_INNER]
	));

	return $query;
}