SetConversionValueObserver.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /**
  3. * Google AdWords module observer
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\GoogleAdwords\Observer;
  9. use Magento\Framework\Event\ObserverInterface;
  10. class SetConversionValueObserver implements ObserverInterface
  11. {
  12. /**
  13. * @var \Magento\GoogleAdwords\Helper\Data
  14. */
  15. protected $_helper;
  16. /**
  17. * @var \Magento\Sales\Model\ResourceModel\Order\Collection
  18. */
  19. protected $_collection;
  20. /**
  21. * Constructor
  22. *
  23. * @param \Magento\GoogleAdwords\Helper\Data $helper
  24. * @param \Magento\Framework\Registry $registry
  25. * @param \Magento\Sales\Model\ResourceModel\Order\Collection $collection
  26. */
  27. public function __construct(
  28. \Magento\GoogleAdwords\Helper\Data $helper,
  29. \Magento\Framework\Registry $registry,
  30. \Magento\Sales\Model\ResourceModel\Order\Collection $collection
  31. ) {
  32. $this->_helper = $helper;
  33. $this->_collection = $collection;
  34. $this->_registry = $registry;
  35. }
  36. /**
  37. * Set base grand total of order to registry
  38. *
  39. * @param \Magento\Framework\Event\Observer $observer
  40. * @return \Magento\GoogleAdwords\Observer\SetConversionValueObserver
  41. */
  42. public function execute(\Magento\Framework\Event\Observer $observer)
  43. {
  44. if (!($this->_helper->isGoogleAdwordsActive() && $this->_helper->isDynamicConversionValue())) {
  45. return $this;
  46. }
  47. $orderIds = $observer->getEvent()->getOrderIds();
  48. if (!$orderIds || !is_array($orderIds)) {
  49. return $this;
  50. }
  51. $this->_collection->addFieldToFilter('entity_id', ['in' => $orderIds]);
  52. $conversionValue = 0;
  53. $conversionCurrency = false;
  54. $sendOrderCurrency = $this->_helper->hasSendConversionValueCurrency();
  55. foreach ($this->_collection as $order) {
  56. /** @var $order \Magento\Sales\Api\Data\OrderInterface */
  57. $conversionValue += $sendOrderCurrency ? $order->getGrandTotal() : $order->getBaseGrandTotal();
  58. $conversionCurrency = $sendOrderCurrency ? $order->getOrderCurrencyCode() : false;
  59. }
  60. $this->_registry->register(
  61. \Magento\GoogleAdwords\Helper\Data::CONVERSION_VALUE_CURRENCY_REGISTRY_NAME,
  62. $conversionCurrency
  63. );
  64. $this->_registry->register(
  65. \Magento\GoogleAdwords\Helper\Data::CONVERSION_VALUE_REGISTRY_NAME,
  66. $conversionValue
  67. );
  68. return $this;
  69. }
  70. }