• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/shipmentitemcollection.php
  • Класс: BitrixSaleShipmentItemCollection
  • Вызов: ShipmentItemCollection::addBundleToCollection
private function addBundleToCollection(BasketItem $basketItem)
{
	$result = new Result();

	/** @var Basket $bundleCollection */
	if (!$bundleCollection = $basketItem->getBundleCollection())
	{
		throw new MainObjectNotFoundException('Entity "BundleCollection" not found');
	}

	if ($bundleCollection->getOrder() === null)
	{
		/** @var Basket $basketCollection */
		if ($basketCollection = $basketItem->getCollection())
		{
			if ($order = $basketCollection->getOrder())
			{
				$bundleCollection->setOrder($order);
			}
		}
	}

	/** @var Shipment $shipment */
	$shipment = $this->getShipment();

	/** @var ShipmentCollection $shipmentCollection */
	if (!$shipmentCollection = $shipment->getCollection())
	{
		throw new MainObjectNotFoundException('Entity "ShipmentCollection" not found');
	}

	/** @var Shipment $systemShipment */
	if (!$systemShipment = $shipmentCollection->getSystemShipment())
	{
		throw new MainObjectNotFoundException('Entity "System Shipment" not found');
	}

	/** @var ShipmentItemCollection $systemShipmentItemCollection */
	if (!$systemShipmentItemCollection = $systemShipment->getShipmentItemCollection())
	{
		throw new MainObjectNotFoundException('Entity "ShipmentItemCollection" not found');
	}

	$baseQuantity = $basketItem->getQuantity();

	/** @var ShipmentItem $systemShipmentItem */
	if ($systemShipmentItem = $systemShipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode()))
	{
		$baseQuantity = $systemShipmentItem->getQuantity();
	}

	$bundleBaseQuantity = $basketItem->getBundleBaseQuantity();

	/** @var BasketItem $bundleBasketItem */
	foreach ($bundleCollection as $bundleBasketItem)
	{

		if ($this->isExistsBasketItem($bundleBasketItem))
		{
			continue;
		}

		$bundleProductId = $bundleBasketItem->getProductId();

		if (!isset($bundleBaseQuantity[$bundleProductId]))
			throw new MainArgumentOutOfRangeException("bundle product id");

		$quantity = $bundleBaseQuantity[$bundleProductId] * $baseQuantity;

		if ($quantity == 0)
			continue;

		/** @var ShipmentItem $itemClassName */
		$itemClassName = static::getItemCollectionClassName();
		$shipmentItemBundle = $itemClassName::create($this, $bundleBasketItem);
		$this->addItem($shipmentItemBundle);



		if ($shipment->isSystem())
		{
			$shipmentItemBundle->setFieldNoDemand('QUANTITY', $quantity);
		}
		else
		{
			$r = $shipmentItemBundle->setQuantity($quantity);
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}
		}
	}

	return $result;
}