• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/integration/report/handler/callduration/callduration.php
  • Класс: BitrixVoximplantIntegrationReportHandlerCallDurationCallDuration
  • Вызов: CallDuration::addCallDurationField
protected function addCallDurationField(Query $query, $callType, string $columnName, bool $isMainQuery = false): void
{
	switch ($callType)
	{
		case CallType::INCOMING:
			$expression = 'sum(if((%s = 2 and %s = 200), %s, null))';
			$buildFrom = ['INCOMING', 'CALL_FAILED_CODE', 'CALL_DURATION'];
			break;
		case CallType::OUTGOING:
			$expression = 'sum(if(%s = 1 and %s = 200, %s, null))';
			$buildFrom = ['INCOMING', 'CALL_FAILED_CODE', 'CALL_DURATION'];
			break;
		case CallType::MISSED:
			$expression = 'sum(if(%s = 2 and %s <> 200, %s, null))';
			$buildFrom = ['INCOMING', 'CALL_FAILED_CODE', 'CALL_DURATION'];
			break;
		case CallType::CALLBACK:
			$expression = 'sum(if(%s = 4, %s, null))';
			$buildFrom = ['INCOMING', 'CALL_DURATION'];
			break;
		default:
			$expression = 'sum(%s)';
			$buildFrom = ['CALL_DURATION'];
			break;
	}

	if ($isMainQuery)
	{
		$query->addSelect( 'previous.' . $columnName, 'PREVIOUS_' . $columnName);
	}

	$query->addSelect($columnName);
	$query->registerRuntimeField(new ExpressionField(
		$columnName,
		$expression,
		$buildFrom
	));
}