• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/tracking/ad/reportbuilder.php
  • Класс: Bitrix\Crm\Tracking\Ad\ReportBuilder
  • Вызов: ReportBuilder::getRows
public function getRows($level, $parentId = null)
{
	$result = [];
	$items = $this->getExpenses($level, $parentId);
	while($item = $items->fetch())
	{
		$childId = $item['CHILD_ID'];
		$row = [
			'id' => (int) $item['CHILD_ID'],
			'code' => $item['CODE'],
			'enabled' => (bool) $item['IS_ENABLED'],
			'title' => $item['TITLE'],
			'level' => (int) $item['LEVEL'],
			'nextLevel' => Tracking\Source\Level\Type::getNextId((int) $item['LEVEL']),
			'prevLevel' => Tracking\Source\Level\Type::getPrevId((int) $item['LEVEL']),
			'impressions' => (int) $item['IMPRESSIONS_SUM'],
			'actions' => (int) $item['ACTIONS_SUM'],
			'outcome' => (int) $item['EXPENSES_SUM'],
			'currencyId' => $item['CURRENCY_ID'],
			'leads' => 0,
			'deals' => 0,
			'successDeals' => 0,
			'cost' => 0,
			'income' => 0,
			'roi' => 0,
			'roiScale' => 0,
		];

		$row['ctr'] = $row['impressions'] ? round($row['actions'] * 100 / $row['impressions'], 2) : 0;
		$row['cpc'] = $row['actions'] ? round($row['outcome'] / $row['actions'], 2) : 0;

		$result[$childId] = $row;
	}
	if (!$result)
	{
		return [];
	}

	$dbgList = [];
	if (Crm\Settings\LeadSettings::isEnabled())
	{
		$items = $this->getTraces(
			$query = Crm\LeadTable::query(),
			\CCrmOwnerType::Lead,
			$level,
			$parentId
		);
		while ($item = $items->fetch())
		{
			$childId = $item['CHILD_ID'];
			if ($result[$childId])
			{
				$result[$childId]['leads'] = $item['CNT'];
			}
			$dbgList[] = $item;
		}
	}

	$dbgList = [];
	$items = $this->getTraces(
		$query = Crm\DealTable::query()->addSelect('IS_WON'),
		\CCrmOwnerType::Deal,
		$level,
		$parentId
	);

	while ($item = $items->fetch())
	{
		$childId = $item['CHILD_ID'];
		if ($result[$childId])
		{
			$row = $result[$childId];

			$row['deals'] += $item['CNT'];
			if ($item['IS_WON'])
			{
				$row['successDeals'] = $item['CNT'];
				$row['income'] = $item['INCOME'];
				$row['cost'] = $row['successDeals']
					? round($row['outcome'] / $row['successDeals'], 2)
					: 0;

				$row['roi'] = $row['outcome']
					? round(($row['income'] - $row['outcome']) * 100 / $row['outcome'], 0)
					: 0;

				if ($row['roi'] < 0)
				{
					$row['roiScale'] = -1;
				}
				if ($row['roi'] > 0)
				{
					$row['roiScale'] = 1;
				}
				if ($row['roi'] >= 100)
				{
					$row['roiScale'] = 2;
				}
				if ($row['roi'] == 0)
				{
					$row['roiScale'] = 0;
				}
			}

			$result[$childId] = $row;
		}
		$dbgList[] = $item;
	}

	return array_values($result);
}