- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discount/migration/orderdiscountmigrator.php
- Класс: BitrixSaleDiscountMigrationOrderDiscountMigrator
- Вызов: OrderDiscountMigrator::saveMigrateDiscount
static function saveMigrateDiscount(array $discountData)
{
$result = new SaleResult();
$process = true;
$hash = false;
$resultData = array();
$fields = SaleInternalsOrderDiscountTable::prepareDiscountData($discountData);
if (empty($fields) || !is_array($fields))
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_MIGRATOR_ERR_BAD_PREPARE_DISCOUNT'),
self::ERROR_ID
));
}
if ($process)
{
$hash = SaleInternalsOrderDiscountTable::calculateHash($fields);
if ($hash === false)
{
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_MIGRATOR_ERR_BAD_DISCOUNT_HASH'),
self::ERROR_ID
));
}
}
if ($process)
{
if (!isset(self::$migrateDiscountsCache[$hash]))
{
$orderDiscountIterator = SaleInternalsOrderDiscountTable::getList(array(
'select' => array('*'),
'filter' => array('=DISCOUNT_HASH' => $hash)
));
if ($orderDiscount = $orderDiscountIterator->fetch())
self::$migrateDiscountsCache[$hash] = $orderDiscount;
unset($orderDiscount, $orderDiscountIterator);
}
if (!empty(self::$migrateDiscountsCache[$hash]))
{
$resultData = self::$migrateDiscountsCache[$hash];
$resultData['ID'] = (int)$resultData['ID'];
$resultData['NAME'] = (string)$resultData['NAME'];
$resultData['ORDER_DISCOUNT_ID'] = $resultData['ID'];
$result->setId($resultData['ID']);
}
else
{
$fields['DISCOUNT_HASH'] = $hash;
$fields['ACTIONS_DESCR'] = array();
if (isset($discountData['ACTIONS_DESCR']))
$fields['ACTIONS_DESCR'] = $discountData['ACTIONS_DESCR'];
$tableResult = SaleInternalsOrderDiscountTable::add($fields);
if ($tableResult->isSuccess())
{
$resultData = $fields;
$resultData['ID'] = (int)$tableResult->getId();
$resultData['NAME'] = (string)$resultData['NAME'];
$resultData['ORDER_DISCOUNT_ID'] = $resultData['ID'];
$result->setId($resultData['ID']);
}
else
{
$process = false;
$result->addErrors($tableResult->getErrors());
}
unset($tableResult, $fields);
if ($process)
{
$moduleList = SaleInternalsOrderDiscountTable::getDiscountModules($discountData);
if (!empty($moduleList))
{
$resultModule = SaleInternalsOrderModulesTable::saveOrderDiscountModules(
$resultData['ORDER_DISCOUNT_ID'],
$moduleList
);
if (!$resultModule)
{
SaleInternalsOrderDiscountTable::clearList($resultData['ORDER_DISCOUNT_ID']);
$resultData = array();
$process = false;
$result->addError(new MainEntityEntityError(
Loc::getMessage('SALE_ORDER_DISCOUNT_MIGRATOR_ERR_SAVE_DISCOUNT_MODULES'),
self::ERROR_ID
));
}
unset($resultModule);
}
unset($needDiscountModules, $moduleList);
}
}
}
if ($process)
$result->setData($resultData);
unset($resultData, $process);
return $result;
}