• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
  • Класс: BitrixSaleProviderBase
  • Вызов: ProviderBase::reserveBasketItem
static function reserveBasketItem(BasketItem $basketItem, $quantity)
{
	$result = new Result();

	$provider = $basketItem->getProvider();

	/** @var Basket $basket */
	if (!$basket = $basketItem->getCollection())
	{
		throw new ObjectNotFoundException('Entity "Basket" not found');
	}

	/** @var Order $order */
	if (!$order = $basket->getOrder())
	{
		throw new ObjectNotFoundException('Entity "Order" not found');
	}

	$r = static::reserveProduct($provider, $basketItem->getProductId(), $quantity);

	if ($r->hasWarnings() || !$r->isSuccess())
	{
		if (!$r->isSuccess())
		{
			$result->addWarnings($r->getErrors());
		}

		if ($r->hasWarnings())
		{
			$result->addWarnings($r->getWarnings());
		}

		/** @var Basket $basket */
		if (!$basket = $basketItem->getCollection())
		{
			throw new ObjectNotFoundException('Entity "Basket" not found');
		}

		if ($order = $basket->getOrder())
		{
			/** @var ShipmentCollection $shipmentCollection */
			if (!$shipmentCollection = $order->getShipmentCollection())
			{
				throw new ObjectNotFoundException('Entity "ShipmentCollection" not found');
			}

			/** @var Shipment $shipment */
			foreach ($shipmentCollection as $shipment)
			{
				/** @var ShipmentItemCollection $shipmentItemCollection */
				if (!$shipmentItemCollection = $shipment->getShipmentItemCollection())
				{
					throw new ObjectNotFoundException('Entity "ShipmentItemCollection" not found');
				}

				if($shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode()))
				{
					EntityMarker::addMarker($order, $shipment, $result);
					if (!$shipment->isSystem())
					{
						$shipment->setField('MARKED', 'Y');
					}
				}
			}
		}
	}

	return $result;
}