- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/managers/rating.php
- Класс: Bitrix\Crm\Integration\Report\Handler\Managers\Rating
- Вызов: Rating::prepare
public function prepare()
{
$filterParameters = $this->getFilterParameters();;
$categoryId = $filterParameters['CATEGORY_ID']['value'] ?: 0;
$userPermission = \CCrmPerms::GetCurrentUserPermissions();
if (!\CCrmDeal::CheckReadPermission(0, $userPermission, $categoryId))
{
return false;
}
$result = [];
$mainQuery = $this->prepareQuery();
$mainQuery->where("STAGE_SEMANTIC_ID", PhaseSemantics::SUCCESS);
$mainQuery->setLimit(static::LIMIT);
$mainQuery->setOrder(["DEAL_AMOUNT" => "DESC"]);
foreach ($mainQuery->exec()->getIterator() as $row)
{
$result[$row['USER_ID']] = [
'USER_ID' => $row['USER_ID'],
'COUNT_WON' => $row['DEAL_COUNT'],
'AMOUNT_WON' => $row['DEAL_AMOUNT'],
];
}
if (count($result) > 0)
{
$totalQuery = $this->prepareQuery();
$totalQuery->whereIn('ASSIGNED_BY_ID', array_keys($result));
foreach ($totalQuery->exec()->getIterator() as $row)
{
$result[$row['USER_ID']]['COUNT_TOTAL'] = $row['DEAL_COUNT'];
$result[$row['USER_ID']]['AMOUNT_TOTAL'] = $row['DEAL_AMOUNT'];
}
$prevPeriodQuery = $this->prepareQuery(self::PERIOD_SEMANTIC_PREVIOUS);
$prevPeriodQuery->whereIn('ASSIGNED_BY_ID', array_keys($result));
$prevPeriodQuery->where("STAGE_SEMANTIC_ID", PhaseSemantics::SUCCESS);
foreach ($prevPeriodQuery->exec()->getIterator() as $row)
{
$result[$row['USER_ID']]['AMOUNT_WON_PREV'] = $row['DEAL_AMOUNT'];
$result[$row['USER_ID']]['COUNT_WON_PREV'] = $row['DEAL_COUNT'];
}
$prevPeriodTotalQuery = $this->prepareQuery(self::PERIOD_SEMANTIC_PREVIOUS);
$prevPeriodTotalQuery->whereIn('ASSIGNED_BY_ID', array_keys($result));
foreach ($prevPeriodTotalQuery->exec()->getIterator() as $row)
{
$result[$row['USER_ID']]['AMOUNT_TOTAL_PREV'] = $row['DEAL_AMOUNT'];
$result[$row['USER_ID']]['COUNT_TOTAL_PREV'] = $row['DEAL_COUNT'];
}
}
return $result;
}