• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basketcomponenthelper.php
  • Класс: BitrixSaleBasketComponentHelper
  • Вызов: BasketComponentHelper::calculateBasketCost
static function calculateBasketCost(Basket $basket)
{
	if ($basket->count() == 0)
		return 0;

	$oldApiStatus = CompatibleDiscountCompatibility::isUsed(); // TODO: remove this code after refactoring DiscountCompatibility
	if ($oldApiStatus)
		CompatibleDiscountCompatibility::stopUsageCompatible();
	DiscountCouponsManager::freezeCouponStorage();
	$basket->refreshData(array('PRICE', 'COUPONS'));
	$discounts = Discount::buildFromBasket($basket, new DiscountContextFuser($basket->getFUserId(true)));
	$discounts->calculate();
	$discountResult = $discounts->getApplyResult();
	DiscountCouponsManager::unFreezeCouponStorage();
	if ($oldApiStatus)
		CompatibleDiscountCompatibility::revertUsageCompatible();

	if (empty($discountResult['PRICES']['BASKET']))
		return 0;

	$result = 0;
	$discountResult = $discountResult['PRICES']['BASKET'];
	/** @var BasketItem $basketItem */
	foreach ($basket as $basketItem)
	{
		if (!$basketItem->canBuy())
			continue;
		$code = $basketItem->getBasketCode();
		if (!empty($discountResult[$code]))
			$result += $discountResult[$code]['PRICE'] * $basketItem->getQuantity();
		unset($code);
	}
	unset($basketItem);
	unset($discountResult);

	return $result;
}