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

	$useMode = $this->getUseMode();
	if ($useMode != self::USE_MODE_APPLY && $useMode != self::USE_MODE_MIXED)
		return $result;

	if (!$this->useOnlySaleDiscounts())
	{
		$couponList = $this->getAdditionalCoupons(array('!MODULE_ID' => 'sale'));
		if (!empty($couponList))
		{
			$params = array(
				'USE_BASE_PRICE' => $this->saleOptions['USE_BASE_PRICE'],
				'USER_ID' => $this->orderData['USER_ID'],
				'SITE_ID' => $this->orderData['SITE_ID']
			);
			$couponsByModule = array();
			foreach ($couponList as &$coupon)
			{
				if (!isset($couponsByModule[$coupon['MODULE_ID']]))
					$couponsByModule[$coupon['MODULE_ID']] = array();
				$couponsByModule[$coupon['MODULE_ID']][] = array(
					'DISCOUNT_ID' => $coupon['DISCOUNT_ID'],
					'COUPON' => $coupon['COUPON']
				);
			}
			unset($coupon);
			if (!empty($couponsByModule))
			{
				/** @var OrderDiscount $storageClassName */
				$storageClassName = $this->getOrderDiscountClassName();
				foreach ($couponsByModule as $moduleId => $moduleCoupons)
				{
					if ($useMode == self::USE_MODE_APPLY)
					{
						$currentBasket = $this->orderData['BASKET_ITEMS'];
					}
					else
					{
						$currentBasket = array();
						$basketCodeList = $this->getBasketCodes(false);
						foreach ($basketCodeList as $basketCode)
							$currentBasket[$basketCode] = $this->orderData['BASKET_ITEMS'][$basketCode];
						unset($basketCode, $basketCodeList);
					}
					if (empty($currentBasket))
						continue;
					$couponsApply = $storageClassName::calculateApplyCoupons(
						$moduleId,
						$moduleCoupons,
						$currentBasket,
						$params
					);
					unset($currentBasket);
					if (!empty($couponsApply))
					{
						$couponsApplyResult = $this->calculateApplyBasketAdditionalCoupons($couponsApply);
						if (!$couponsApplyResult->isSuccess())
							$result->addErrors($couponsApplyResult->getErrors());
						unset($couponsApplyResult);
					}
					unset($couponsApply);
				}
				unset($moduleId, $moduleCoupons);
			}
			unset($couponsByModule, $params);
		}
		unset($couponList);
	}

	$couponList = $this->getAdditionalCoupons(array('MODULE_ID' => 'sale'));
	if (!empty($couponList))
	{
		$couponsApplyResult = $this->calculateApplySaleAdditionalCoupons($couponList);
		if (!$couponsApplyResult->isSuccess())
			$result->addErrors($couponsApplyResult->getErrors());
		unset($couponsApplyResult);
	}
	unset($couponList);

	return $result;
}