• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/integration/report/view/callduration/calldurationgraph.php
  • Класс: BitrixVoximplantIntegrationReportViewCallDurationCallDurationGraph
  • Вызов: CallDurationGraph::handlerFinallyBeforePassToView
public function handlerFinallyBeforePassToView($reportData)
{
	$result = $this->getConfig();

	$pointCount = count($reportData);
	if ($pointCount === 0)
	{
		return $result;
	}

	$maxIncomingDuration = $maxOutgoingDuration = 0;
	foreach ($reportData as $point)
	{
		if ($point['value']['INCOMING_DURATION'] > $maxIncomingDuration)
		{
			$maxIncomingDuration = $point['value']['INCOMING_DURATION'];
		}

		if ($point['value']['OUTGOING_DURATION'] > $maxOutgoingDuration)
		{
			$maxOutgoingDuration = $point['value']['OUTGOING_DURATION'];
		}
	}

	$maxDurationInHours = ($maxIncomingDuration > $maxOutgoingDuration ?
		floor($maxIncomingDuration / 3600) :
		floor($maxOutgoingDuration / 3600));

	foreach ($reportData as $point)
	{
		$column['groupingField'] = $point['value']['USER_NAME'];

		if ($point['value']['INCOMING_DURATION'] == null && $point['value']['OUTGOING_DURATION'] == null)
		{
			continue;
		}

		if ($maxDurationInHours >= 1)
		{
			if ($point['value']['INCOMING_DURATION'] > 0)
			{
				$incomingDurationInHours = round($point['value']['INCOMING_DURATION'] / 3600, 1);
				$column['value_1'] = ($incomingDurationInHours < 0.1 ? 0.1 : $incomingDurationInHours);
				$column['targetUrl_1'] = $point['url']['INCOMING_DURATION'];
				$column['balloon']['count']['value_1'] = $point['value']['INCOMING_DURATION_FORMATTED'];
				$column['balloon']['compare']['value_1'] = $point['value']['INCOMING_DYNAMICS'];
			}
			else
			{
				$column['value_1'] = 0.1;
				$column['balloon']['count']['value_1'] = 0;
				$column['balloon']['compare']['value_1'] = $point['value']['INCOMING_DYNAMICS'];
			}

			if ($point['value']['OUTGOING_DURATION'] > 0)
			{
				$outgoingDurationInHours = round($point['value']['OUTGOING_DURATION'] / 3600, 1);
				$column['value_2'] = ($outgoingDurationInHours < 0.1 ? 0.1 : $outgoingDurationInHours);
				$column['targetUrl_2'] = $point['url']['OUTGOING_DURATION'];
				$column['balloon']['count']['value_2'] = $point['value']['OUTGOING_DURATION_FORMATTED'];
				$column['balloon']['compare']['value_2'] = $point['value']['OUTGOING_DYNAMICS'];
			}
			else
			{
				$column['value_2'] = 0.1;
				$column['balloon']['count']['value_2'] = 0;
				$column['balloon']['compare']['value_2'] = $point['value']['OUTGOING_DYNAMICS'];
			}
		}
		else
		{
			$column['value_1'] = $point['value']['INCOMING_DURATION'] / 3600;
			$column['targetUrl_1'] = $point['url']['INCOMING_DURATION'];
			$column['balloon']['count']['value_1'] = $point['value']['INCOMING_DURATION_FORMATTED'];
			$column['balloon']['compare']['value_1'] = $point['value']['INCOMING_DYNAMICS'];

			$column['value_2'] = $point['value']['OUTGOING_DURATION'] / 3600;
			$column['targetUrl_2'] = $point['url']['OUTGOING_DURATION'];
			$column['balloon']['count']['value_2'] = $point['value']['OUTGOING_DURATION_FORMATTED'];
			$column['balloon']['compare']['value_2'] = $point['value']['OUTGOING_DYNAMICS'];
		}

		$result['data'][] = $column;
	}

	$result['series'] = [
		$this->getSeries('1', Loc::getMessage('TELEPHONY_REPORT_GRAPH_CALL_DURATION_INCOMING'), '#30d1cb'),
		$this->getSeries('2', Loc::getMessage('TELEPHONY_REPORT_GRAPH_CALL_DURATION_OUTGOING'), '#2fc6f5'),
	];

	if ($maxDurationInHours >= 1)
	{
		$result['yAxes'][0]['logarithmic'] = true;
		$result['yAxes'][0]['treatZeroAs'] = 0.1;
	}
	else
	{
		$result['yAxes'][0]['renderer'] = [
			'grid' => ['template' => ['disabled' => true]],
			'labels' => ['template' => ['disabled' => true]],
		];

		$result['yAxes'][0]['axisRanges'] = [
			[
				'value' => 0,
				'label' => ["text" => "{value}"]
			],
		];

		for ($yAxisValue = self::FIFTEEN_MINUTES; $yAxisValue < self::HOUR; $yAxisValue += self::FIFTEEN_MINUTES)
		{
			$result['yAxes'][0]['axisRanges'][] = [
				'value' => $yAxisValue / self::HOUR,
				'label' => [
					'text' => $yAxisValue / self::MINUTE .' '. Loc::getMessage('TELEPHONY_REPORT_GRAPH_CALL_DURATION_MIN')
				],
			];
		}

		$result['yAxes'][0]['axisRanges'][] = [
			'value' => self::HOUR,
			'label' => [
				'text' => 1 .' '. Loc::getMessage('TELEPHONY_REPORT_GRAPH_CALL_DURATION_HOUR')
			],
		];
	}

	return $result;
}