- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/tracking/analytics/provider/base.php
- Класс: Bitrix\Crm\Tracking\Analytics\Provider\Base
- Вызов: Base::prepareQuery
private function prepareQuery(Orm\Query\Query $query, $entityTypeId, array $options = [])
{
$mainSelect = [];
$query->setSelect(array_merge(
[
'ACCOUNT_CURRENCY_ID', 'OPPORTUNITY_ACCOUNT'
],
$query->getSelect()
));
if ($this->isGroupedByAssigned())
{
$query->addSelect(self::Assigned);
$mainSelect[] = self::Assigned;
}
if ($this->isGroupedByTrackingSource())
{
$query->addSelect(
new Orm\Fields\ExpressionField(self::TrackingSourceId, 'IFNULL(%s, 0)', ['TRACE_ENTITY.TRACE.SOURCE_ID'])
);
$mainSelect[] = self::TrackingSourceId;
}
else
{
$query->addFilter('>TRACE_ENTITY.TRACE.SOURCE_ID', 0);
$query->registerRuntimeField(new Orm\Fields\ExpressionField(
self::TrackingSourceId, '\'summary\''
));
$query->addSelect(self::TrackingSourceId);
$mainSelect[] = self::TrackingSourceId;
}
$query->registerRuntimeField(new Orm\Fields\Relations\Reference(
'TRACE_ENTITY',
Tracking\Internals\TraceEntityTable::class,
[
'=ref.ENTITY_TYPE_ID' => new SqlExpression('?', $entityTypeId),
'=this.ID' => 'ref.ENTITY_ID'
]
));
foreach ($this->filter as $key => $value)
{
$newKey = str_replace(
[
self::TrackingSourceId,
'DATE_CREATE',
'ASSIGNED_BY_ID',
],
[
'TRACE_ENTITY.TRACE.SOURCE_ID',
$options['dateFieldName'] ?? 'DATE_CREATE',
$options['assignedByFieldName'] ?? 'ASSIGNED_BY_ID',
],
$key
);
unset($this->filter[$key]);
$this->filter[$newKey] = $value;
}
$query->setFilter($query->getFilter() + $this->filter);
$query->addGroup('ID');
$mainQuery = (new Orm\Query\Query($query));
$mainQuery->registerRuntimeField(new Orm\Fields\ExpressionField(
'CNT', 'COUNT(*)'
));
$mainQuery->registerRuntimeField(new Orm\Fields\ExpressionField(
'SUM', 'SUM(%s)', ['OPPORTUNITY_ACCOUNT']
));
$mainQuery->setSelect(array_merge(
$mainSelect,
[
'CNT',
'SUM',
'ACCOUNT_CURRENCY_ID'
]
));
return $mainQuery;
}