- Модуль: 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;
}