request = $request; $this->shipmentExtensionFactory = $shipmentExtensionFactory; $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; $this->getSourcesAssignedToStockOrderedByPriority = $getSourcesAssignedToStockOrderedByPriority; $this->defaultSourceProvider = $defaultSourceProvider; } /** * @param ShipmentFactory $subject * @param ShipmentInterface $shipment * @param Order $order * @return ShipmentInterface * @throws \Magento\Framework\Exception\InputException * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterCreate(ShipmentFactory $subject, ShipmentInterface $shipment, Order $order) { $sourceCode = $this->request->getParam('sourceCode'); if (empty($sourceCode)) { $websiteId = $order->getStore()->getWebsiteId(); $stockId = $this->stockByWebsiteIdResolver->execute((int)$websiteId)->getStockId(); $sources = $this->getSourcesAssignedToStockOrderedByPriority->execute((int)$stockId); //TODO: need ro rebuild this logic | create separate service if (!empty($sources) && count($sources) == 1) { $sourceCode = $sources[0]->getSourceCode(); } else { $sourceCode = $this->defaultSourceProvider->getCode(); } } $shipmentExtension = $shipment->getExtensionAttributes(); if (empty($shipmentExtension)) { $shipmentExtension = $this->shipmentExtensionFactory->create(); } $shipmentExtension->setSourceCode($sourceCode); $shipment->setExtensionAttributes($shipmentExtension); return $shipment; } }