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