- Модуль: 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);
}