- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
- Класс: BitrixSaleDiscountBase
- Вызов: DiscountBase::getShowPrices
public function getShowPrices()
{
if (!$this->isOrderNew() && !$this->isLoaded())
{
$this->initUseMode();
$this->loadOrderData();
}
$result = [
'BASKET' => []
];
$checkRound = true;
$useMode = $this->getUseMode();
switch ($useMode)
{
case self::USE_MODE_APPLY:
case self::USE_MODE_MIXED:
if (!$this->isValidState())
$checkRound = false;
break;
}
if (!empty($this->orderData['BASKET_ITEMS']))
{
/** @var OrderDiscount $storageClassName */
$storageClassName = $this->getOrderDiscountClassName();
$basket = $this->orderData['BASKET_ITEMS'];
$order = $this->orderData;
unset($order['BASKET_ITEMS']);
switch ($useMode)
{
case self::USE_MODE_FULL:
case self::USE_MODE_APPLY:
if ($checkRound)
{
$basketCodeList = $this->getBasketCodes(true);
$existRound = array();
$existRoundRules = array();
foreach ($basketCodeList as $basketCode)
{
if (!empty($this->basketItemsData[$basketCode]['BASE_PRICE_ROUND_RULE']))
{
$existRound[$basketCode] = self::resetBasketItemPrice($basket[$basketCode]);
$existRoundRules[$basketCode] = $this->basketItemsData[$basketCode]['BASE_PRICE_ROUND_RULE'];
}
}
if (!empty($existRound))
{
$roundResult = $storageClassName::roundBasket(
$existRound,
$existRoundRules,
$order
);
foreach ($roundResult as $basketCode => $row)
{
if (empty($row) || !is_array($row))
continue;
if (!isset($existRound[$basketCode]))
continue;
$basket[$basketCode]['BASE_PRICE'] = $row['PRICE'];
$basket[$basketCode]['DISCOUNT_PRICE'] = $basket[$basketCode]['BASE_PRICE'] - $basket[$basketCode]['PRICE'];
}
}
unset($existRoundRules, $existRound);
}
break;
case self::USE_MODE_MIXED:
if ($checkRound)
{
$existRound = array();
$existRoundRules = array();
foreach ($basket as $basketCode => $item)
{
if ($this->isFreezedBasketItem($item))
continue;
if (!empty($this->basketItemsData[$basketCode]['BASE_PRICE_ROUND_RULE']))
{
$existRound[$basketCode] = self::resetBasketItemPrice($basket[$basketCode]);
$existRoundRules[$basketCode] = $this->basketItemsData[$basketCode]['BASE_PRICE_ROUND_RULE'];
}
}
unset($code, $item);
if (!empty($existRound))
{
$roundResult = $storageClassName::roundBasket(
$existRound,
$existRoundRules,
$order
);
foreach ($roundResult as $basketCode => $row)
{
if (empty($row) || !is_array($row))
continue;
if (!isset($existRound[$basketCode]))
continue;
$basket[$basketCode]['BASE_PRICE'] = $row['PRICE'];
$basket[$basketCode]['DISCOUNT_PRICE'] = $basket[$basketCode]['BASE_PRICE'] - $basket[$basketCode]['PRICE'];
}
}
unset($existRoundRules, $existRound);
}
break;
}
foreach ($basket as $basketCode => $basketItem)
{
$result['BASKET'][$basketCode] = $this->getShowBasketItemPrice($basketCode, $basketItem);
$result['BASKET'][$basketCode]['REAL_BASE_PRICE'] = $this->orderData['BASKET_ITEMS'][$basketCode]['BASE_PRICE'];
$result['BASKET'][$basketCode]['REAL_PRICE'] = $this->orderData['BASKET_ITEMS'][$basketCode]['PRICE'];
$result['BASKET'][$basketCode]['REAL_DISCOUNT'] = $this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_PRICE'];
}
unset($basketCode, $basketItem);
}
return $result;
}