Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AssignSourceCodeToShipmentPlugin.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
14 use Magento\Sales\Api\Data\ShipmentExtensionFactory;
18 
20 {
24  private $request;
25 
29  private $shipmentExtensionFactory;
30 
34  private $stockByWebsiteIdResolver;
35 
39  private $getSourcesAssignedToStockOrderedByPriority;
40 
44  private $defaultSourceProvider;
45 
53  public function __construct(
54  RequestInterface $request,
55  ShipmentExtensionFactory $shipmentExtensionFactory,
56  StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver,
57  GetSourcesAssignedToStockOrderedByPriorityInterface $getSourcesAssignedToStockOrderedByPriority,
58  DefaultSourceProviderInterface $defaultSourceProvider
59  ) {
60  $this->request = $request;
61  $this->shipmentExtensionFactory = $shipmentExtensionFactory;
62  $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver;
63  $this->getSourcesAssignedToStockOrderedByPriority = $getSourcesAssignedToStockOrderedByPriority;
64  $this->defaultSourceProvider = $defaultSourceProvider;
65  }
66 
77  {
78  $sourceCode = $this->request->getParam('sourceCode');
79  if (empty($sourceCode)) {
80  $websiteId = $order->getStore()->getWebsiteId();
81  $stockId = $this->stockByWebsiteIdResolver->execute((int)$websiteId)->getStockId();
82  $sources = $this->getSourcesAssignedToStockOrderedByPriority->execute((int)$stockId);
83  //TODO: need ro rebuild this logic | create separate service
84  if (!empty($sources) && count($sources) == 1) {
85  $sourceCode = $sources[0]->getSourceCode();
86  } else {
87  $sourceCode = $this->defaultSourceProvider->getCode();
88  }
89  }
90  $shipmentExtension = $shipment->getExtensionAttributes();
91 
92  if (empty($shipmentExtension)) {
93  $shipmentExtension = $this->shipmentExtensionFactory->create();
94  }
95  $shipmentExtension->setSourceCode($sourceCode);
96  $shipment->setExtensionAttributes($shipmentExtension);
97 
98  return $shipment;
99  }
100 }
$order
Definition: order.php:55
$sourceCode
Definition: inventory.phtml:11
__construct(RequestInterface $request, ShipmentExtensionFactory $shipmentExtensionFactory, StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, GetSourcesAssignedToStockOrderedByPriorityInterface $getSourcesAssignedToStockOrderedByPriority, DefaultSourceProviderInterface $defaultSourceProvider)
foreach($order->getItems() as $orderItem) $shipment
afterCreate(ShipmentFactory $subject, ShipmentInterface $shipment, Order $order)