• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/order/responsiblegrid.php
  • Класс: Bitrix\Crm\Integration\Report\Handler\Order\ResponsibleGrid
  • Вызов: ResponsibleGrid::formatData
protected function formatData(array $data = []): array
{
	$resultResponsible = [];
	$commonCount = 0;
	foreach ($data as $item)
	{
		$id = (int)$item['RESPONSIBLE_ID'];
		if (!isset($resultResponsible[$id]))
		{
			$resultResponsible[$id] = [
				self::WHAT_WILL_CALCULATE_ORDER_SUM => 0,
				self::WHAT_WILL_CALCULATE_ORDER_COUNT => 0,
				self::WHAT_WILL_CALCULATE_ORDER_LOSES_SUM => 0,
				self::WHAT_WILL_CALCULATE_ORDER_LOSES_COUNT => 0,
				self::WHAT_WILL_CALCULATE_ORDER_WON_SUM => 0,
				self::WHAT_WILL_CALCULATE_ORDER_WON_COUNT => 0,
			];
		}

		$itemSum = $this->convertSumToReportCurrency($item['SUM'], $item['CURRENCY']);
		$itemCount = (float)$item['ORDER_COUNT'];
		$commonCount += $itemCount;

		$resultResponsible[$id][self::WHAT_WILL_CALCULATE_ORDER_SUM] += $itemSum;
		$resultResponsible[$id][self::WHAT_WILL_CALCULATE_ORDER_COUNT] += $itemCount;

		if (OrderStatus::getSemanticID($item['STATUS_ID']) === PhaseSemantics::SUCCESS)
		{
			$resultResponsible[$id][self::WHAT_WILL_CALCULATE_ORDER_WON_SUM] += $itemSum;
			$resultResponsible[$id][self::WHAT_WILL_CALCULATE_ORDER_WON_COUNT] += $itemCount;
		}
		elseif (OrderStatus::getSemanticID($item['STATUS_ID']) === PhaseSemantics::FAILURE)
		{
			$resultResponsible[$id][self::WHAT_WILL_CALCULATE_ORDER_LOSES_SUM] += $itemSum;
			$resultResponsible[$id][self::WHAT_WILL_CALCULATE_ORDER_LOSES_COUNT] += $itemCount;
		}
	}

	$items = [];
	$amountCount = 0;
	$amountSum = '';
	$calculateField = $this->getFormElement('calculate');
	$calculateValue = $calculateField ? $calculateField->getValue() : null;
	if (!empty($resultResponsible) && !empty($calculateValue))
	{
		foreach ($resultResponsible as $id => $responsible)
		{
			$resultItem = [
				'groupBy' => $id,
				'logo' => $responsible['icon'],
				'slider' => true,
				'targetUrl' => $this->getTargetUrl('/shop/orders/analytics/list/', [
					'RESPONSIBLE_ID' => $id
				]),
			];
			if ($calculateValue === self::WHAT_WILL_CALCULATE_ORDER_CONVERSION)
			{
				$orderCount = $responsible[self::WHAT_WILL_CALCULATE_ORDER_COUNT];
				$wonOrderCount = $responsible[self::WHAT_WILL_CALCULATE_ORDER_WON_COUNT];
				$value = $orderCount > 0 ? round(($wonOrderCount / $orderCount) * 100, 2) : 0;
				$resultItem['postfix'] = '%';
				$amountCount += $wonOrderCount;
			}
			else
			{
				$value = $responsible[$calculateValue];
				$amountCount += $value;
			}


			if ($this->isSumCalculation())
			{
				$value = \CCrmCurrency::MoneyToString($value, \CCrmCurrency::GetAccountCurrencyID());
			}

			$resultItem['value'] = $value;
			$responsibleInfo = $this->getUserInfo($id);
			$resultItem['label'] = $responsibleInfo['name'];
			$resultItem['profileUrl'] = $responsibleInfo['link'];
			$items[$id] = $resultItem;
		}
	}

	if ($this->isSumCalculation())
	{
		$amountSum = \CCrmCurrency::MoneyToString($amountCount, \CCrmCurrency::GetAccountCurrencyID());
	}

	return [
		'items' => $items,
		'amount' => [
			'count' => $amountCount,
			'sum' => $amountSum,
			'ratio' => ($commonCount > 0) ? ($amountCount/$commonCount) : 0
		],
	];
}