Magento: Наблюдатель за состоянием заказа завершен - PullRequest
7 голосов
/ 28 октября 2011

В Magento я разрабатываю модуль комиссионных, который мне нужно платить агентам по завершении продаж, а не при размещении заказа.

В идеале я хотел бы захватить его, когда состояние заказа превращается в «завершенное», но я не нашел наблюдателя для этого?

Я мог бы добавить это к наблюдателю отгрузки, но в заказе может быть несколько отправлений, и, следовательно, это неправильно.

В качестве альтернативы я всегда могу запустить задание cron, чтобы рассчитать заказ за последний час, но опять-таки это не кажется правильным.

Любые предложения о том, как правильно сделать это.

Ответы [ 2 ]

23 голосов
/ 28 октября 2011

Используйте наблюдателя "sales_order_save_commit_after" или "sales_order_invoice_pay", тогда вы можете получить статус заказа и в зависимости от статуса вы делаете то, что хотите. Вот пример:

// for event sales_order_save_commit_after
public function commissionCalculationOnComplete($observer)
{
    $order = $observer->getOrder();
    if($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE){
    // do your order complete stuff
    }
}

или

// Event sales_order_invoice_pay
public function triggerProvisionCalculation ($observer)
{
    $invoice = $observer->getEvent()->getInvoice();
    switch ($invoice->getState()) {
        case Mage_Sales_Model_Order_Invoice::STATE_PAID :
            //do your stuff
            break;
    }
    return $this;
}

Вам нужно будет убедиться, что вы не выполняете вычисления дважды, потому что этот метод срабатывает при каждом сохранении заказа.

0 голосов
/ 18 декабря 2015

** пурпурный заказ завершен и отменены изменения количества при увеличении и уменьшении для наблюдателя базы данных ** Ноль / SalesOderafter / config.xml

    <config>
    <modules>
   <Zero_SalesOrderafter>
    <version>0.1.0</version>
  </Zero_SalesOrderafter>
  </modules>
  <global>
   <events>
   <sales_order_save_after>
            <observers>
                 <ordercancel>
                    <type>singleton</type>
                    <class>Zero_SalesOrderafter_Model_Observer</class>
                    <method>canCancelOrder</method>
                 </ordercancel>
            </observers>
     </sales_order_save_after>
   </events>
   </global>
    </config>

 path:Zero/SalesOrderafter/Observer.php
  class Wli_SalesOrderafter_Model_Observer 
   {
  public function canCancelOrder( Varien_Event_Observer $observer )
  { 
     $data = $observer->getEvent()->getOrder();
   if($data->getId())
    {
     $ProdustIds=array();
    foreach ($data->getAllVisibleItems() as $item)
     {
      $ProdustIds= $item->getProductId();
      }        
     } 
      $qty = $data->getData('total_qty_ordered');
      $order_status = $data->getStatus();
      $incrementId = $data->getData('increment_id');
    }       

     }
     ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...