- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/orderdiscountbase.php
- Класс: BitrixSaleOrderDiscountBase
- Вызов: OrderDiscountBase::saveDiscount
static function saveDiscount(array $discount, $extResult = false)
{
static::init();
$result = new Result();
$extResult = ($extResult === true);
$process = true;
$internal = null;
$discountData = false;
$fields = false;
$emptyData = array(
'ID' => 0,
'DISCOUNT_ID' => 0,
'NAME' => '',
'ORDER_DISCOUNT_ID' => 0,
'ORDER_COUPON_ID' => 0,
'USE_COUPONS' => '',
'LAST_DISCOUNT' => '',
'MODULE_ID' => '',
'EDIT_PAGE_URL' => '',
'ACTIONS_DESCR' => array()
);
if ($extResult)
{
$emptyData['RAW_DATA'] = array();
$emptyData['PREPARED_DATA'] = array();
}
$resultData = $emptyData;
$config = static::getManagerConfig();
if (empty($config))
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_EMPTY_MANAGER_PARAMS'),
self::ERROR_ID
));
}
if (empty($discount) || empty($discount['MODULE_ID']))
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_EMPTY_DISCOUNT'),
self::ERROR_ID
));
}
if ($process)
{
if (!static::isNativeModule($discount['MODULE_ID']))
{
if (!static::checkDiscountProvider($discount['MODULE_ID']))
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_BAD_DISCOUNT_MODULE'),
self::ERROR_ID
));
}
else
{
$discountData = static::executeDiscountProvider(
array('MODULE_ID' => $discount['MODULE_ID'], 'METHOD' => self::PROVIDER_ACTION_PREPARE_DISCOUNT),
array($discount, $config)
);
}
}
else
{
$discountData = static::prepareData($discount);
}
if (empty($discountData) || !is_array($discountData))
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_BAD_PREPARE_DISCOUNT'),
self::ERROR_ID
));
}
}
if ($process)
{
$fields = static::normalizeDiscountFields($discountData);
if (empty($fields) || !is_array($fields))
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_BAD_PREPARE_DISCOUNT'),
self::ERROR_ID
));
}
elseif ($fields['DISCOUNT_HASH'] === null)
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_BAD_DISCOUNT_HASH'),
self::ERROR_ID
));
}
}
if ($process)
{
$existDiscount = static::searchDiscount($fields['DISCOUNT_HASH']);
if ($existDiscount === null)
{
/** @var Result $internalResult */
$internalResult = static::addDiscount($fields, $discountData);
if ($internalResult->isSuccess())
{
$existDiscount = static::searchDiscount($fields['DISCOUNT_HASH']);
}
else
{
$process = false;
$result->addErrors($internalResult->getErrors());
}
unset($internalResult);
}
if ($existDiscount !== null)
{
$resultData = $existDiscount;
$result->setId($resultData['ID']);
}
}
if ($process)
{
$resultData['EDIT_PAGE_URL'] = $discountData['EDIT_PAGE_URL'];
if ($extResult)
{
$resultData['RAW_DATA'] = $discount;
$resultData['PREPARED_DATA'] = $discountData;
}
$result->setData($resultData);
}
unset($resultData, $process);
return $result;
}