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