- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
- Класс: BitrixSaleDiscountBase
- Вызов: DiscountBase::getRoundForBasePrices
private function getRoundForBasePrices()
{
$mode = $this->getUseMode();
if ($mode != self::USE_MODE_FULL && $mode != self::USE_MODE_MIXED)
return;
$basketCodeList = $this->getBasketCodes(true);
if (empty($basketCodeList))
return;
$basket = array_intersect_key(
$this->orderData['BASKET_ITEMS'],
array_fill_keys($basketCodeList, true)
);
if (empty($basket))
return;
foreach ($basketCodeList as $basketCode)
{
$this->addBasketItemValues(
$basketCode,
['BASE_PRICE_ROUND' => $basket[$basketCode]['BASE_PRICE'], 'BASE_PRICE_ROUND_RULE' => []]
);
}
unset($basketCode);
foreach ($basket as &$basketItem)
$basketItem = self::resetBasketItemPrice($basketItem);
unset($basketItem);
$orderData = $this->orderData;
unset($orderData['BASKET_ITEMS']);
/** @var OrderDiscount $storageClassName */
$storageClassName = $this->getOrderDiscountClassName();
$result = $storageClassName::roundBasket(
$basket,
array(),
$orderData
);
foreach ($basketCodeList as $basketCode)
{
if (empty($result[$basketCode]) || !is_array($result[$basketCode]))
continue;
$this->addBasketItemValues(
$basketCode,
[
'BASE_PRICE_ROUND' => $result[$basketCode]['PRICE'],
'BASE_PRICE_ROUND_RULE' => $result[$basketCode]['ROUND_RULE']
]
);
}
unset($basketCode, $result);
unset($storageClassName);
unset($basket, $orderData);
}