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