- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/activity/statistics.php
- Класс: Bitrix\Crm\Widget\Data\Activity\Statistics
- Вызов: Statistics::getList
public function getList(array $params)
{
/** @var Filter $filter */
$filter = isset($params['filter']) ? $params['filter'] : null;
if(!($filter instanceof Filter))
{
throw new Main\ObjectNotFoundException("The 'filter' is not found in params.");
}
$enableGroupKey = isset($params['group']) &&
is_string($params['group']) &&
isset($params['enableGroupKey']) &&
$params['enableGroupKey'] === true? mb_strtoupper($params['group']) : false;
$group = array();
if (isset($params['group']) && (is_string($params['group']) || is_array($params['group'])))
{
if (is_string($params['group']))
{
$params['group'] = array($params['group']);
}
foreach ($params['group'] as $g)
{
$g = mb_strtoupper($g);
if ($g === self::GROUP_BY_USER || $g === self::GROUP_BY_DATE || $g === self::GROUP_BY_PROVIDER_ID)
{
$group[] = $g;
}
}
}
/** @var array $select */
$select = isset($params['select']) && is_array($params['select']) ? $params['select'] : array();
$name = '';
if(!empty($select))
{
$selectItem = $select[0];
if(isset($selectItem['name']))
{
$name = $selectItem['name'];
}
}
list($providerId, $providerTypeId) = $this->getActivityProviderInfo();
if($name === '')
{
$name = 'TOTAL_QTY';
}
$permissionSql = '';
if($this->enablePermissionCheck)
{
$permissionSql = $this->preparePermissionSql();
if($permissionSql === false)
{
//Access denied;
return array();
}
}
$period = $filter->getPeriod();
$periodStartDate = $period['START'];
$periodEndDate = $period['END'];
/*
//Caching is temporary disabled
$cacheID = serialize($params);
$data = $this->getCacheData($cacheID, $filter);
if ($data !== false)
{
return $data;
}
*/
$query = new Query(ActivityStatisticsTable::getEntity());
$nameAlias = $name;
$query->registerRuntimeField('', new ExpressionField($name, "COUNT(*)"));
$query->addSelect($nameAlias);
if ($periodStartDate !== null)
$query->addFilter('>=DEADLINE_DATE', $periodStartDate);
if ($periodEndDate !== null)
$query->addFilter('<=DEADLINE_DATE', $periodEndDate);
$query->addFilter('=COMPLETED', $filter->getExtraParam('COMPLETED', 'Y'));
if ($providerId)
$query->addFilter('=PROVIDER_ID', $providerId);
if ($providerTypeId)
$query->addFilter('=PROVIDER_TYPE_ID', $providerTypeId);
if($this->enablePermissionCheck && is_string($permissionSql) && $permissionSql !== '')
{
$query->addFilter('@OWNER_ID', new SqlExpression($permissionSql));
}
$responsibleIDs = $filter->getResponsibleIDs();
if(!empty($responsibleIDs))
{
$query->addFilter('@RESPONSIBLE_ID', $responsibleIDs);
}
$sort = isset($params['sort']) && is_array($params['sort']) && !empty($params['sort']) ? $params['sort'] : null;
if($sort)
{
foreach($sort as $sortItem)
{
if(isset($sortItem['name']))
{
$sortName = $sortItem['name'];
if($sortName === $name)
{
$sortName = $nameAlias;
}
$query->addOrder($sortName, isset($sortItem['order']) ? $sortItem['order'] : 'ASC');
}
}
}
if (in_array(self::GROUP_BY_USER, $group))
{
$query->addSelect('RESPONSIBLE_ID');
$query->addGroup('RESPONSIBLE_ID');
}
if (in_array(self::GROUP_BY_PROVIDER_ID, $group))
{
$query->addSelect('PROVIDER_ID');
$query->addGroup('PROVIDER_ID');
}
if (in_array(self::GROUP_BY_DATE, $group))
{
$query->addSelect('DEADLINE_DATE');
$query->addGroup('DEADLINE_DATE');
if(!$sort)
{
$query->addOrder('DEADLINE_DATE', 'ASC');
}
}
if (isset($params['limit']) && $params['limit'] > 0)
{
$query->setLimit($params['limit']);
}
$dbResult = $query->exec();
$result = array();
$useAlias = $nameAlias !== $name;
$providers = null;
$userIDs = array();
while($ary = $dbResult->fetch())
{
if($useAlias && isset($ary[$nameAlias]))
{
$ary[$name] = $ary[$nameAlias];
unset($ary[$nameAlias]);
}
if (in_array(self::GROUP_BY_DATE, $group))
{
$ary['DATE'] = $this->getLocalDate($ary['DEADLINE_DATE'], 'Y-m-d');
unset($ary['DEADLINE_DATE']);
if($ary['DATE'] === '9999-12-31')
{
continue;
}
}
if (in_array(self::GROUP_BY_PROVIDER_ID, $group))
{
if ($providers === null)
$providers = \CCrmActivity::GetProviders();
$ary['~PROVIDER_ID'] = $providerId = $ary['PROVIDER_ID'];
if (isset($providers[$providerId]))
$ary['PROVIDER_ID'] = $providers[$providerId]::getName();
}
if (in_array(self::GROUP_BY_USER, $group))
{
$ary['RESPONSIBLE_ID'] = (int)$ary['RESPONSIBLE_ID'];
}
if ($enableGroupKey === self::GROUP_BY_DATE)
{
$result[$ary['DATE']] = $ary;
}
else if ($enableGroupKey === self::GROUP_BY_PROVIDER_ID)
{
$result[$ary['~PROVIDER_ID']] = $ary;
}
else if ($enableGroupKey === self::GROUP_BY_USER)
{
if ($ary['RESPONSIBLE_ID'] > 0)
{
$result[$ary['RESPONSIBLE_ID']] = $ary;
}
}
else
{
$result[] = $ary;
}
}
if (in_array(self::GROUP_BY_USER, $group))
{
self::parseUserInfo($result, array('RESPONSIBLE_ID' => 'USER'));
}
//Caching is temporary disabled
//$this->setCacheData($result);
return $result;
}