Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SaveInventoryDataObserver.php
Go to the documentation of this file.
1 <?php
7 
16 
26 {
30  private $stockConfiguration;
31 
35  private $stockRegistry;
36 
40  private $stockItemValidator;
41 
45  private $paramListToCheck = [
46  'use_config_min_qty' => [
47  'item' => 'stock_data/min_qty',
48  'config' => 'stock_data/use_config_min_qty',
49  ],
50  'use_config_min_sale_qty' => [
51  'item' => 'stock_data/min_sale_qty',
52  'config' => 'stock_data/use_config_min_sale_qty',
53  ],
54  'use_config_max_sale_qty' => [
55  'item' => 'stock_data/max_sale_qty',
56  'config' => 'stock_data/use_config_max_sale_qty',
57  ],
58  'use_config_backorders' => [
59  'item' => 'stock_data/backorders',
60  'config' => 'stock_data/use_config_backorders',
61  ],
62  'use_config_notify_stock_qty' => [
63  'item' => 'stock_data/notify_stock_qty',
64  'config' => 'stock_data/use_config_notify_stock_qty',
65  ],
66  'use_config_enable_qty_inc' => [
67  'item' => 'stock_data/enable_qty_increments',
68  'config' => 'stock_data/use_config_enable_qty_inc',
69  ],
70  'use_config_qty_increments' => [
71  'item' => 'stock_data/qty_increments',
72  'config' => 'stock_data/use_config_qty_increments',
73  ],
74  ];
75 
81  public function __construct(
82  StockConfigurationInterface $stockConfiguration,
83  StockRegistryInterface $stockRegistry,
84  StockItemValidator $stockItemValidator = null
85  ) {
86  $this->stockConfiguration = $stockConfiguration;
87  $this->stockRegistry = $stockRegistry;
88  $this->stockItemValidator = $stockItemValidator ?: ObjectManager::getInstance()->get(StockItemValidator::class);
89  }
90 
100  public function execute(EventObserver $observer)
101  {
102  $product = $observer->getEvent()->getProduct();
103  $stockItem = $this->getStockItemToBeUpdated($product);
104 
105  if ($product->getStockData() !== null) {
106  $stockData = $this->getStockData($product);
107  $stockItem->addData($stockData);
108  }
109  $this->stockItemValidator->validate($product, $stockItem);
110  $this->stockRegistry->updateStockItemBySku($product->getSku(), $stockItem);
111  }
112 
119  private function getStockItemToBeUpdated(Product $product)
120  {
121  $extendedAttributes = $product->getExtensionAttributes();
122  $stockItem = $extendedAttributes->getStockItem();
123 
124  if ($stockItem === null) {
125  $stockItem = $this->stockRegistry->getStockItem($product->getId());
126  }
127  return $stockItem;
128  }
129 
136  private function getStockData(Product $product)
137  {
138  $stockData = $product->getStockData();
139  $stockData['product_id'] = $product->getId();
140 
141  if (!isset($stockData['website_id'])) {
142  $stockData['website_id'] = $this->stockConfiguration->getDefaultScopeId();
143  }
144  $stockData['stock_id'] = $this->stockRegistry->getStock($stockData['website_id'])->getStockId();
145 
146  foreach ($this->paramListToCheck as $dataKey => $configPath) {
147  if (null !== $product->getData($configPath['item']) && null === $product->getData($configPath['config'])) {
148  $stockData[$dataKey] = false;
149  }
150  }
151 
152  $originalQty = $product->getData('stock_data/original_inventory_qty');
153  if (strlen($originalQty) > 0) {
154  $stockData['qty_correction'] = (isset($stockData['qty']) ? $stockData['qty'] : 0)
155  - $originalQty;
156  }
157  return $stockData;
158  }
159 }
__construct(StockConfigurationInterface $stockConfiguration, StockRegistryInterface $stockRegistry, StockItemValidator $stockItemValidator=null)
$stockData
Definition: products.php:27