• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
  • Класс: BitrixSaleDiscountBase
  • Вызов: DiscountBase::clearAdditionalCoupons
protected function clearAdditionalCoupons(array $coupons)
{
	if (empty($coupons))
		return array();

	if (empty($this->discountsCache))
		return $coupons;

	$result = array();

	foreach ($coupons as $couponCode => $couponData)
	{
		$found = false;
		foreach ($this->discountsCache as &$discount)
		{
			if (
				$discount['MODULE_ID'] == $couponData['MODULE_ID']
				&& $discount['DISCOUNT_ID'] == $couponData['DISCOUNT_ID']
				&& $discount['USE_COUPONS'] == 'N'
			)
			{
				$found = true;
			}
		}
		unset($discount);

		if (!$found && !empty($this->couponsCache))
		{
			foreach ($this->couponsCache as $existCouponCode => $existCouponData)
			{
				$discount = $this->discountsCache[$existCouponData['ORDER_DISCOUNT_ID']];
				if (
					$discount['MODULE_ID'] != $couponData['MODULE_ID']
					|| $discount['DISCOUNT_ID'] != $couponData['DISCOUNT_ID']
				)
					continue;
				if ($couponCode == $existCouponCode)
				{
					if (
						$existCouponData['ID'] > 0 || $existCouponData['TYPE'] == InternalsDiscountCouponTable::TYPE_BASKET_ROW
					)
						$found = true;
				}
				else
				{
					if (
						$existCouponData['TYPE'] != InternalsDiscountCouponTable::TYPE_BASKET_ROW
						|| $couponData['TYPE'] != InternalsDiscountCouponTable::TYPE_BASKET_ROW
					)
					{
						$found = true;
					}
					else
					{
						if ($discount['MODULE_ID'] == 'sale')
							$found = true;
					}
				}
				unset($discount);
				if ($found)
					break;
			}
			unset($existCouponCode, $existCouponData);
		}

		if (!$found)
			$result[$couponCode] = $couponData;
		unset($found);
	}
	unset($couponCode, $couponData);

	return $result;
}