• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/widget/numericwidget.php
  • Класс: Bitrix\Crm\Widget\NumericWidget
  • Вызов: NumericWidget::prepareItem
protected function prepareItem(array $params, array &$result)
{
	/** @var string $name */
	$name = $params['name'];
	/** @var WidgetConfig $config */
	$config = $params['config'];
	/** @var DataSource $source */
	$source = $params['source'];

	if($source === null)
	{
		$result[$name] = array();
		return;
	}

	$selectField = $config->getSelectField();
	if($selectField === '')
	{
		$selectField = $name;
	}

	$this->filter->setExtras($config->getFilterParams());
	$value = (double)$source->getFirstValue(
		array(
			'filter' => $this->filter,
			'select' => array(array('name' => $selectField, 'aggregate' => $config->getAggregate())),
			'result' => $result
		),
		$selectField,
		0.0
	);


	if(!isset($result[$name]))
	{
		$result[$name] = array();
	}

	$format = $config->getFomatParams();
	if(empty($format))
	{
		$result[$name]['value'] = $value;
	}
	else
	{
		$result[$name]['format'] = $format;
		if(isset($format['enableDecimals']) && $format['enableDecimals'] == 'N')
		{
			$value = round($value, 2);
		}

		$result[$name]['value'] = $value;

		if(isset($format['isCurrency']) && $format['isCurrency'] === 'Y')
		{
			//hack fom Currency module issue.
			//$result[$name]['html'] = \CCrmCurrency::MoneyToString(strval($value), \CCrmCurrency::GetAccountCurrencyID());
			$html = \CCrmCurrency::MoneyToString(strval($value), \CCrmCurrency::GetAccountCurrencyID());
			$html = preg_replace('/(₽)/', '${1}', $html);
			$result[$name]['html']  = $html;

		}
		elseif(isset($format['isPercent']) && $format['isPercent'] === 'Y')
		{
			$result[$name]['html'] = "{$value}%";
		}
	}

	$detailsPageUrl = $source->getDetailsPageUrl(array('filter' => $this->filter, 'field' => $selectField));
	if($detailsPageUrl !== '')
	{
		$result[$name]['url'] = $detailsPageUrl;
	}

	$display = $config->getDisplayParams();
	if(!empty($display))
	{
		$result[$name]['display'] = $display;
	}
}