• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/dealwork.php
  • Класс: Bitrix\Crm\Widget\Data\DealWork
  • Вызов: DealWork::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.");
	}

	/** @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']) ? strtoupper($params['group']) : '';
	if($group !== '' && $group !== self::GROUP_BY_DATE)
	{
		$group = '';
	}
	$enableGroupByDate = $group !== '';

	$period = $filter->getPeriod();
	$periodStartDate = $period['START'];
	$periodEndDate = $period['END'];

	$queries = array(
		self::prepareHistoryQuery($periodStartDate, $periodEndDate, $enableGroupByDate),
		self::prepareActivityQuery($periodStartDate, $periodEndDate, $enableGroupByDate),
		self::prepareInvoiceQuery($periodStartDate, $periodEndDate, $enableGroupByDate)
	);

	$map = array();
	foreach($queries as $query)
	{
		/** @var  Query $query*/
		$dbResult = $query->exec();
		if($enableGroupByDate)
		{
			while($ary = $dbResult->fetch())
			{
				/** @var Date $date */
				$date =  $ary['DATE'];
				$key = $date->format('Y-m-d');
				if(!isset($map[$key]))
				{
					$map[$key] = array();
				}

				$ownerID =  $ary['OWNER_ID'];
				if(!isset($map[$key][$ownerID]))
				{
					$map[$key][$ownerID] = true;
				}
			}
		}
		else
		{
			while($ary = $dbResult->fetch())
			{
				$ownerID =  $ary['OWNER_ID'];
				if(!isset($map[$ownerID]))
				{
					$map[$ownerID] = true;
				}
			}
		}
	}

	$results = array();
	if($enableGroupByDate)
	{
		foreach($map as $k => $v)
		{
			$results[] = array('DATE' => $k, $name => count($v));
		}
	}
	else
	{
		$results[] = array($name => count($map));
	}
	return $results;
}