use controller_action_prdispatch event to update stock
<controller_action_predispatch>
<observers>
<controller_checkout_observer>
<type>singleton</type>
<class>Custom_Custom_Model_Observer</class>
<method>orderstatuschange</method>
</controller_checkout_observer>
</observers>
</controller_action_predispatch>
public function orderstatuschange($event) {
$controller = $event->getControllerAction();
$requestaction = $controller->getRequest()->getActionName();
$orderIds = $controller->getRequest()->getParams();
if($requestaction == "massHold" || $requestaction == "hold"){
if(count($orderIds)){
foreach($orderIds as $orderId){
$order = Mage::getModel("sales/order")->load($orderId); //load order by order id
$ordered_items = $order->getAllItems();
foreach($ordered_items as $item){
$qty = $item->getQtyOrdered();
$productId = $item->getProductId();
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$currentQty = $stockItem->getQty();
$totalqty = $currentQty + $qty;
if (!$stockItem->getId()) {
$stockItem->setData('product_id', $productId);
$stockItem->setData('stock_id', 1);
}
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('store_id', 1);
$stockItem->setData('manage_stock', 1);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('min_sale_qty', 0);
$stockItem->setData('use_config_min_sale_qty', 0);
$stockItem->setData('max_sale_qty', 1000);
$stockItem->setData('use_config_max_sale_qty', 0);
$stockItem->setData('qty', $totalqty);
$stockItem->save();
}
}
}
}
if($requestaction == "massUnhold" || $requestaction == "unhold"){
if(count($orderIds)){
foreach($orderIds as $orderId){
$order = Mage::getModel("sales/order")->load($orderId); //load order by order id
$ordered_items = $order->getAllItems();
foreach($ordered_items as $item){
$qty = $item->getQtyOrdered();
$productId = $item->getProductId();
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$currentQty = $stockItem->getQty();
$totalqty = $currentQty - $qty;
if (!$stockItem->getId()) {
$stockItem->setData('product_id', $productId);
$stockItem->setData('stock_id', 1);
}
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('store_id', 1);
$stockItem->setData('manage_stock', 1);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('min_sale_qty', 0);
$stockItem->setData('use_config_min_sale_qty', 0);
$stockItem->setData('max_sale_qty', 1000);
$stockItem->setData('use_config_max_sale_qty', 0);
$stockItem->setData('qty', $totalqty);
$stockItem->save();
}
}
}
}
}