Magento automatically removes items from the shopping cart page which are out of stock. What happens if the product goes out of stock and that product is already in other customer’s cart who have not yet checked it out?
With this script, Magento will auto-check if all the items in the cart are available in-stock before proceeding for checkout page.
In config.xml file:
<events>
<controller_action_predispatch_checkout_cart_index>
<observers>
<namespace_module_autoremove_outofstock>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>autoRemoveOutOfStockItems</method>
</namespace_module_autoremove_outofstock>
</observers>
</controller_action_predispatch_checkout_cart_index>
</events>
In observer.php file:
public function autoRemoveOutOfStockItems($observer) {
$quote = Mage::getModel('checkout/session')->getQuote();
$cartItems = $quote->getAllItems();
foreach ($cartItems as $item)
{
//$productType = $item->getProduct()->getTypeId();
//if($productType!='configurable') {
$productId = $item->getProductId();
$product = Mage::getModel('catalog/product')->load($productId);
$stockItem = $product->getStockItem();
if(!$stockItem->getIsInStock())
{
Mage::helper('checkout/cart')->getCart()->removeItem($item->getId())->save();
}
//}
}
}

