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