• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
  • Класс: BitrixSaleDiscountBase
  • Вызов: DiscountBase::roundApplyBasketPrices
protected function roundApplyBasketPrices()
{
	if (empty($this->discountResult['APPLY_BLOCKS'][$this->discountResultCounter]['BASKET_ROUND']))
		return;

	$basketCodeList = $this->getBasketCodes(false);
	if (!empty($basketCodeList))
	{
		$roundBlock = &$this->discountResult['APPLY_BLOCKS'][$this->discountResultCounter]['BASKET_ROUND'];
		$basket = array();
		$roundData = array();
		foreach ($basketCodeList as $basketCode)
		{
			if (empty($roundBlock[$basketCode]))
				continue;
			if ($roundBlock[$basketCode]['APPLY'] != 'Y')
				continue;
			$basket[$basketCode] = $this->orderData['BASKET_ITEMS'][$basketCode];
			$roundData[$basketCode] = $roundBlock[$basketCode]['ROUND_RULE'];
		}
		unset($basketCode);

		if (!empty($basket))
		{
			$orderData = $this->orderData;
			unset($orderData['BASKET_ITEMS']);

			/** @var OrderDiscount $storageClassName */
			$storageClassName = $this->getOrderDiscountClassName();

			$result = $storageClassName::roundBasket(
				$basket,
				$roundData,
				$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'];
			}
			unset($basketCode, $roundResult, $result);
			unset($orderData);
		}
		unset($roundData, $basket);

		unset($roundBlock);
	}
	unset($basketCodeList);
}