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