AddPickupsTabObserver.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\Observer\AdminLayout;
  6. use Magento\Framework\Event\Observer;
  7. use Magento\Framework\Event\ObserverInterface;
  8. use Magento\Framework\Registry;
  9. use Magento\Sales\Api\Data\OrderInterface;
  10. use Temando\Shipping\Model\Shipping\Carrier;
  11. /**
  12. * Add pickups tab for temando orders.
  13. *
  14. * @package Temando\Shipping\Observer
  15. * @author Christoph Aßmann <christoph.assmann@netresearch.de>
  16. * @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  17. * @link https://www.temando.com/
  18. */
  19. class AddPickupsTabObserver implements ObserverInterface
  20. {
  21. /**
  22. * @var Registry
  23. */
  24. private $registry;
  25. /**
  26. * AddPickupTabObserver constructor.
  27. * @param Registry $registry
  28. */
  29. public function __construct(Registry $registry)
  30. {
  31. $this->registry = $registry;
  32. }
  33. /**
  34. * Append an additional tab block if the current order is a Temando order.
  35. *
  36. * - event: layout_load_before
  37. *
  38. * @param Observer $observer
  39. * @return void
  40. */
  41. public function execute(Observer $observer)
  42. {
  43. $applicableActions = [
  44. 'sales_order_view',
  45. ];
  46. $action = $observer->getData('full_action_name');
  47. if (!in_array($action, $applicableActions)) {
  48. // not the order details page
  49. return;
  50. }
  51. /** @var \Magento\Sales\Model\Order $order */
  52. $order = $this->registry->registry('current_order');
  53. if (!$order instanceof OrderInterface) {
  54. return;
  55. }
  56. if ($order->getIsVirtual() || !$order->getData('shipping_method')) {
  57. return;
  58. }
  59. $shippingMethod = $order->getShippingMethod(true);
  60. if ($shippingMethod->getData('carrier_code') !== Carrier::CODE) {
  61. return;
  62. }
  63. /** @var \Magento\Framework\View\Layout $layout */
  64. $layout = $observer->getData('layout');
  65. $layout->getUpdate()->addHandle('temando_order_pickups_tab');
  66. }
  67. }