• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/shipmentitem.php
  • Класс: BitrixSaleControllerShipmentItem
  • Вызов: ShipmentItem::addAction
public function addAction(array $fields)
{
	$result = new Result();

	$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);


	$basketId = $fields['BASKET_ID'];
	$shipmentId = $fields['ORDER_DELIVERY_ID'];

	unset($fields['ORDER_DELIVERY_ID'], $fields['BASKET_ID']);

	/** @var SaleBasket $basketClass */
	$basketClass = $registry->getBasketClassName();

	$r = $basketClass::getList([
		'select'=>['ORDER_ID'],
		'filter'=>['ID'=>$basketId]
	]);

	if($row = $r->fetch())
	{
		/** @var SaleOrder $orderClass */
		$orderClass = $registry->getOrderClassName();

		$order = $orderClass::load($row['ORDER_ID']);
		$basketItem = $order->getBasket()->getItemByBasketCode($basketId);
		if($basketItem instanceof BasketItem)
		{
			/** @var ShipmentCollection $collection */
			$collection = $order->getShipmentCollection();
			$shipment = $collection->getItemById($shipmentId);
			if($shipment instanceof BitrixSaleShipment)
			{
				$shipmentItemCollection = $shipment->getShipmentItemCollection();
				if($shipmentItemCollection->isExistBasketItem($basketItem) == false)
				{
					/** @var BitrixSaleShipmentItem $shipmentItem */
					$shipmentItem = $shipmentItemCollection->createItem($basketItem);
					$result = $shipmentItem->setFields($fields);
					if($result->isSuccess() && $result->hasWarnings() == false)
					{
						$r = $this->save($shipmentItem);
						if(!$r->isSuccess())
						{
							$result->addErrors($r->getErrors());
						}
					}
				}
				else
				{
					$result->addError(new Error('Duplicate entry for key [basketId, orderDeliveryId]', 201250000001));
				}
			}
			else
			{
				$result->addError(new Error('shipment not exists', 201240400002));
			}
		}
	}
	else
	{
		$result->addError(new Error('shipment not exists', 201240400003));
	}

	if(!$result->isSuccess())
	{
		$this->addErrors($result->getErrors());
		return null;
	}
	elseif($result->hasWarnings())
	{
		$this->addErrors($result->getWarnings());
		return null;
	}
	else
	{
		return ['SHIPMENT_ITEM'=>$this->get($shipmentItem)];
	}
}