• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/exchange/entity/shipmentimport.php
  • Класс: BitrixSaleExchangeEntityShipmentImport
  • Вызов: ShipmentImport::synchronizeQuantityShipmentItems
public function synchronizeQuantityShipmentItems(SaleBasketItem $basketItem, $needQuantity)
    {
        $result = new SaleResult();

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

        $entity = $this->getEntity();

        /** @var SaleOrder $order */
        $order = $this->getParentEntity();
        $shipmentCollection = $order->getShipmentCollection();

        /** @var SaleShipment $entity */
        foreach ($shipmentCollection as $shipment)
        {
            /** @var SaleShipment $shipment */
            if(!empty($entity) && $entity->getId() == $shipment->getId())
                continue;

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

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

            $shipmentItem = static::getShipmentItem($shipment, $basketItem);

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

            $this->setCollisions(EntityCollisionType::ShipmentBasketItemsModify, $shipment);

            if($needQuantity == 0)
                break;
        }

        if($needQuantity != 0)
            $result->addError(new Error(GetMessage('SALE_EXCHANGE_ENTITY_SHIPMENT_SYNCHRONIZE_QUANTITY_ERROR'), 'SYNCHRONIZE_QUANTITY_ERROR'));

        return $result;
    }