CancelOrderItemObserver.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CatalogInventory\Observer;
  7. use Magento\CatalogInventory\Api\StockManagementInterface;
  8. use Magento\CatalogInventory\Model\Configuration;
  9. use Magento\Framework\Event\Observer as EventObserver;
  10. use Magento\Framework\Event\ObserverInterface;
  11. /**
  12. * Catalog inventory module observer
  13. */
  14. class CancelOrderItemObserver implements ObserverInterface
  15. {
  16. /**
  17. * @var \Magento\CatalogInventory\Model\Configuration
  18. */
  19. protected $configuration;
  20. /**
  21. * @var StockManagementInterface
  22. */
  23. protected $stockManagement;
  24. /**
  25. * @var \Magento\Catalog\Model\Indexer\Product\Price\Processor
  26. */
  27. protected $priceIndexer;
  28. /**
  29. * @param Configuration $configuration
  30. * @param StockManagementInterface $stockManagement
  31. * @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer
  32. */
  33. public function __construct(
  34. Configuration $configuration,
  35. StockManagementInterface $stockManagement,
  36. \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer
  37. ) {
  38. $this->configuration = $configuration;
  39. $this->stockManagement = $stockManagement;
  40. $this->priceIndexer = $priceIndexer;
  41. }
  42. /**
  43. * Cancel order item
  44. *
  45. * @param EventObserver $observer
  46. * @return void
  47. */
  48. public function execute(EventObserver $observer)
  49. {
  50. /** @var \Magento\Sales\Model\Order\Item $item */
  51. $item = $observer->getEvent()->getItem();
  52. $children = $item->getChildrenItems();
  53. $qty = $item->getQtyOrdered() - max($item->getQtyShipped(), $item->getQtyInvoiced()) - $item->getQtyCanceled();
  54. if ($item->getId() && $item->getProductId() && empty($children) && $qty && $this->configuration
  55. ->getCanBackInStock()) {
  56. $this->stockManagement->backItemQty($item->getProductId(), $qty, $item->getStore()->getWebsiteId());
  57. }
  58. $this->priceIndexer->reindexRow($item->getProductId());
  59. }
  60. }