Alert in Sales Order Save After Observer – How to Implement in Magento 2

event-observermagento2

I am triggering sales_order_save_after event after order status has been completed.

public function execute(Observer $observer) {
    $order = $observer->getEvent()->getOrder();
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $checkoutSession=$objectManager->create('Magento\Checkout\Model\Session');
    $status = $checkoutSession->getLastOrderStatus();
    if( $status == "complete")
    { 
        echo "<script>javascript: alert ("message") </script>";
    }
}

and my event.xml file in Vendor/Namespace/etc/adminhtml/event.xml

I just want to show this popup when the order is completed in the admin panel of Magento 2 can anyone help to solve it. and how can I get to know my event is triggered or not.

Best Answer

Add this below code in your observer :

namespace Custom\Module\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\App\ObjectManager;

class OrderStatusChange implements ObserverInterface {

    /**
     * @var \Magento\Framework\Message\ManagerInterface
     */
    protected $messageManager;
    /**
     * @var \Magento\Framework\App\Response\RedirectInterface
     */
    protected $redirect;
    public function __construct(
        ...
        \Magento\Framework\App\Response\RedirectInterface $redirect,
        \Magento\Framework\Message\ManagerInterface $messageManager,
        ...
    ) {
        ... 
        $this->redirect = $redirect;
        $this->messageManager = $messageManager;
        ...
    }
    public function execute(Observer $observer) {
        $order = $observer->getEvent()->getOrder();
        $controller = $observer->getControllerAction();

        if($order->getState() == "complete")
        { 
            $this->messageManager->addSuccess(__('Order status change successfully')); // You can set your success message here
            $this->redirect->redirect($controller->getResponse(), $this->redirect->getRefererUrl()); // You can set here on which path you want to redirect
        }
    }
}

Remove generated folder and flush cache

Related Topic