SalesEventOrderItemToQuoteItemObserver.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\GiftMessage\Observer;
  7. use Magento\Framework\Event\ObserverInterface;
  8. /**
  9. * Gift Message Observer Model
  10. *
  11. * @author Magento Core Team <core@magentocommerce.com>
  12. */
  13. class SalesEventOrderItemToQuoteItemObserver implements ObserverInterface
  14. {
  15. /**
  16. * Gift message message
  17. *
  18. * @var \Magento\GiftMessage\Helper\Message|null
  19. */
  20. protected $_giftMessageMessage = null;
  21. /**
  22. * @var \Magento\GiftMessage\Model\MessageFactory
  23. */
  24. protected $_messageFactory;
  25. /**
  26. * @param \Magento\GiftMessage\Model\MessageFactory $messageFactory
  27. * @param \Magento\GiftMessage\Helper\Message $giftMessageMessage
  28. */
  29. public function __construct(
  30. \Magento\GiftMessage\Model\MessageFactory $messageFactory,
  31. \Magento\GiftMessage\Helper\Message $giftMessageMessage
  32. ) {
  33. $this->_messageFactory = $messageFactory;
  34. $this->_giftMessageMessage = $giftMessageMessage;
  35. }
  36. /**
  37. * Duplicates giftmessage from order item to quote item on import or reorder
  38. *
  39. * @param \Magento\Framework\Event\Observer $observer
  40. * @return $this
  41. */
  42. public function execute(\Magento\Framework\Event\Observer $observer)
  43. {
  44. /** @var $orderItem \Magento\Sales\Model\Order\Item */
  45. $orderItem = $observer->getEvent()->getOrderItem();
  46. // Do not import giftmessage data if order is reordered
  47. $order = $orderItem->getOrder();
  48. if ($order && $order->getReordered()) {
  49. return $this;
  50. }
  51. $isAvailable = $this->_giftMessageMessage->isMessagesAllowed(
  52. 'order_item',
  53. $orderItem,
  54. $orderItem->getStoreId()
  55. );
  56. if (!$isAvailable) {
  57. return $this;
  58. }
  59. /** @var $quoteItem \Magento\Quote\Model\Quote\Item */
  60. $quoteItem = $observer->getEvent()->getQuoteItem();
  61. if ($giftMessageId = $orderItem->getGiftMessageId()) {
  62. $giftMessage = $this->_messageFactory->create()->load($giftMessageId)->setId(null)->save();
  63. $quoteItem->setGiftMessageId($giftMessage->getId());
  64. }
  65. return $this;
  66. }
  67. }