- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
- Класс: BitrixSaleDiscountBase
- Вызов: DiscountBase::roundChangedBasketPrices
protected function roundChangedBasketPrices()
{
$basketCodeList = array();
$applyBlock = $this->discountResult['APPLY_BLOCKS'][$this->discountResultCounter];
switch ($this->getUseMode())
{
case self::USE_MODE_APPLY:
if (!empty($applyBlock['BASKET']))
{
foreach (array_keys($applyBlock['BASKET']) as $basketCode)
{
$basketCodeList[$basketCode] = $basketCode;
}
unset($basketCode);
}
if (!empty($applyBlock['ORDER']))
{
foreach ($applyBlock['ORDER'] as $discount)
{
if (empty($discount['RESULT']['BASKET']))
continue;
foreach (array_keys($discount['RESULT']['BASKET']) as $basketCode)
{
$basketCodeList[$basketCode] = $basketCode;
}
}
unset($basketCode, $discount);
}
break;
case self::USE_MODE_MIXED:
if (!empty($applyBlock['BASKET']))
{
foreach (array_keys($applyBlock['BASKET']) as $basketCode)
{
$basketCodeList[$basketCode] = $basketCode;
}
unset($basketCode);
}
if (!empty($applyBlock['ORDER']))
{
foreach ($applyBlock['ORDER'] as $discount)
{
if (empty($discount['RESULT']['BASKET']))
continue;
foreach (array_keys($discount['RESULT']['BASKET']) as $basketCode)
{
$basketCodeList[$basketCode] = $basketCode;
}
}
unset($basketCode, $discount);
}
foreach ($this->getBasketCodes(true) as $basketCode)
$basketCodeList[$basketCode] = $basketCode;
break;
}
if (!empty($basketCodeList))
{
$roundBlock = &$this->discountResult['APPLY_BLOCKS'][$this->discountResultCounter]['BASKET_ROUND'];
$orderData = $this->orderData;
unset($orderData['BASKET_ITEMS']);
$basket = array_intersect_key(
$this->orderData['BASKET_ITEMS'],
array_fill_keys($basketCodeList, true)
);
/** @var OrderDiscount $storageClassName */
$storageClassName = $this->getOrderDiscountClassName();
$result = $storageClassName::roundBasket(
$basket,
array(),
$orderData
);
foreach ($result as $basketCode => $roundResult)
{
if (empty($roundResult) || !is_array($roundResult))
continue;
if (!$this->isExistBasketItem($basketCode))
continue;
$this->orderData['BASKET_ITEMS'][$basketCode]['PRICE'] = $roundResult['PRICE'];
$this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_PRICE'] = $roundResult['DISCOUNT_PRICE'];
$roundBlock[$basketCode] = array(
'APPLY' => 'Y',
'ROUND_RULE' => $roundResult['ROUND_RULE']
);
}
unset($basketCode, $roundResult, $result);
unset($storageClassName);
unset($basket, $orderData);
unset($roundBlock);
}
unset($basketCodeList);
}