SaveRegisterOrderStatusBefore.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Dotdigitalgroup\Email\Observer\Sales;
  3. /**
  4. * Save original order status.
  5. */
  6. class SaveRegisterOrderStatusBefore implements \Magento\Framework\Event\ObserverInterface
  7. {
  8. /**
  9. * @var \Magento\Framework\Registry
  10. */
  11. private $registry;
  12. /**
  13. * @var \Magento\Sales\Api\Data\OrderInterfaceFactory
  14. */
  15. private $orderFactory;
  16. /**
  17. * @var \Magento\Sales\Model\Spi\OrderResourceInterface
  18. */
  19. private $orderResource;
  20. /**
  21. * SaveRegisterOrderStatusBefore constructor.
  22. *
  23. * @param \Magento\Sales\Model\Spi\OrderResourceInterface $orderResource
  24. * @param \Magento\Sales\Api\Data\OrderInterfaceFactory $orderFactory
  25. * @param \Magento\Framework\Registry $registry
  26. */
  27. public function __construct(
  28. \Magento\Sales\Model\Spi\OrderResourceInterface $orderResource,
  29. \Magento\Sales\Api\Data\OrderInterfaceFactory $orderFactory,
  30. \Magento\Framework\Registry $registry
  31. ) {
  32. $this->orderResource = $orderResource;
  33. $this->orderFactory = $orderFactory;
  34. $this->registry = $registry;
  35. }
  36. /**
  37. * @param \Magento\Framework\Event\Observer $observer
  38. *
  39. * @return $this
  40. */
  41. public function execute(\Magento\Framework\Event\Observer $observer)
  42. {
  43. $order = $observer->getEvent()->getOrder();
  44. //order is new
  45. if (!$order->getId()) {
  46. $orderStatus = $order->getStatus();
  47. } else {
  48. // the reloaded status
  49. $reloaded = $this->orderFactory->create();
  50. $this->orderResource->load($reloaded, $order->getId());
  51. $orderStatus = $reloaded->getStatus();
  52. }
  53. //register the order status before change
  54. if (!$this->registry->registry('sales_order_status_before')) {
  55. $this->registry->register(
  56. 'sales_order_status_before',
  57. $orderStatus
  58. );
  59. }
  60. return $this;
  61. }
  62. }