php - Can Observer break the Event in Magento? -
i new magento. want build observer on cancellation of order perform query database , decide whether order cancellable or not (this decided on basis of state.). if can't cancelled, should break cancel event , display message order cannot cancelled.
which event should choose, order_cancel_after or sales_order_item_cancel, , how can break out of event in between?
thanks in advance. :)
there no general answer this, depends on context event triggered , happens there afterwards.
the events don't have interface "stop" them , not tied actual "event" (i.e. order cancellation) other name.
so have @ code of mage_sales_model_order_item sales_order_item_cancel gets triggered (order_cancel_after wrong place because @ point order cancelled):
/** * cancel order item * * @return mage_sales_model_order_item */ public function cancel() { if ($this->getstatusid() !== self::status_canceled) { mage::dispatchevent('sales_order_item_cancel', array('item'=>$this)); $this->setqtycanceled($this->getqtytocancel()); $this->settaxcanceled($this->gettaxcanceled() + $this->getbasetaxamount() * $this->getqtycanceled() / $this->getqtyordered()); $this->sethiddentaxcanceled($this->gethiddentaxcanceled() + $this->gethiddentaxamount() * $this->getqtycanceled() / $this->getqtyordered()); } return $this; } you see there no additional check after event dispatched, possible set qty_to_cancel attributes 0 uneffect cancelling.
your observer method:
public function salesorderitemcancel(varien_event_observer $observer) { $item = $observer->getevent()->getitem(); if (!$this->_iscancellable($item->getorder())) { $item->setqtytocancel(0); $this->_showerrormessage(); } } note don't have set tax_canceled or hidden_tax_canceled because depend on qty_canceled , stay 0.
Comments
Post a Comment