- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/tracking/analytics/provider/action.php
- Класс: Bitrix\Crm\Tracking\Analytics\Provider\Action
- Вызов: Action::getUserExpenses
static function getUserExpenses(Date $dateFrom, Date $dateTo)
{
$list = [];
$listBySource = [];
$sources = Tracking\Provider::getActualSources();
$sourceIds = array_column($sources, 'ID');
$sources = array_combine($sourceIds, $sources);
$sourceIds = array_filter(
$sourceIds,
function ($item)
{
return !empty($item);
}
);
$sourcesWithMoney = [];
$rows = Tracking\Internals\SourceExpensesTable::getList([
'select' => ['CNT', 'SUM', 'CURRENCY_ID', 'SOURCE_ID'],
'filter' => [
'=SOURCE_ID' => $sourceIds,
'>=DATE_STAT' => $dateFrom,
'<=DATE_STAT' => $dateTo,
'=TYPE_ID' => Tracking\Internals\SourceExpensesTable::TYPE_MANUAL,
],
'runtime' => [
new Orm\Fields\ExpressionField('SUM', 'SUM(%s)', ['EXPENSES']),
new Orm\Fields\ExpressionField('CNT', 'SUM(%s)', ['ACTIONS'])
],
'group' => ['CURRENCY_ID', 'SOURCE_ID']
]);
foreach ($rows as $row)
{
$sourceId = $row['SOURCE_ID'];
if (!is_array($listBySource[$sourceId]))
{
$listBySource[$sourceId] = [];
}
$currencyId = $row['CURRENCY_ID'];
if ($currencyId === 'BYN' && \CCrmCurrency::getAccountCurrencyID() === 'BYR')
{
$currencyId = 'BYR';
}
$listBySource[$sourceId][] = [
'CNT' => $row['CNT'],
'SUM' => \CCrmCurrency::convertMoney(
$row['SUM'],
$currencyId,
\CCrmCurrency::getAccountCurrencyID()
)
];
if (!Tracking\Analytics\Ad::isSupported($sources[$sourceId]['CODE']))
{
$sourcesWithMoney[] = $sourceId;
}
}
$sourcesWithMoney = array_unique($sourcesWithMoney);
$traces = Tracking\Internals\TraceTable::getList([
'select' => ['SOURCE_ID', 'TRACE_CNT'],
'filter' => [
'>=DATE_CREATE' => $dateFrom,
'<=DATE_CREATE' => $dateTo,
'=SOURCE_ID' => $sourcesWithMoney,
],
'runtime' => [
new Orm\Fields\ExpressionField('TRACE_CNT', 'COUNT(%s)', ['ID'])
],
'group' => ['SOURCE_ID']
])->fetchAll();
$traces = array_combine(
array_column($traces, 'SOURCE_ID'),
array_column($traces, 'TRACE_CNT')
);
foreach ($listBySource as $sourceId => $rows)
{
$cnt = isset($traces[$sourceId]) ? (int) $traces[$sourceId] : 0;
$sum = 0;
foreach ($rows as $row)
{
$cnt += $row['CNT'];
$sum += $row['SUM'];
}
$list[] = [
'CNT' => $cnt,
'SUM' => $sum,
'VIEWS' => 0,
'ASSIGNED_BY_ID' => null,
'TRACKING_SOURCE_ID' => $sourceId,
];
}
return $list;
}