/** * Cancel specific qty of order item * * @param Mage_Sales_Model_Order_Item $orderItem * @param null $qtyToCancel * @return Mage_Sales_Model_Order_Item */ public function cancelOrderItem(Mage_Sales_Model_Order_Item $orderItem, $qtyToCancel = null) { if ($orderItem->getStatusId() !== Mage_Sales_Model_Order_Item::STATUS_CANCELED) { if (is_null($qtyToCancel)) { $qtyToCancel = $orderItem->getQtyToCancel(); } Mage::dispatchEvent('sales_order_item_cancel', array('item' => $orderItem)); $orderItem->setQtyCanceled($orderItem->getQtyCanceled() + $qtyToCancel); $orderItem->setTaxCanceled($orderItem->getTaxCanceled() + $orderItem->getBaseTaxAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered()); $orderItem->setHiddenTaxCanceled($orderItem->getHiddenTaxCanceled() + $orderItem->getHiddenTaxAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered()); } return $orderItem; }