• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/controller/action/entity/order.php
  • Класс: BitrixSaleHelpersControllerActionEntityOrder
  • Вызов: Order::getTotal
static function getTotal(SaleOrder $order)
{
	/** @var SaleBasket $basket */
	//$basket = $order->getBasket();

	$calculateBasket = $order->getBasket()->createClone();

	$discounts = $order->getDiscount();
	$showPrices = $discounts->getShowPrices();
	if (!empty($showPrices['BASKET']))
	{
		foreach ($showPrices['BASKET'] as $basketCode => $data)
		{
			$basketItem = $calculateBasket->getItemByBasketCode($basketCode);
			if ($basketItem instanceof SaleBasketItemBase)
			{
				$basketItem->setFieldNoDemand('BASE_PRICE', $data['SHOW_BASE_PRICE']);
				$basketItem->setFieldNoDemand('PRICE', $data['SHOW_PRICE']);
				$basketItem->setFieldNoDemand('DISCOUNT_PRICE', $data['SHOW_DISCOUNT']);
			}
		}
	}
	unset($showPrices);

	$result = [
		'WEIGHT_UNIT' => ConfigOption::get('sale', 'weight_unit', false, $order->getSiteId()),
		'WEIGHT_KOEF' => ConfigOption::get('sale', 'weight_koef', 1, $order->getSiteId()),
	];

/*		$result['BASKET_POSITIONS'] = $basket->count();
	$result['ORDER_PRICE'] = PriceMaths::roundPrecision($basket->getPrice());
	$result['ORDER_WEIGHT'] = $basket->getWeight();

	$result['PRICE_WITHOUT_DISCOUNT_VALUE'] = $basket->getBasePrice();
	$result['BASKET_PRICE_DISCOUNT_DIFF_VALUE'] = PriceMaths::roundPrecision(
		$basket->getBasePrice() - $basket->getPrice()
	);
	$result['DISCOUNT_PRICE'] = PriceMaths::roundPrecision(
		$order->getDiscountPrice() + ($result['PRICE_WITHOUT_DISCOUNT_VALUE'] - $result['ORDER_PRICE'])
	); */

	$result['BASKET_POSITIONS'] = $calculateBasket->count();
	$result['ORDER_PRICE'] = PriceMaths::roundPrecision($calculateBasket->getPrice());
	$result['ORDER_WEIGHT'] = $calculateBasket->getWeight();

	$result['PRICE_WITHOUT_DISCOUNT_VALUE'] = $calculateBasket->getBasePrice();
	$result['BASKET_PRICE_DISCOUNT_DIFF_VALUE'] = PriceMaths::roundPrecision(
		$calculateBasket->getBasePrice() - $calculateBasket->getPrice()
	);
	$result['DISCOUNT_PRICE'] = PriceMaths::roundPrecision(
		$order->getDiscountPrice() + ($result['PRICE_WITHOUT_DISCOUNT_VALUE'] - $result['ORDER_PRICE'])
	);

	$result['DELIVERY_PRICE'] = PriceMaths::roundPrecision($order->getDeliveryPrice());
	$result['ORDER_TOTAL_PRICE'] = PriceMaths::roundPrecision($order->getPrice());

	return $result;
}