• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/customers/regularcustomersgrid.php
  • Класс: Bitrix\Crm\Integration\Report\Handler\Customers\RegularCustomersGrid
  • Вызов: RegularCustomersGrid::getMultipleData
public function getMultipleData()
{
	$filterParameters = $this->getFilterParameters();

	$calculatedData = $this->getCalculatedData();
	$baseCurrency = \CCrmCurrency::GetAccountCurrencyID();

	$result = [];
	$contacts = [];
	$companies = [];

	foreach ($calculatedData as $row)
	{
		if($row['OWNER_TYPE'] == \CCrmOwnerType::ContactName)
		{
			$contacts[] = $row['OWNER_ID'];
		}
		else
		{
			$companies[] = $row['OWNER_ID'];
		}
		$key = $row['OWNER_TYPE'] . "_" . $row['OWNER_ID'];
		$result[$key] = [
			'value' => [
				'ownerType' => $row['OWNER_TYPE'],
				'ownerId' => $row['OWNER_ID'],
				'totalDealCount' => $row['DEAL_COUNT'],
				'successDealCount' => 0,
				'successDealAmount' => 0,
			],
			'targetUrl' => [
				'totalDealCount' => $this->getTargetUrl('/crm/deal/analytics/list/', [
					'OWNER_TYPE' => $row['OWNER_TYPE'],
					'OWNER_ID' => $row['OWNER_ID'],
				]),
				'successDealCount' => $this->getTargetUrl('/crm/deal/analytics/list/', [
					'OWNER_TYPE' => $row['OWNER_TYPE'],
					'OWNER_ID' => $row['OWNER_ID'],
					'STAGE_SEMANTIC_ID' => PhaseSemantics::SUCCESS,
				]),
				'successDealAmount' => $this->getTargetUrl('/crm/deal/analytics/list/', [
					'OWNER_TYPE' => $row['OWNER_TYPE'],
					'OWNER_ID' => $row['OWNER_ID'],
					'STAGE_SEMANTIC_ID' => PhaseSemantics::SUCCESS,
				]),
			]
		];
	}

	if(count($contacts) > 0)
	{
		$query = DealTable::query();
		$this->addToQueryFilterCase($query, $filterParameters);
		$this->addTimePeriodToQuery($query, $filterParameters['TIME_PERIOD']);
		$this->addPermissionsCheck($query);

		$query
			->addSelect(new \Bitrix\Main\Entity\ExpressionField("OWNER_TYPE", "'CONTACT'"))
			->addSelect("CONTACT.ID", "OWNER_ID")
			->addSelect("CURRENCY_ID")
			->addSelect(Query::expr()->count("ID"), "DEAL_COUNT")
			->addSelect(Query::expr()->sum("OPPORTUNITY"), "TOTAL_AMOUNT")
			->whereNotNull("CONTACT.ID")
			->where(Query::filter()->logic('or')->where('COMPANY_ID', 0)->whereNull('COMPANY_ID'))
			->where("STAGE_SEMANTIC_ID", PhaseSemantics::SUCCESS)
			->whereIn("CONTACT.ID", $contacts);
		$cursor = $query->exec();

		while ($row = $cursor->fetch())
		{
			$key = $row['OWNER_TYPE'] . "_" . $row['OWNER_ID'];

			$result[$key]['value']['successDealCount'] += $row['DEAL_COUNT'];
			$result[$key]['value']['successDealAmount'] += \CCrmCurrency::ConvertMoney($row['TOTAL_AMOUNT'], $row['CURRENCY_ID'], $baseCurrency);
		}
	}

	if(count($companies) > 0)
	{
		$query = DealTable::query();
		$this->addToQueryFilterCase($query, $filterParameters);
		$this->addTimePeriodToQuery($query, $filterParameters['TIME_PERIOD']);
		$this->addPermissionsCheck($query);

		$query
			->addSelect(new \Bitrix\Main\Entity\ExpressionField("OWNER_TYPE", "'COMPANY'"))
			->addSelect("COMPANY.ID", "OWNER_ID")
			->addSelect("CURRENCY_ID")
			->addSelect(Query::expr()->count("ID"), "DEAL_COUNT")
			->addSelect(Query::expr()->sum("OPPORTUNITY"), "TOTAL_AMOUNT")
			->where("STAGE_SEMANTIC_ID", PhaseSemantics::SUCCESS)
			->whereIn("COMPANY.ID", $companies);
		$cursor = $query->exec();

		while ($row = $cursor->fetch())
		{
			$key = $row['OWNER_TYPE'] . "_" . $row['OWNER_ID'];

			$result[$key]['value']['successDealCount'] += $row['DEAL_COUNT'];
			$result[$key]['value']['successDealAmount'] += \CCrmCurrency::ConvertMoney($row['TOTAL_AMOUNT'], $row['CURRENCY_ID'], $baseCurrency);
		}
	}

	return $result;
}