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

	$basketItem = $shipmentItem->getBasketItem();
	/** @var BasketItemCollection $basket */
	$basket = $basketItem->getCollection();
	/** @var SaleOrder $order */
	$order = $basket->getOrder();

	$allAllowedQuantity = $this->getQuantityBasketItemFromShipmentCollection($basketItem);

	$deltaQuantity = $params['AMOUNT'] - $shipmentItem->getQuantity();

	if($deltaQuantity < 0)
	{
		$this->setQuantityShipmentItem($shipmentItem, 0, abs($deltaQuantity));
	}
	elseif($deltaQuantity > 0)
	{
		if($allAllowedQuantity >= $params['AMOUNT'])
		{
			$systemShipment = $order->getShipmentCollection()->getSystemShipment();
			$systemBasketQuantity = $systemShipment->getBasketItemQuantity($basketItem);

			if($systemBasketQuantity >= $deltaQuantity)
			{
				$this->setQuantityShipmentItem($shipmentItem, $params['AMOUNT'], $shipmentItem->getQuantity());
			}
			else
			{
				$needQuantity = $deltaQuantity - $systemBasketQuantity;

				$r = $this->synchronizeQuantityShipmentItems($shipmentItem, $needQuantity);
				if($r->isSuccess())
				{
					$this->setQuantityShipmentItem($shipmentItem, $params['AMOUNT'], $shipmentItem->getQuantity());
				}
			}
		}
		else
		{
			$r->addError(new BitrixMainError('Attempt to increase the quantity of goods in shipment to a quantity that exceeds not shipped in the order.'));
		}
	}
	return $r;
}