• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/order.php
  • Класс: BitrixSalesCenterControllerOrder
  • Вызов: Order::refreshBasketAction
public function refreshBasketAction($orderId, array $basketItems = [])
{
	$basketItems = $this->processBasketItems($basketItems);

	$order = $this->buildOrder(
		[
			'orderId' => $orderId,
			'basketItems' => $basketItems,
		],
		[
			'orderErrorsFilter' => [
				'SALE_BASKET_AVAILABLE_QUANTITY',
				'SALE_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY',
			],
		]
	);

	if ($order === null)
	{
		return ['items' => $basketItems];
	}

	$discountSum = 0;
	$baseSum = 0;
	$price = 0;
	$vatSum = 0;
	foreach ($basketItems as $item)
	{
		$basketItem = $order->getBasket()->getItemByXmlId($item['innerId']);
		if ($basketItem === null)
		{
			continue;
		}

		if ($basketItem->getBasePrice() !== $basketItem->getPrice() && empty($basketItem->getDiscountPrice()))
		{
			$discountSum += ($basketItem->getBasePrice() - $basketItem->getPrice()) * $item['quantity'];
		}
		else
		{
			$discountSum += $basketItem->getDiscountPrice() * $item['quantity'];
		}

		$baseSum += $basketItem->getBasePrice() * $item['quantity'];
		$price += $basketItem->getPrice() * $item['quantity'];
		$vatRate = (float)$basketItem->getVatRate();

		if ($basketItem->isVatInPrice())
		{
			$vatSum += SalePriceMaths::roundPrecision(
				$basketItem->getPrice()
				* $item['quantity']
				* $vatRate
				/ (
					$vatRate + 1
				)
			);
		}
		else
		{
			$vatSum += SalePriceMaths::roundPrecision(
				$basketItem->getPrice()
				* $item['quantity']
				* $vatRate
			);
		}
	}

	return [
		'items' => $this->fillResultBasket($basketItems, $order),
		'total' => [
			'discount' => $discountSum,
			'result' => $price,
			'taxSum' => $vatSum,
			'sum' => $baseSum,
		]
	];
}