- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/lead.php
- Класс: Bitrix\Crm\Integration\Report\Handler\Lead
- Вызов: Lead::getMultipleData
public function getMultipleData()
{
$calculatedData = $this->getCalculatedData();
$items = [];
$config = [];
if (!empty($calculatedData))
{
$calculateField = $this->getFormElement('calculate');
$calculateValue = $calculateField ? $calculateField->getValue() : null;
$shortModeField = $this->getFormElement('shortMode');
$shortModeValue = $shortModeField ? $shortModeField->getValue() : false;
switch ($calculateValue)
{
case self::WHAT_WILL_CALCULATE_LEAD_CONVERSION:
case self::WHAT_WILL_CALCULATE_LEAD_LOSES:
$config['mode'] = 'singleData';
$config['unitOfMeasurement'] = '%';
$item['value'] = round($calculatedData['withoutGrouping'], 2);
$item['color'] = '#9DCF00';
$items[] = $item;
break;
default:
$itemCount = 0;
foreach ($calculatedData as $key => $data)
{
if ($key === 'amount')
{
continue;
}
$item = [
'label' => $data['title'],
'value' => $data['value'],
'color' => $data['color'],
];
if (
$calculateValue === self::WHAT_WILL_CALCULATE_LEAD_DATA_FOR_FUNNEL
|| $calculateValue === self::WHAT_WILL_CALCULATE_SUCCESS_LEAD_DATA_FOR_FUNNEL
)
{
if ($this->isConversionCalculateMode())
{
$item['link'] = $this->getTargetUrl('/crm/lead/analytics/list/', [
'STATUS_ID_FROM_SUPPOSED_HISTORY' => $key
]);
}
else
{
$item['link'] = $this->getTargetUrl('/crm/lead/analytics/list/', [
'STATUS_ID_FROM_HISTORY' => $key
]);
}
}
$config['additionalValues']['firstAdditionalValue']['titleShort'] = Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_COUNT_SHORT_TITLE');
$item['additionalValues']['firstAdditionalValue'] = [
'value' => $data['value']
];
if (isset($data['additionalValues']['sum']))
{
$amountLeadCurrencyId = $data['additionalValues']['sum']['currencyId'];
$config['additionalValues']['secondAdditionalValue']['titleShort'] = Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_SUM_SHORT_TITLE');
$item['additionalValues']['secondAdditionalValue'] = [
'value' => \CCrmCurrency::MoneyToString($data['additionalValues']['sum']['VALUE'], $data['additionalValues']['sum']['currencyId']),
'currencyId' => $data['additionalValues']['sum']['currencyId']
];
}
if (isset($data['additionalValues']['avgSpentTime']))
{
$config['additionalValues']['thirdAdditionalValue']['titleShort'] = Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_SPENT_TIME_SHORT_TITLE');
$item['additionalValues']['thirdAdditionalValue'] = [
'value' => $this->getFormattedPassTime($data['additionalValues']['avgSpentTime']['VALUE'])
];
}
$statusSemanticId = \CCrmLead::GetSemanticID($key);
$config['additionalValues']['forthAdditionalValue']['titleShort'] = Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_CONVERSION_SHORT_TITLE');
$item['additionalValues']['forthAdditionalValue'] = [
'title' => PhaseSemantics::isLost($statusSemanticId) ?
Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_LOSSES_SHORT_TITLE')
: Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_CONVERSION_SHORT_TITLE'),
'value' => $calculatedData['amount']['count'] ? round(($data['value'] / $calculatedData['amount']['count']) * 100, 2) : 0,
'unitOfMeasurement' => '%',
'helpLink' => 'someLink',
'helpInSlider' => true
];
//hidden conversion on first column
if ($calculateValue !== self::WHAT_WILL_CALCULATE_SUCCESS_LEAD_DATA_FOR_FUNNEL && $itemCount < 1)
{
unset($item['additionalValues']['forthAdditionalValue']);
}
$itemCount++;
$items[] = $item;
}
$config['titleShort'] = Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_COUNT_SHORT_TITLE');
$config['titleMedium'] = 'meduim';
$config['valuesAmount'] = [
'firstAdditionalAmount' => [
'title' => Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_SUM_SHORT_TITLE'),
'value' => \CCrmCurrency::MoneyToString($calculatedData['amount']['sum'], $amountLeadCurrencyId ?? ''),
'targetUrl' => $this->getTargetUrl('/crm/lead/analytics/list/'),
],
// 'secondAdditionalAmount' => [
// 'title' => Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_COUNT_SHORT_TITLE'),
// 'value' => $calculatedData['amount']['count']
// ],
// 'secondAdditionalAmount' => [
// 'title' => Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_PASS_AVG_TIME_SHORT_TITLE'),
// 'value' => $calculatedData['amount']['successPassTime'] . ' ' . Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_SPENT_TIME_DAYS')
// ],
// 'thirdAdditionalAmount' => [
// 'title' => Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_PASS_AVG_TIME_SHORT_TITLE'),
// 'value' => $calculatedData['amount']['successPassTime'] . Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_SPENT_TIME_DAYS')
// ]
];
if ($calculatedData['amount']['successPassTime'] ?? false)
{
$config['valuesAmount']['secondAdditionalAmount'] = [
'title' => Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_PASS_AVG_TIME_SHORT_TITLE'),
'value' => $this->getFormattedPassTime($calculatedData['amount']['successPassTime'])
];
}
switch ($calculateValue)
{
case self::WHAT_WILL_CALCULATE_SUCCESS_LEAD_DATA_FOR_FUNNEL:
$config['topAdditionalTitle'] = Loc::getMessage('CRM_REPORT_LEAD_HANDLER_LEAD_CONVERSION_SHORT_TITLE');
$config['topAdditionalValue'] = !empty($items[0]['additionalValues']['forthAdditionalValue']['value']) ? $items[0]['additionalValues']['forthAdditionalValue']['value'] : 0;
$config['topAdditionalValueUnit'] = '%';
$config['valuesAmount']['firstAdditionalAmount']['value'] =
($items[0]['additionalValues']['secondAdditionalValue']['value'] ?? null)
;
//$config['valuesAmount']['secondAdditionalAmount']['value'] = $items[0]['additionalValues']['thirdAdditionalValue']['value'];
if ($shortModeValue)
{
$config['mode'] = 'singleData';
}
unset($config['valuesAmount']['thirdAdditionalAmount']);
break;
}
}
}
$result = [
'items' => $items,
'config' => $config
];
return $result;
}