• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/tracking/analytics/provider/action.php
  • Класс: Bitrix\Crm\Tracking\Analytics\Provider\Action
  • Вызов: Action::query
public function query()
{
	/*
	$defaultItem = [
		'CNT' => 0,
		'SUM' => 0,
		'VIEWS' => 0,
		'ASSIGNED_BY_ID' => null,
		'TRACKING_SOURCE_ID' => null,
	];
	*/

	$dateFrom = $this->dateFrom ? Date::createFromTimestamp($this->dateFrom->getTimestamp()) : null;
	$dateTo = $this->dateTo ? Date::createFromTimestamp($this->dateTo->getTimestamp()) : null;

	$list = array_merge(
		static::getAdExpenses($dateFrom, $dateTo),
		static::getSenderExpenses($dateFrom, $dateTo)
	);
	foreach (static::getUserExpenses($dateFrom, $dateTo) as $row)
	{
		$isFound = false;
		foreach ($list as $index => $item)
		{
			if ($item['TRACKING_SOURCE_ID'] != $row['TRACKING_SOURCE_ID'])
			{
				continue;
			}

			$item['CNT'] += $row['CNT'];
			$item['SUM'] += $row['SUM'];
			$list[$index] = $item;
			$isFound = true;
		}

		if (!$isFound)
		{
			$list[] = $row;
		}
	}

	if (!empty($this->sourceId))
	{
		$sourceIds = is_array($this->sourceId) ? $this->sourceId : [$this->sourceId];
		$listTmp = $list;
		$list = [];
		foreach ($listTmp as $item)
		{
			$sourceId = $item['TRACKING_SOURCE_ID'] ?? null;
			if (in_array($sourceId, $sourceIds))
			{
				$list[] = $item;
			}
		}
	}

	if (!$this->isGroupedByTrackingSource())
	{
		$summary = [
			'CNT' => 0,
			'SUM' => 0,
			'ASSIGNED_BY_ID' => null,
			'TRACKING_SOURCE_ID' => 'summary',
		];
		foreach ($list as $row)
		{
			$summary['CNT'] += (int) $row['CNT'];
			$summary['SUM'] += (int) $row['SUM'];
		}
		$list = [$summary];
	}

	return $list;
}