- Модуль: 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;
}