• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/orderdiscountbase.php
  • Класс: BitrixSaleOrderDiscountBase
  • Вызов: OrderDiscountBase::saveCoupon
static function saveCoupon($coupon)
{
	static::init();
	$result = new Result();

	$process = true;

	$resultData = array(
		'ID' => 0,
		'ORDER_ID' => 0,
		'ORDER_DISCOUNT_ID' => 0,
		'COUPON' => '',
		'TYPE' => 0,
		'COUPON_ID' => 0,
		'DATA' => array()
	);

	if (empty($coupon) || !is_array($coupon))
	{
		$process = false;
		$result->addError(new MainEntityEntityError(
			Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_EMPTY_COUPON'),
			self::ERROR_ID
		));
	}
	if ($process)
	{
		if (empty($coupon['ORDER_DISCOUNT_ID']) || (int)$coupon['ORDER_DISCOUNT_ID'] <= 0)
		{
			$process = false;
			$result->addError(new MainEntityEntityError(
				Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_EMPTY_COUPON'),
				self::ERROR_ID
			));
		}
		if (empty($coupon['COUPON']))
		{
			$process = false;
			$result->addError(new MainEntityEntityError(
				Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_COUPON_CODE_ABSENT'),
				self::ERROR_ID
			));
		}
		if (!isset($coupon['TYPE']))
		{
			$process = false;
			$result->addError(new MainEntityEntityError(
				Loc::getMessage(
					'SALE_ORDER_DISCOUNT_ERR_COUPON_TYPE_ABSENT',
					array('#COUPON#' => $coupon['COUPON'])
				),
				self::ERROR_ID
			));
		}
	}

	if ($process)
	{
		$validateResult = static::validateCoupon($coupon);
		if (!$validateResult->isSuccess())
		{
			$process = false;
			$result->addErrors($validateResult->getErrors());
		}
		unset($validateResult);
	}

	if ($process)
	{
		$iterator = static::getOrderCouponIterator(array(
			'select' => array('*'),
			'filter' => array('=COUPON' => $coupon['COUPON'], '=ORDER_ID' => $coupon['ORDER_ID'])
		));
		if ($row = $iterator->fetch())
		{
			$resultData = $row;
		}
		else
		{
			$internalResult = static::addCoupon($coupon);
			if ($internalResult->isSuccess())
			{
				$resultData = $internalResult->getData();
				$resultData['ID'] = $internalResult->getId();
			}
			else
			{
				$process = false;
				$result->addErrors($internalResult->getErrors());
			}
			unset($internalResult);
		}
		unset($row, $iterator);
	}

	if ($process)
	{
		$result->setId($resultData['ID']);
		$result->setData($resultData);
	}
	unset($process, $resultData);

	return $result;
}