This "bug" was introduced in Magento CE 1.9.3.0 by the following modification in app/code/core/Mage/Sales/Model/Quote/Address/Total/Subtotal.php:
$item->setPrice($finalPrice)
->setBaseOriginalPrice($finalPrice);
$item->calcRowTotal();
- } else if (!$quoteItem->getParentItem()) {
+ } else if (!$quoteItem->getParentItem() && !$item->getHasError()) {
$finalPrice = $product->getFinalPrice($quoteItem->getQty());
$item->setPrice($finalPrice)
->setBaseOriginalPrice($finalPrice);
Because of this the quote calculation isn't done correctly anymore. I don't find a reasonable notification for this in the CE 1.9.3.0 release notes.
I fixed this problem by rewriting this modification back to the CE 1.9.2.x behaviour.
<models>
...
<sales>
<rewrite>
<quote_address_total_subtotal>Mypackage_Mymodule_Model_Sales_Quote_Address_Total_Subtotal</quote_address_total_subtotal>
</rewrite>
</sales>
</models>
and Mypackage_Mymodule_Model_Sales_Quote_Address_Total_Subtotal
<?php
class Mypackage_Mymodule_Model_Sales_Quote_Address_Total_Subtotal extends Mage_Sales_Model_Quote_Address_Total_Subtotal
{
/**
* Address item initialization
*
* @param $item
* @return bool
*/
protected function _initItem($address, $item)
{
...
} else if (!$quoteItem->getParentItem()) {
$finalPrice = $product->getFinalPrice($quoteItem->getQty());
...
}