• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/transferprovidercompatibility.php
  • Класс: BitrixSaleInternalsTransferProviderCompatibility
  • Вызов: TransferProviderCompatibility::tryShip
public function tryShip(array $products)
{
	MainLoader::includeModule('catalog');
	$result = new SaleResult();

	$tryShipmentItemList = array();
	$reservedQuantityList = array();
	$shipmentItemParents = array();

	$shipmentItemList = static::getShipmentItemListFromProducts($products);
	if (!empty($shipmentItemList))
	{
		/** @var SaleShipmentItem $shipmentItem */
		foreach ($shipmentItemList as $shipmentItem)
		{
			/** @var SaleShipmentItemCollection $shipmentItemCollection */
			$shipmentItemCollection = $shipmentItem->getCollection();
			if (!$shipmentItemCollection)
			{
				throw new MainObjectNotFoundException('Entity "ShipmentItemCollection" not found');
			}

			$shipment = $shipmentItemCollection->getShipment();
			if (!$shipment)
			{
				throw new MainObjectNotFoundException('Entity "Shipment" not found');
			}

			$shipmentItemParents[$shipmentItem->getInternalIndex()] = $shipment;

			$basketItem = $shipmentItem->getBasketItem();

			$provider = $basketItem->getProviderEntity();

			if ($provider instanceof CatalogProductCatalogProvider)
			{
				continue;
			}

			if ($shipment->needShip() === SaleInternalsCatalogProvider::SALE_TRANSFER_PROVIDER_SHIPMENT_NEED_SHIP
				&& !array_key_exists($shipment->getInternalIndex(), $reservedQuantityList))
			{
				$reservedQuantityList[$shipment->getInternalIndex()] = static::getReservedQuantity($shipment);
			}

			$tryShipmentItemList[$shipmentItem->getInternalIndex()] = $shipmentItem;
		}
	}

	if (!empty($tryShipmentItemList))
	{

		$reservedQuantityList = array();

		$r = SaleProvider::tryShipmentItemList($tryShipmentItemList);

		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
		}

		$data = $r->getData();
		if (!empty($data) && is_array($data))
		{
			/**
			 * @var string $basketCode
			 * @var SaleResult $resultTryShipment
			 */
			foreach ($data as $basketCode => $resultTryShipment)
			{
				if (!$resultTryShipment->isSuccess())
				{
					$result->addErrors($resultTryShipment->getErrors());
				}
			}
		}

		if ($result->isSuccess())
		{
			if (!empty($reservedQuantityList))
			{
				static::setReservedQuantityToShipmentItem($tryShipmentItemList, $reservedQuantityList);
			}

			$resultList = static::createListFromTryShipmentResult($tryShipmentItemList, $r);
		}
	}

	if (!empty($resultList))
	{
		$result->addData(
			array(
				'TRY_SHIP_PRODUCTS_LIST' => $resultList
			)
		);
	}

	return $result;
}