2015-05-20 3 views
1

Мне нужно автоматически создать счет-фактуру на заказ после получения статуса processing. Какое событие следует соблюдать в моем продлении для достижения этого?Trigger observer на событиях изменения статуса Magento


Я пытаюсь, но этот код не работает, что это может быть?

.xml в т.д./модули

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

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> 

Oberver.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; 
         } 
} 

ответ

6

Вы можете наблюдать 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

Чтобы получить статус, я просто использовал '$ order-> getStatus()' и '$ order-> getOrigData ('status')' соответственно. – electroid

Смежные вопросы