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

	if (count($shipmentCollection) > 2)
	{
		return $result;
	}

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

	$baseShipment = null;

	$shipmentCollection->setMathActionOnly(true);

	if (count($shipmentCollection) == 1 && $shipmentCollection->isExistsSystemShipment())
	{
		/** @var SaleShipment $systemShipment */
		if (!$systemShipment = $shipmentCollection->getSystemShipment())
		{
			throw new MainObjectNotFoundException('Entity system "Shipment" not found');
		}

		$shipment = $shipmentCollection->createItem();
		$r = $shipmentCollection->cloneShipment($systemShipment, $shipment);
		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
			return $result;
		}
	}


	/** @var SaleShipment $shipment */
	foreach ($shipmentCollection as $shipment)
	{
		if ($shipment->isSystem() || $shipment->isShipped())
			continue;

		/** @var SaleBasketItem $basketItem */
		foreach ($basket as $basketItem)
		{
			$shipmentItemCollection = $shipment->getShipmentItemCollection();
			if (!$shipmentItem = $shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode()))
			{
				$shipmentItem = $shipmentItemCollection->createItem($basketItem);
			}

			if (!$shipmentItem)
				continue;

			/** @var SaleResult $r */
			$r = $shipmentItem->setQuantity($basketItem->getQuantity());
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}

		}

		break;
	}

	$shipmentCollection->setMathActionOnly(false);

	return $result;

}