- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/company/dealsumstatistics.php
- Класс: Bitrix\Crm\Widget\Data\Company\DealSumStatistics
- Вызов: DealSumStatistics::prepareEntityListFilter
public function prepareEntityListFilter(array $filterParams)
{
$filter = self::internalizeFilter($filterParams);
$query = new Query(DealSumStatisticsTable::getEntity());
$query->addSelect('OWNER_ID');
$query->addGroup('OWNER_ID');
$field = isset($filterParams['FIELD']) ? $filterParams['FIELD'] : '';
$semanticID = PhaseSemantics::UNDEFINED;
switch ($field)
{
case 'SUCCESS_SUM':
$semanticID = PhaseSemantics::SUCCESS;
break;
case 'PROCESS_SUM':
$semanticID = PhaseSemantics::PROCESS;
break;
case 'FAILURE_SUM':
$semanticID = PhaseSemantics::FAILURE;
break;
}
$isFinalSemantics = PhaseSemantics::isFinal($semanticID);
$period = $filter->getPeriod();
$periodStartDate = $period['START'];
$periodEndDate = $period['END'];
if($isFinalSemantics)
{
$query->addFilter('>=END_DATE', $periodStartDate);
$query->addFilter('<=END_DATE', $periodEndDate);
}
else
{
$query->addFilter('>=END_DATE', $periodStartDate);
$query->addFilter('<=START_DATE', $periodEndDate);
}
$responsibleIDs = $filter->getResponsibleIDs();
if(!empty($responsibleIDs))
{
$query->addFilter('@RESPONSIBLE_ID', $responsibleIDs);
}
if($semanticID !== PhaseSemantics::UNDEFINED)
{
$query->addFilter('=STAGE_SEMANTIC_ID', $semanticID);
}
if (isset($filterParams['ENTITY_ID']))
{
$query->registerRuntimeField('',
new ReferenceField('CD',
DealTable::getEntity(),
array('=this.OWNER_ID' => 'ref.ID'),
array('join_type' => 'INNER')
)
);
$query->addFilter('=CD.COMPANY_ID', (int)$filterParams['ENTITY_ID']);
}
return array(
'__JOINS' => array(
array(
'TYPE' => 'INNER',
'SQL' => 'INNER JOIN('.$query->getQuery().') DS ON DS.OWNER_ID = L.ID'
)
)
);
}