• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discount/gift/manager.php
  • Класс: Bitrix\Sale\Discount\Gift\Manager
  • Вызов: Manager::getDiscounts
private function getDiscounts(Basket $basket)
{
	if($basket->getOrder())
	{
		throw new SystemException('Could not get discounts by basket which has order.');
	}

	$registry = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);
	/** @var Order $orderClass */
	$orderClass = $registry->getOrderClassName();

	$order = $orderClass::create($basket->getSiteId(), $this->userId);
	if(!$order->setBasket($basket)->isSuccess())
	{
		return null;
	}
	$discount = $order->getDiscount();
	$discount->calculate();
	$calcResults = $discount->getApplyResult(true);
	unset($discount);

	$appliedDiscounts = array();
	foreach($calcResults['DISCOUNT_LIST'] as $discountData)
	{
		if(isset($calcResults['FULL_DISCOUNT_LIST'][$discountData['REAL_DISCOUNT_ID']]))
		{
			$appliedDiscounts[$discountData['REAL_DISCOUNT_ID']] = $calcResults['FULL_DISCOUNT_LIST'][$discountData['REAL_DISCOUNT_ID']];
			if(empty($appliedDiscounts[$discountData['REAL_DISCOUNT_ID']]['RESULT']['BASKET']))
			{
				$appliedDiscounts[$discountData['REAL_DISCOUNT_ID']]['RESULT']['BASKET'] = array();
			}

			$appliedDiscounts[$discountData['REAL_DISCOUNT_ID']]['RESULT']['BASKET'] = array_merge(
				$appliedDiscounts[$discountData['REAL_DISCOUNT_ID']]['RESULT']['BASKET'],
				$this->getAffectedReformattedBasketItemsInDiscount($basket, $discountData, $calcResults)
			);
		}
	}
	unset($discountData);

	return array(
		$calcResults['FULL_DISCOUNT_LIST'],
		$appliedDiscounts,
	);
}