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