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

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -