• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/discount/discountmanager.php
  • Класс: BitrixCatalogDiscountDiscountManager
  • Вызов: DiscountManager::createSaleAction
static function createSaleAction(&$discount, $params): void
{
	$data = [
		'TYPE' => $discount['VALUE_TYPE'],
		'VALUE' => $discount['VALUE'],
		'CURRENCY' => $discount['CURRENCY'],
		'USE_BASE_PRICE' => $params['USE_BASE_PRICE']
	];
	if ($discount['TYPE'] == CatalogDiscountTable::VALUE_TYPE_PERCENT)
		$data['MAX_VALUE'] = $discount['MAX_VALUE'];

	$action = 'BitrixCatalogDiscountDiscountManager::applyDiscount('.$params['BASKET_ITEM'].', '.var_export($data, true).');';
	$discount['APPLICATION'] = 'function (&'.$params['BASKET_ITEM'].'){'.$action.'};';
	$discount['ACTIONS'] = $data;
	unset($action, $data);

	if (self::$saleIncluded === null)
		self::$saleIncluded = Loader::includeModule('sale');
	if (!self::$saleIncluded)
		return;

	$type = '';
	$descr = [
		'VALUE_ACTION' => (
			$discount['TYPE'] == CatalogDiscountTable::TYPE_DISCOUNT_SAVE
			? SaleDiscountFormatter::VALUE_ACTION_CUMULATIVE
			: SaleDiscountFormatter::VALUE_ACTION_DISCOUNT
		),
		'VALUE' => $discount['VALUE']
	];
	switch ($discount['VALUE_TYPE'])
	{
		case CatalogDiscountTable::VALUE_TYPE_PERCENT:
			$type = (
				$discount['MAX_VALUE'] > 0
				? SaleDiscountFormatter::TYPE_LIMIT_VALUE
				: SaleDiscountFormatter::TYPE_VALUE
			);
			$descr['VALUE_TYPE'] = SaleDiscountFormatter::VALUE_TYPE_PERCENT;
			if ($discount['MAX_VALUE'] > 0)
			{
				$descr['LIMIT_TYPE'] = SaleDiscountFormatter::LIMIT_MAX;
				$descr['LIMIT_UNIT'] = $discount['CURRENCY'];
				$descr['LIMIT_VALUE'] = $discount['MAX_VALUE'];
			}
			break;
		case CatalogDiscountTable::VALUE_TYPE_FIX:
			$type = SaleDiscountFormatter::TYPE_VALUE;
			$descr['VALUE_TYPE'] = SaleDiscountFormatter::VALUE_TYPE_CURRENCY;
			$descr['VALUE_UNIT'] = $discount['CURRENCY'];
			break;
		case CatalogDiscountTable::VALUE_TYPE_SALE:
			$type = SaleDiscountFormatter::TYPE_FIXED;
			$descr['VALUE_UNIT'] = $discount['CURRENCY'];
			break;
	}
	$descrResult = SaleDiscountFormatter::prepareRow($type, $descr);
	if ($descrResult !== null)
	{
		$discount['ACTIONS_DESCR'] = [
			'BASKET' => [
				0 => $descrResult
			]
		];
	}
	unset($descrResult, $descr, $type);
}