• Модуль: 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;
}