触发Magento订单状态更改事件的观察者

问题描述 投票:2回答:2

收到processing状态后,我需要自动在订单上创建发票。在我的扩展中应该遵守哪个事件来实现这一目标?


我正在尝试,但这段代码不起作用,它可以是什么?

etc / modules中的.xml

<?xml version="1.0"?>
<config>
<modules>
    <Atwix_Orderhook>
        <active>true</active>
        <codePool>community</codePool>
    </Atwix_Orderhook>
</modules>
</config>

app / code /中的config.xml

<?xml version="1.0"?>
<config>
<modules>
    <Atwix_Orderhook>
        <version>1.0</version>
    </Atwix_Orderhook>
</modules>
<global>
    <models>            
        <orderhook>
            <class>Atwix_Orderhook_Model</class>
        </orderhook>
    </models>
    <events>
        <sales_order_save_after>
            <observers>
                <auto_invoice_order>
                    <type>singleton</type>
                    <class>Atwix_Orderhook_Model_Observer</class>
                    <method>implementOrderStatus</method>
                </auto_invoice_order>
            </observers>
        </sales_order_save_after>
    </events>

</global>
</config>

app / code /中的Observer.php

<?php
class Atwix_Orderhook_Model_Observer 
{
public function implementOrderStatus($event)
{
    $order = $event->getOrder();

    if ($order == 'processing') {
        if ($order->canInvoice())
            $this->_processOrderStatus($order);
    }
    return $this;
}
                        private function _processOrderStatus($order)
                        {
                            $invoice = $order->prepareInvoice();

                            $invoice->register();
                            Mage::getModel('core/resource_transaction')
                               ->addObject($invoice)
                               ->addObject($invoice->getOrder())
                               ->save();

                            $invoice->sendEmail(false, '');
                            return true;
                        }
}
magento observers
2个回答
7
投票

您可以观察sales_order_save_after然后检查您所针对的订单状态,如下所示:

public function exampleEventHandler(Varien_Event_Observer $observer)
{
    /* @var Mage_Sales_Model_Order $order */
    $order = $observer->getOrder();
    $stateProcessing = $order::STATE_PROCESSING;
    // Only trigger when an order enters processing state.
    if ($order->getState() == $stateProcessing && $order->getOrigData('state') != $stateProcessing) {
        ...
    }
    ...
}

0
投票

应用程序/代码/ MyCompany的/ MyModule的在/ etc / events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="sales_order_save_after">
        <observer name="mymodule_sales_order_save_after" instance="MyCompany\MyModule\Observer\CheckOrderStatus" />
    </event>
</config>

然后

应用程序/代码/ MyCompany的/ MyModule的/观测/ CheckOrderStatus.php

<?php
 namespace MyCompany\MyModule\Observer; 
use Magento\Framework\Event\ObserverInterface; 

class CheckOrderStatus implements ObserverInterface {



protected $orderRepository;
public function __construct(
               \Magento\Sales\Api\OrderRepositoryInterface $orderRepository) { 
    $this->orderRepository = $orderRepository;
}

public function execute(\Magento\Framework\Event\Observer $observer) { 
    $order = $observer->getEvent()->getOrder();
    $customerId = $order->getCustomerId(); 
    $OrderStatus=$order->getStatus();

  if ($OrderStatus == ‘pending’) {
        //some work here
      }elseif ($OrderStatus == ‘processing’) {
        //some work here
      }else{
         // do something here
      }
  }


 }

了解更多信息https://mage2-blog.com/magento-2-get-order-submission/

© www.soinside.com 2019 - 2024. All rights reserved.