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