• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/orderdiscountbase.php
  • Класс: BitrixSaleOrderDiscountBase
  • Вызов: OrderDiscountBase::roundBasket
static function roundBasket(array $basket, array $roundData = array(), array $orderData = array())
{
	static::init();

	if (empty($basket))
		return array();

	$result = array();
	$basketByModules = array();
	$roundByModules = array();
	foreach ($basket as $basketCode => $basketItem)
	{
		if (!isset($basketItem['MODULE']))
			continue;
		$module = $basketItem['MODULE'];
		if (!isset($basketByModules[$module]))
		{
			$basketByModules[$module] = array();
			$roundByModules[$module] = array();
		}
		$basketByModules[$module][$basketCode] = $basketItem;
		$roundByModules[$module][$basketCode] = (isset($roundData[$basketCode]) ? $roundData[$basketCode] : array());
	}
	unset($basketCode, $basketItem);

	foreach ($basketByModules as $module => $moduleItems)
	{
		$moduleResult = static::executeDiscountProvider(
			array('MODULE_ID' => $module, 'METHOD' => self::PROVIDER_ACTION_ROUND_BASKET_PRICES),
			array($moduleItems, $roundByModules[$module], $orderData)
		);
		if ($moduleResult === false)
		{
			$moduleResult = array();
			foreach ($moduleItems as $basketCode => $basketItem)
			{
				$itemResult = static::roundPrice($basketItem, $roundByModules[$module][$basketCode]);
				if (!empty($itemResult))
					$moduleResult[$basketCode] = $itemResult;
			}
		}
		if (empty($moduleResult))
			continue;

		foreach (array_keys($moduleResult) as $basketCode)
			$result[$basketCode] = $moduleResult[$basketCode];
		unset($moduleResult);
	}
	unset($moduleResult, $module, $moduleItems);

	return $result;
}