Question

I have enabled the Purchase Order payment method from magento backend. The PO payment method takes a input field data and stores into Sales_order_payment table as po_number. i want to fetch the same value of the input field after place order and store it into my custom table.

currently i am using the following in my observer for checkout_onepage_controller_success_action event.

protected $_dataObject;

\Magento\Framework\DataObject $data,

$this->_dataObject = $data;

$po_number = $this->_dataObject->getPoNumber();

The current code is not giving me the po number. Please help !!

Was it helpful?

Solution

You can get po_number from Payment method object.

namespace YourCompany\YourModule\Observer;

use Magento\Sales\Model\OrderFactory;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

class HelloWorld implements ObserverInterface {

    protected $_orderFactory;

    public function __construct(
        OrderFactory $orderFactory
    ) {
        $this->_orderFactory = $orderFactory;
    }


    public function execute(Observer $observer ) {

        $orderIds = $observer->getEvent()->getOrderIds();

        if (count($orderIds)) {
            $orderId = $orderIds[0];
            $order = $this->_orderFactory->create()->load($orderId);
            $poNumber = $order->getPayment()->getPoNumber();
        }
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top