• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/saveorderaction.php
  • Класс: BitrixSaleControllerActionEntitySaveOrderAction
  • Вызов: SaveOrderAction::setBasket
private function setBasket(SaleOrder $order, int $fuserId): SaleResult
{
	$result = new SaleResult();

	$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);

	/** @var SaleBasket $basketClassName */
	$basketClassName = $registry->getBasketClassName();
	$basket = $basketClassName::loadItemsForFUser($fuserId, $order->getSiteId());

	$refreshResult = $basket->refresh();
	if ($refreshResult->isSuccess())
	{
		$saveBasketResult = $basket->save();
		if (!$saveBasketResult->isSuccess())
		{
			$result->addErrors($refreshResult->getErrors());
		}
	}
	else
	{
		$result->addErrors($refreshResult->getErrors());
	}

	if (!$result->isSuccess(true))
	{
		return $result;
	}

	$availableBasket = $basket->getOrderableItems();
	if ($availableBasket && !$availableBasket->isEmpty())
	{
		$setBasketResult = $order->setBasket($availableBasket);
		if (!$setBasketResult->isSuccess())
		{
			$result->addErrors($setBasketResult->getErrors());
		}
	}
	elseif ($availableBasket)
	{
		$result->addError(new MainError('basket is empty'));
	}
	else
	{
		$result->addError(new MainError('basket is null'));
	}

	return $result;
}