AssignOrderToCustomerObserver.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Sales\Observer;
  8. use Magento\Customer\Api\Data\CustomerInterface;
  9. use Magento\Framework\Event\Observer;
  10. use Magento\Framework\Event\ObserverInterface;
  11. use Magento\Sales\Api\OrderRepositoryInterface;
  12. /**
  13. * Assign order to customer created after issuing guest order.
  14. */
  15. class AssignOrderToCustomerObserver implements ObserverInterface
  16. {
  17. /**
  18. * @var OrderRepositoryInterface
  19. */
  20. private $orderRepository;
  21. /**
  22. * @param OrderRepositoryInterface $orderRepository
  23. */
  24. public function __construct(OrderRepositoryInterface $orderRepository)
  25. {
  26. $this->orderRepository = $orderRepository;
  27. }
  28. /**
  29. * @inheritdoc
  30. */
  31. public function execute(Observer $observer)
  32. {
  33. $event = $observer->getEvent();
  34. /** @var CustomerInterface $customer */
  35. $customer = $event->getData('customer_data_object');
  36. /** @var array $delegateData */
  37. $delegateData = $event->getData('delegate_data');
  38. if (array_key_exists('__sales_assign_order_id', $delegateData)) {
  39. $orderId = $delegateData['__sales_assign_order_id'];
  40. $order = $this->orderRepository->get($orderId);
  41. if (!$order->getCustomerId()) {
  42. //assign customer info to order after customer creation.
  43. $order->setCustomerId($customer->getId())
  44. ->setCustomerIsGuest(0)
  45. ->setCustomerEmail($customer->getEmail())
  46. ->setCustomerFirstname($customer->getFirstname())
  47. ->setCustomerLastname($customer->getLastname())
  48. ->setCustomerMiddlename($customer->getMiddlename())
  49. ->setCustomerPrefix($customer->getPrefix())
  50. ->setCustomerSuffix($customer->getSuffix())
  51. ->setCustomerGroupId($customer->getGroupId());
  52. $this->orderRepository->save($order);
  53. }
  54. }
  55. }
  56. }