• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
  • Класс: BitrixSaleDiscountBase
  • Вызов: DiscountBase::loadOrderDiscounts
protected function loadOrderDiscounts()
{
	$result = new Result;
	$this->discountsCache = array();
	$this->couponsCache = array();

	if (!$this->isOrderExists())
		return $result;

	$order = $this->getOrder();
	if ($this->isOrderNew() || $this->getUseMode() == self::USE_MODE_FULL)
		return $result;

	/** @var DiscountCouponsManager $couponClassName */
	$couponClassName = $this->getDiscountCouponClassName();

	/** @var OrderDiscount $storageClassName */
	$storageClassName = $this->getOrderDiscountClassName();
	$applyResult = $storageClassName::loadResultFromDb(
		$order->getId(),
		$this->reverseBasketTable,
		$this->orderData['BASKET_ITEMS']
	);

	if (!$applyResult->isSuccess())
		$result->addErrors($applyResult->getErrors());

	$applyResultData = $applyResult->getData();

	if (!empty($applyResultData['DISCOUNT_LIST']))
	{
		foreach ($applyResultData['DISCOUNT_LIST'] as $orderDiscountId => $discountData)
		{
			$discountData['ACTIONS_DESCR_DATA'] = false;
			if (!empty($discountData['ACTIONS_DESCR']) && is_array($discountData['ACTIONS_DESCR']))
			{
				$discountData['ACTIONS_DESCR_DATA'] = $discountData['ACTIONS_DESCR'];
				$discountData['ACTIONS_DESCR'] = $this->formatDescription($discountData['ACTIONS_DESCR']);
			}
			else
			{
				$discountData['ACTIONS_DESCR'] = false;
			}
			if (empty($discountData['ACTIONS_DESCR']))
			{
				$discountData['ACTIONS_DESCR'] = false;
				$discountData['ACTIONS_DESCR_DATA'] = false;
			}
			$this->discountsCache[$orderDiscountId] = $discountData;
		}
		unset($orderDiscountId, $discountData);
	}
	if (!empty($applyResultData['COUPON_LIST']))
		$this->couponsCache = $applyResultData['COUPON_LIST'];

	$this->discountResultCounter = 0;
	$this->discountResult['APPLY_BLOCKS'] = $applyResultData['APPLY_BLOCKS'];
	if (!empty($this->discountResult['APPLY_BLOCKS']))
	{
		foreach ($this->discountResult['APPLY_BLOCKS'] as $counter => $applyBlock)
		{
			if (!empty($applyBlock['BASKET']))
			{
				foreach ($applyBlock['BASKET'] as $discountList)
				{
					foreach ($discountList as $discount)
					{
						if ($discount['COUPON_ID'] == '')
							continue;
						$couponClassName::setApplyByProduct($discount, array($discount['COUPON_ID']));
					}
				}
				unset($discountList);
			}

			if (!empty($applyBlock['ORDER']))
			{
				foreach ($applyBlock['ORDER'] as $discount)
				{
					if ($discount['COUPON_ID'] != '')
						$couponClassName::setApply($discount['COUPON_ID'], $discount['RESULT']);
				}
				unset($discount);
			}

			$this->discountResultCounter = $counter + 1;
		}
		unset($counter, $applyBlock);
	}

	if (!empty($applyResultData['STORED_ACTION_DATA']) && is_array($applyResultData['STORED_ACTION_DATA']))
		$this->discountStoredActionData = $applyResultData['STORED_ACTION_DATA'];

	unset($applyResultData, $applyResult);

	return $result;
}