- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/leadinwork.php
- Класс: Bitrix\Crm\Widget\Data\LeadInWork
- Вызов: LeadInWork::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.");
}
$permissionSql = '';
if($this->enablePermissionCheck)
{
$permissionSql = $this->preparePermissionSql();
if($permissionSql === false)
{
//Access denied;
return array();
}
}
/** @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'];
}
}
if($name === '')
{
$name = 'COUNT';
}
$group = isset($params['group'])? mb_strtoupper($params['group']) : '';
if($group !== '' && $group !== self::GROUP_BY_DATE && $group !== self::GROUP_BY_USER)
{
$group = '';
}
$period = $filter->getPeriod();
$periodStartDate = $period['START'];
$periodEndDate = $period['END'];
$responsibleIDs = $filter->getResponsibleIDs();
$queries = array(
self::prepareHistoryQuery($periodStartDate, $periodEndDate, $responsibleIDs, $group),
self::prepareActivityQuery($periodStartDate, $periodEndDate, $responsibleIDs, $group)
);
$userIDs = array();
$map = array();
foreach($queries as $query)
{
/** @var Query $query*/
if($this->enablePermissionCheck && is_string($permissionSql) && $permissionSql !== '')
{
$query->addFilter('@OWNER_ID', new SqlExpression($permissionSql));
}
$dbResult = $query->exec();
if($group === self::GROUP_BY_DATE)
{
while($ary = $dbResult->fetch())
{
/** @var Date $date */
$date = $ary['DATE'];
$key = $date->format('Y-m-d');
if($key === '9999-12-31')
{
//Skip empty dates
continue;
}
if(!isset($map[$key]))
{
$map[$key] = array();
}
$ownerID = $ary['OWNER_ID'];
if(!isset($map[$key][$ownerID]))
{
$map[$key][$ownerID] = true;
}
}
}
elseif($group === self::GROUP_BY_USER)
{
while($ary = $dbResult->fetch())
{
$userID = $ary['RESPONSIBLE_ID'] = (int)$ary['RESPONSIBLE_ID'];
if($userID <= 0)
{
//Skip empty users
continue;
}
if(!isset($userIDs[$userID]))
{
$userIDs[$userID] = true;
}
if(!isset($map[$userID]))
{
$map[$userID] = array();
}
$ownerID = $ary['OWNER_ID'];
if(!isset($map[$userID][$ownerID]))
{
$map[$userID][$ownerID] = true;
}
}
}
else
{
while($ary = $dbResult->fetch())
{
$ownerID = $ary['OWNER_ID'];
if(!isset($map[$ownerID]))
{
$map[$ownerID] = true;
}
}
}
}
$results = array();
if($group === self::GROUP_BY_DATE)
{
foreach($map as $k => $v)
{
$results[] = array('DATE' => $k, $name => count($v));
}
}
elseif($group === self::GROUP_BY_USER)
{
$userNames = self::prepareUserNames(array_keys($userIDs));
foreach($map as $k => $v)
{
$results[] = array(
'USER_ID' => $k,
'USER' => isset($userNames[$k]) ? $userNames[$k] : "[{$k}]",
$name => count($v)
);
}
}
else
{
$results[] = array($name => count($map));
}
if(isset($params['sort']) && is_array($params['sort']))
{
foreach($params['sort'] as $sortItem)
{
if(isset($sortItem['name']) && $sortItem['name'] === $name)
{
$order = isset($sortItem['order']) && mb_strtolower($sortItem['order']) === 'desc'
? SORT_DESC : SORT_ASC;
Collection::sortByColumn($results, array($name => $order));
break;
}
}
}
return $results;
}