• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/order/builder/orderbuilderrest.php
  • Класс: BitrixSaleHelpersOrderBuilderOrderBuilderRest
  • Вызов: OrderBuilderRest::synchronizeQuantityShipmentItems
public function synchronizeQuantityShipmentItems(ShipmentItem $shipmentItem, $needQuantity)
{
	$result = new Result();

	if(intval($needQuantity) <= 0)
	{
		return $result;
	}

	$basketItem = $shipmentItem->getBasketItem();
	/** @var ShipmentItemCollection $shipmentItemCollection */
	$shipmentItemCollection = $shipmentItem->getCollection();
	$parentEntity = $shipmentItemCollection->getShipment();

	foreach ($parentEntity->getCollection() as $shipment)
	{
		/** @var Shipment $shipment */
		if($parentEntity->getId() == $shipment->getId())
			continue;

		if($shipment->isShipped() || $shipment->isSystem())
			continue;

		$basketQuantity = $shipment->getBasketItemQuantity($basketItem);
		if(empty($basketQuantity))
			continue;

		$shipmentItem = $shipment->getShipmentItemCollection()->getItemByBasketCode($basketItem->getBasketCode());

		if($basketQuantity >= $needQuantity)
		{
			$this->setQuantityShipmentItem($shipmentItem, 0, $needQuantity);
			$needQuantity = 0;
		}
		else
		{
			$this->setQuantityShipmentItem($shipmentItem, 0, $basketQuantity);
			$needQuantity -= $basketQuantity;
		}

		if($needQuantity == 0)
			break;
	}

	if($needQuantity != 0)
		$result->addError(new Error('Not enough unallocated goods in shipments'));

	return $result;
}