Shipment/EventListener/AbstractShipmentListener.php
public function onUpdate(ResourceEventInterface $event)
    {
        $shipment = $this->getShipmentFromEvent($event);

        $this->preventForbiddenChange($shipment);

        // Generate number and key
        $changed = $this->generateNumber($shipment);

        $stateChanged = $this->persistenceHelper->isChanged($shipment, 'state');
        if ($stateChanged) {
            $changed |= $this->handleCompletedState($shipment);
        }

        if ($changed) {
            $this->persistenceHelper->persistAndRecompute($shipment);
        }

        if ($stateChanged) {
            $stateCs = $this->persistenceHelper->getChangeSet($shipment, 'state');

            // If shipment state has changed from non stockable to stockable
            if (ShipmentStates::hasChangedToStockable($stateCs)) {
                // For each shipment item
                foreach ($shipment->getItems() as $item) {
                    // If not scheduled for insert
                    if (!$this->persistenceHelper->isScheduledForInsert($item)) {
                        // Credit sale item stock units shipped quantity through assignments
                        $this->stockUnitAssigner->assignShipmentItem($item);
                    }
                }
            }
            // Else if shipment state has changed from stockable to non stockable
            elseif (ShipmentStates::hasChangedFromStockable($stateCs)) {
                // For each shipment item
                foreach ($shipment->getItems() as $item) {
                    // If not scheduled for remove
                    if (!$this->persistenceHelper->isScheduledForRemove($item)) {
                        // Debit sale item stock units shipped quantity through assignments
                        $this->stockUnitAssigner->detachShipmentItem($item);
                    }
                }
            }
        }

        $this->invoiceSynchronizer->synchronize($shipment);

        if ($changed || $stateChanged) {
            $this->scheduleSaleContentChangeEvent($this->getSaleFromShipment($shipment));
        }
    }
public function onUpdate(ResourceEventInterface $event)
    {
        $shipment = $this->getShipmentFromEvent($event);

        $this->preventForbiddenChange($shipment);

        // Generate number and key
        $changed = $this->generateNumber($shipment);

        $stateChanged = $this->persistenceHelper->isChanged($shipment, 'state');
        if ($stateChanged) {
            $changed |= $this->handleCompletedState($shipment);
        }

        if ($changed) {
            $this->persistenceHelper->persistAndRecompute($shipment);
        }

        if ($stateChanged) {
            $stateCs = $this->persistenceHelper->getChangeSet($shipment, 'state');

            // If shipment state has changed from non stockable to stockable
            if (ShipmentStates::hasChangedToStockable($stateCs)) {
                // For each shipment item
                foreach ($shipment->getItems() as $item) {
                    // If not scheduled for insert
                    if (!$this->persistenceHelper->isScheduledForInsert($item)) {
                        // Credit sale item stock units shipped quantity through assignments
                        $this->stockUnitAssigner->assignShipmentItem($item);
                    }
                }
            }
            // Else if shipment state has changed from stockable to non stockable
            elseif (ShipmentStates::hasChangedFromStockable($stateCs)) {
                // For each shipment item
                foreach ($shipment->getItems() as $item) {
                    // If not scheduled for remove
                    if (!$this->persistenceHelper->isScheduledForRemove($item)) {
                        // Debit sale item stock units shipped quantity through assignments
                        $this->stockUnitAssigner->detachShipmentItem($item);
                    }
                }
            }
        }

        $this->invoiceSynchronizer->synchronize($shipment);

        if ($changed || $stateChanged) {
            $this->scheduleSaleContentChangeEvent($this->getSaleFromShipment($shipment));
        }
    }
Update event handler.

@param ResourceEventInterface $event