• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/basketcompatibility.php
  • Класс: BitrixSaleCompatibleBasketCompatibility
  • Вызов: BasketCompatibility::setBasketFields
static function setBasketFields(array $list)
{
	$result = new SaleResult();

	$order = null;
	$basket = null;
	$basketItem = null;
	$orderId = null;

	foreach ($list as $basketId => $fields)
	{
		$basketItemResult = static::loadEntityFromBasket($basketId);
		if ($basketItemResult->isSuccess())
		{
			$basketItemResultList = $basketItemResult->getData();
			if (isset($basketItemResultList['BASKET']))
			{
				/** @var SaleBasket $basket */
				$basket = $basketItemResultList['BASKET'];
			}

			if (isset($basketItemResultList['BASKET_ITEM']))
			{
				/** @var SaleBasketItem $basketItem */
				$basketItem = $basketItemResultList['BASKET_ITEM'];
			}

			if (isset($basketItemResultList['ORDER']))
			{
				/** @var SaleOrder $order */
				$order = $basketItemResultList['ORDER'];
			}
		}

		if ($basketItem === null)
		{
			$result->addError(new SaleResultError(MainLocalizationLoc::getMessage('SALE_BASKET_COMPATIBLE_BASKET_ITEM_NOT_FOUND'), 'BASKET_ITEM_NOT_FOUND'));
			return $result;
		}

		if ($orderId === null && isset($fields['ORDER_ID']) && intval($fields['ORDER_ID']) > 0)
		{
			$orderId = (int)$fields['ORDER_ID'];
		}

		if (isset($fields['ORDER_ID']))
			unset($fields['ORDER_ID']);

		$basketItem->setFields($fields);

		if ($order === null && intval($orderId) > 0)
		{
			$registry = SaleRegistry::getInstance(static::getRegistryType());
			$orderClassName = $registry->getOrderClassName();
			/** @var SaleOrder $order */
			$order = $orderClassName::load($orderId);
		}

	}

	if ($order === null)
	{
		return $result;
	}

	if ($order !== null && $basket !== null)
	{
		$r = static::appendBasketToOrder($order, $basket->getOrderableItems());
		if(!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
		}
	}

	/** @var SaleResult $r */
	$r = $order->save();
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
	}
	return $result;
}