- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/invoicestatushistory.php
- Класс: Bitrix\Crm\Widget\Data\InvoiceStatusHistory
- Вызов: InvoiceStatusHistory::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.");
}
$group = isset($params['group'])? mb_strtoupper($params['group']) : '';
if($group !== self::GROUP_BY_USER && $group !== self::GROUP_BY_STATUS)
{
$group = self::GROUP_BY_STATUS;
}
/** @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 = 'QTY';
}
$permissionSql = '';
if($this->enablePermissionCheck)
{
$permissionSql = $this->preparePermissionSql();
if($permissionSql === false)
{
//Access denied;
return array();
}
}
$period = $filter->getPeriod();
$periodStartDate = $period['START'];
$periodEndDate = $period['END'];
$semanticID = $filter->getExtraParam('semanticID', PhaseSemantics::UNDEFINED);
$query = new Query(InvoiceStatusHistoryTable::getEntity());
if($group === self::GROUP_BY_USER)
{
$query->addSelect('RESPONSIBLE_ID');
$query->addGroup('RESPONSIBLE_ID');
}
else
{
$query->addSelect('STATUS_ID');
$query->addGroup('STATUS_ID');
}
if($semanticID !== PhaseSemantics::UNDEFINED)
{
$query->addFilter('=STATUS_SEMANTIC_ID', $semanticID);
}
$query->addSelect($name);
$query->registerRuntimeField('', new ExpressionField($name, 'COUNT(DISTINCT OWNER_ID)'));
$query->addFilter('>=CREATED_DATE', $periodStartDate);
$query->addFilter('<=CREATED_DATE', $periodEndDate);
$typeID = $filter->getExtraParam('typeID', HistoryEntryType::UNDEFINED);
if($typeID !== HistoryEntryType::UNDEFINED)
{
$query->addFilter('=TYPE_ID', $typeID);
}
$isJunk = $filter->getExtraParam('isJunk', null);
if(is_bool($isJunk))
{
$query->addFilter('=IS_JUNK', $isJunk);
}
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);
}
$dbResult = $query->exec();
$result = array();
if($group === self::GROUP_BY_USER)
{
$rawResult = array();
$userIDs = array();
while($ary = $dbResult->fetch())
{
$userID = $ary['RESPONSIBLE_ID'] = (int)$ary['RESPONSIBLE_ID'];
if($userID > 0 && !isset($userIDs[$userID]))
{
$userIDs[$userID] = true;
}
$rawResult[] = $ary;
}
$userNames = self::prepareUserNames(array_keys($userIDs));
foreach($rawResult as $item)
{
$userID = $item['RESPONSIBLE_ID'];
$item['USER_ID'] = $userID;
$item['USER'] = isset($userNames[$userID]) ? $userNames[$userID] : "[{$userID}]";
unset($item['RESPONSIBLE_ID']);
$result[] = $item;
}
}
else
{
while($ary = $dbResult->fetch())
{
$result[] = $ary;
}
}
return $result;
}