| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\CatalogInventory\Observer;
 
- use Magento\Catalog\Model\Product;
 
- use Magento\CatalogInventory\Api\Data\StockItemInterface;
 
- use Magento\CatalogInventory\Model\Stock\Item;
 
- use Magento\Framework\Event\ObserverInterface;
 
- use Magento\Framework\Event\Observer as EventObserver;
 
- /**
 
-  * Prepares stock data for saving
 
-  *
 
-  * @deprecated 100.2.0 Stock data should be processed using the module API
 
-  * @see StockItemInterface when you want to change the stock data
 
-  * @see StockStatusInterface when you want to read the stock data for representation layer (storefront)
 
-  * @see StockItemRepositoryInterface::save as extension point for customization of saving process
 
-  */
 
- class ProcessInventoryDataObserver implements ObserverInterface
 
- {
 
-     /**
 
-      * Stock Registry
 
-      *
 
-      * @var \Magento\CatalogInventory\Api\StockRegistryInterface
 
-      */
 
-     private $stockRegistry;
 
-     /**
 
-      * Construct
 
-      *
 
-      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
 
-      */
 
-     public function __construct(
 
-         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
 
-     ) {
 
-         $this->stockRegistry = $stockRegistry;
 
-     }
 
-     /**
 
-      * Process stock item data
 
-      *
 
-      * @param EventObserver $observer
 
-      * @return void
 
-      */
 
-     public function execute(EventObserver $observer)
 
-     {
 
-         $product = $observer->getEvent()->getProduct();
 
-         $this->processStockData($product);
 
-     }
 
-     /**
 
-      * Process stock item data
 
-      *
 
-      * Synchronize stock data from different sources (stock_data, quantity_and_stock_status, StockItem) and set it to
 
-      * stock_data key
 
-      *
 
-      * @param Product $product
 
-      * @return void
 
-      */
 
-     private function processStockData(Product $product)
 
-     {
 
-         $quantityAndStockStatus = $product->getData('quantity_and_stock_status');
 
-         if (is_array($quantityAndStockStatus)) {
 
-             /** @var Item $stockItem */
 
-             $stockItem = $this->stockRegistry->getStockItem($product->getId(), $product->getStore()->getWebsiteId());
 
-             $quantityAndStockStatus = $this->prepareQuantityAndStockStatus($stockItem, $quantityAndStockStatus);
 
-             if ($quantityAndStockStatus) {
 
-                 $this->setStockDataToProduct($product, $stockItem, $quantityAndStockStatus);
 
-             }
 
-         }
 
-     }
 
-     /**
 
-      * Prepare quantity_and_stock_status data
 
-      *
 
-      * Remove not changed values from quantity_and_stock_status data
 
-      * Set null value for qty if passed empty
 
-      *
 
-      * @param StockItemInterface $stockItem
 
-      * @param array $quantityAndStockStatus
 
-      * @return array
 
-      */
 
-     private function prepareQuantityAndStockStatus(StockItemInterface $stockItem, array $quantityAndStockStatus)
 
-     {
 
-         $stockItemId = $stockItem->getItemId();
 
-         if (null !== $stockItemId) {
 
-             if (isset($quantityAndStockStatus['is_in_stock'])
 
-                 && $stockItem->getIsInStock() == $quantityAndStockStatus['is_in_stock']
 
-             ) {
 
-                 unset($quantityAndStockStatus['is_in_stock']);
 
-             }
 
-             if (array_key_exists('qty', $quantityAndStockStatus)
 
-                 && $stockItem->getQty() == $quantityAndStockStatus['qty']
 
-             ) {
 
-                 unset($quantityAndStockStatus['qty']);
 
-             }
 
-         }
 
-         if (array_key_exists('qty', $quantityAndStockStatus) && $quantityAndStockStatus['qty'] === '') {
 
-             $quantityAndStockStatus['qty'] = null;
 
-         }
 
-         return $quantityAndStockStatus;
 
-     }
 
-     /**
 
-      * Set stock data to product
 
-      *
 
-      * First of all we take stock_data data, replace it from quantity_and_stock_status data (if was changed) and finally
 
-      * replace it with data from Stock Item object (only if Stock Item was changed)
 
-      *
 
-      * @param Product $product
 
-      * @param Item $stockItem
 
-      * @param array $quantityAndStockStatus
 
-      * @return void
 
-      */
 
-     private function setStockDataToProduct(Product $product, Item $stockItem, array $quantityAndStockStatus)
 
-     {
 
-         $stockData = array_replace((array)$product->getData('stock_data'), $quantityAndStockStatus);
 
-         if ($stockItem->hasDataChanges()) {
 
-             $stockData = array_replace($stockData, $stockItem->getData());
 
-         }
 
-         $product->setData('stock_data', $stockData);
 
-     }
 
- }
 
 
  |