• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discount/formatter.php
  • Класс: BitrixSaleDiscountFormatter
  • Вызов: Formatter::prepareRow
static function prepareRow($type, $data)
{
	self::clearErrors();
	$process = true;
	$result = array();

	$type = (int)$type;

	if ($type != self::TYPE_SIMPLE)
	{
		if (empty($data) || !is_array($data))
		{
			$process = false;
			self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
		}
	}
	switch ($type)
	{
		case self::TYPE_SIMPLE:
			if (empty($data) || !is_string($data))
			{
				$process = false;
				self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
			}
			if ($process)
			{
				$result = array(
					'TYPE' => self::TYPE_SIMPLE,
					'DESCR' => $data
				);
			}
			break;
		case self::TYPE_LIMIT_VALUE:
		case self::TYPE_VALUE:
			if ($type == self::TYPE_LIMIT_VALUE)
			{
				if ($process)
				{
					if (!isset($data['LIMIT_TYPE']) || !isset($data['LIMIT_VALUE']) || !isset($data['LIMIT_UNIT']))
					{
						$process = false;
						self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
					}
					elseif ($data['LIMIT_TYPE'] != self::LIMIT_MAX && $data['LIMIT_TYPE'] != self::LIMIT_MIN)
					{
						$process = false;
						self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
					}
				}
				if ($process)
				{
					if ($data['VALUE_TYPE'] != self::VALUE_TYPE_PERCENT)
					{
						$process = false;
						self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
					}
				}
				if ($process)
				{
					$result['LIMIT_TYPE'] = $data['LIMIT_TYPE'];
					$result['LIMIT_VALUE'] = $data['LIMIT_VALUE'];
					$result['LIMIT_UNIT'] = $data['LIMIT_UNIT'];
				}
			}
			if ($process)
			{
				if (!isset($data['VALUE']) || !isset($data['VALUE_TYPE']))
				{
					$process = false;
					self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
				}
			}
			if ($process)
			{
				if (
					$data['VALUE_TYPE'] != self::VALUE_TYPE_PERCENT
					&& $data['VALUE_TYPE'] != self::VALUE_TYPE_CURRENCY
					&& $data['VALUE_TYPE'] != self::VALUE_TYPE_SUMM
					&& $data['VALUE_TYPE'] != self::VALUE_TYPE_SUMM_BASKET
				)
				{
					$process = false;
					self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
				}
				elseif (
					$data['VALUE_TYPE'] == self::VALUE_TYPE_CURRENCY
					|| $data['VALUE_TYPE'] == self::VALUE_TYPE_SUMM
					|| $data['VALUE_TYPE'] == self::VALUE_TYPE_SUMM_BASKET
				)
				{
					if (!isset($data['VALUE_UNIT']))
					{
						$process = false;
						self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
					}
				}
			}
			if ($process)
			{
				if (!isset($data['VALUE_ACTION']))
					$data['VALUE_ACTION'] = self::VALUE_ACTION_DISCOUNT;
				if (
					$data['VALUE_ACTION'] != self::VALUE_ACTION_DISCOUNT
					&& $data['VALUE_ACTION'] != self::VALUE_ACTION_EXTRA
					&& $data['VALUE_ACTION'] != self::VALUE_ACTION_CUMULATIVE
				)
				{
					$process = false;
					self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
				}
			}
			if ($process)
			{
				$result['TYPE'] = $type;
				$result['VALUE'] = $data['VALUE'];
				$result['VALUE_TYPE'] = $data['VALUE_TYPE'];
				$result['VALUE_ACTION'] = $data['VALUE_ACTION'];

				if (
					$data['VALUE_TYPE'] == self::VALUE_TYPE_CURRENCY
					|| $data['VALUE_TYPE'] == self::VALUE_TYPE_SUMM
					|| $data['VALUE_TYPE'] == self::VALUE_TYPE_SUMM_BASKET
				)
					$result['VALUE_UNIT'] = $data['VALUE_UNIT'];
				if (isset($data['RESULT_VALUE']) && isset($data['RESULT_UNIT']))
				{
					$result['RESULT_VALUE'] = (string)$data['RESULT_VALUE'];
					$result['RESULT_UNIT'] = $data['RESULT_UNIT'];
				}
			}
			break;
		case self::TYPE_FIXED:
			if ($process)
			{
				if (!isset($data['VALUE']) || !isset($data['VALUE_UNIT']))
				{
					$process = false;
					self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
				}
			}
			if ($process)
			{
				$result = array(
					'TYPE' => $type,
					'VALUE' => $data['VALUE'],
					'VALUE_UNIT' => $data['VALUE_UNIT']
				);
			}
			break;
		case self::TYPE_MAX_BOUND:
			if ($process)
			{
				if (!isset($data['VALUE']) || !isset($data['VALUE_UNIT']))
				{
					$process = false;
					self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
				}
			}
			if ($process)
			{
				$result = array(
					'TYPE' => $type,
					'VALUE' => $data['VALUE'],
					'VALUE_UNIT' => $data['VALUE_UNIT']
				);
				if (isset($data['RESULT_VALUE']) && isset($data['RESULT_UNIT']))
				{
					$result['RESULT_VALUE'] = (string)$data['RESULT_VALUE'];
					$result['RESULT_UNIT'] = $data['RESULT_UNIT'];
				}
			}
			break;
		case self::TYPE_SIMPLE_GIFT:
			$result = array(
				'TYPE' => self::TYPE_SIMPLE_GIFT
			);
			break;
		default:
			$process = false;
			self::addError(Loc::getMessage('SALE_DISCOUNT_FORMATTER_ERR_FORMAT_DESCR_BAD'));
			break;
	}

	return ($process ? $result : null);
}