- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/widget/data/company/activitymarkstatistics.php
- Класс: Bitrix\Crm\Widget\Data\Company\ActivityMarkStatistics
- Вызов: ActivityMarkStatistics::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 !== ''
&& $group !== self::GROUP_BY_USER
&& $group !== self::GROUP_BY_DATE
&& $group !== self::GROUP_BY_MARK
&& $group !== self::GROUP_BY_SOURCE
)
{
$group = '';
}
$enableGroupKey = isset($params['enableGroupKey']) ? (bool)$params['enableGroupKey'] : false;
/** @var array $select */
$select = isset($params['select']) && is_array($params['select']) ? $params['select'] : array();
$name = '';
$aggregate = 'SUM';
if(!empty($select))
{
$selectItem = $select[0];
if(isset($selectItem['name']))
{
$name = $selectItem['name'];
}
}
list($providerId, $providerTypeId) = $this->getActivityProviderInfo();
if($name === '')
{
$name = 'TOTAL';
}
$permissionSql = '';
if($this->enablePermissionCheck)
{
$permissionSql = $this->preparePermissionSql();
if($permissionSql === false)
{
//Access denied;
return array();
}
}
$period = $filter->getPeriod();
$periodStartDate = $period['START'];
$periodEndDate = $period['END'];
$query = new Query(CompanyActivityMarkStatisticsTable::getEntity());
$nameAlias = $name;
if($group !== static::GROUP_BY_MARK)
{
$nameAlias = "{$nameAlias}_R";
$query->registerRuntimeField('', new ExpressionField($nameAlias, "{$aggregate}(%s)", $name));
$query->addSelect($nameAlias);
}
else
{
$query->registerRuntimeField('', new ExpressionField('MARK_0', "{$aggregate}(%s)", 'NONE_QTY'));
$query->registerRuntimeField('', new ExpressionField('MARK_1', "{$aggregate}(%s)", 'NEGATIVE_QTY'));
$query->registerRuntimeField('', new ExpressionField('MARK_2', "{$aggregate}(%s)", 'POSITIVE_QTY'));
}
$query->addFilter('>=DEADLINE_DATE', $periodStartDate);
$query->addFilter('<=DEADLINE_DATE', $periodEndDate);
if ($providerId)
$query->addFilter('=PROVIDER_ID', $providerId);
if ($providerTypeId)
$query->addFilter('=PROVIDER_TYPE_ID', $providerTypeId);
if (
$filter->getContextEntityTypeName() === \CCrmOwnerType::CompanyName
&& $filter->getContextEntityID() > 0
)
{
$query->addFilter('=OWNER_ID', $filter->getContextEntityID());
}
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);
}
if($group !== '')
{
if($group === self::GROUP_BY_USER)
{
$query->addSelect('RESPONSIBLE_ID');
$query->addGroup('RESPONSIBLE_ID');
}
elseif($group === self::GROUP_BY_MARK)
{
$query->addSelect('MARK_0');
$query->addSelect('MARK_1');
$query->addSelect('MARK_2');
}
elseif($group === self::GROUP_BY_SOURCE)
{
$query->addSelect('SOURCE_ID');
$query->addGroup('SOURCE_ID');
}
else //if($groupBy === self::GROUP_BY_DATE)
{
$query->addSelect('DEADLINE_DATE');
$query->addGroup('DEADLINE_DATE');
$query->addOrder('DEADLINE_DATE', 'ASC');
}
}
$dbResult = $query->exec();
$result = array();
$useAlias = $nameAlias !== $name;
if($group === self::GROUP_BY_DATE)
{
while($ary = $dbResult->fetch())
{
if($useAlias && isset($ary[$nameAlias]))
{
$ary[$name] = $ary[$nameAlias];
unset($ary[$nameAlias]);
}
$ary['DATE'] = $this->getLocalDate($ary['DEADLINE_DATE'], 'Y-m-d');
unset($ary['DEADLINE_DATE']);
if($ary['DATE'] === '9999-12-31')
{
//Skip empty dates
continue;
}
$result[] = $ary;
}
}
elseif($group === self::GROUP_BY_MARK)
{
$marks = StatisticsMark::getDescriptions();
while($ary = $dbResult->fetch())
{
foreach($marks as $mark => $markDescription)
{
$resultAry = array(
'MARK' => $markDescription,
$name => (int)$ary['MARK_'.$mark]
);
if($enableGroupKey)
{
$result[$mark] = $resultAry;
}
else
{
$result[] = $resultAry;
}
}
}
}
elseif($group === self::GROUP_BY_SOURCE)
{
$sourceList = array();
if ($providerId && $provider = \CCrmActivity::GetProviderById($providerId))
{
$sourceList = $provider::getResultSources();
}
while($ary = $dbResult->fetch())
{
if($useAlias && isset($ary[$nameAlias]))
{
$ary[$name] = $ary[$nameAlias];
unset($ary[$nameAlias]);
}
$sourceID = isset($ary['SOURCE_ID']) ? $ary['SOURCE_ID'] : '';
if($sourceID === '')
{
$ary['SOURCE'] = '-';
}
else
{
$ary['SOURCE'] = isset($sourceList[$sourceID]) ? $sourceList[$sourceID] : "[{$sourceID}]";
}
if($enableGroupKey)
{
$result[$sourceID] = $ary;
}
else
{
$result[] = $ary;
}
}
}
elseif($group === self::GROUP_BY_USER)
{
while($ary = $dbResult->fetch())
{
if($useAlias && isset($ary[$nameAlias]))
{
$ary[$name] = $ary[$nameAlias];
unset($ary[$nameAlias]);
}
$result[] = $ary;
}
self::parseUserInfo($result, ['RESPONSIBLE_ID' => 'USER']);
}
else
{
while($ary = $dbResult->fetch())
{
if($useAlias && isset($ary[$nameAlias]))
{
$ary[$name] = $ary[$nameAlias];
unset($ary[$nameAlias]);
}
$result[] = $ary;
}
}
return $result;
}