4

We are having an issue that is a big problem but I cannot find a mention of it anywhere else. If a customer puts an item in their cart that is purchased by someone else before they check out, the checkout button disappears. There is a small warning under the item on the checkout page that says:

This item is currently out of stock.

But it doesn't say you must remove it to checkout. If someone has a lot of stuff in their cart, they probably wouldn't even see that message.

I've never seen a shopping cart that wouldn't let you checkout due to a sold out item if you have other items in the cart. I don't know if this has always been an issue because it's something I never thought to test.

I would like it if there were a warning about the item being unavailable but with the ability to checkout. Or at the very least I would like it if sold items would automatically be removed from other carts.

We are on Magento Community 1.7. Running the Ultimento theme. We do not have backorders enabled. This happens on the native Magento cart page.

Has anyone else seen this? If you want to test it on your site, you can just disable an item after you put it in your cart and see what happens.

Thank you!

  • This does not sound like core behaviour. It is most likely caused by a 3rd party module. try and disable all 3rd party modules, and see if it still happens. – ProxiBlue Aug 16 '13 at 22:24
  • 1
    Nope it's core behavior. – SR_Magento Aug 15 '14 at 12:03
1

This is default behaviour, just tested it on a CE1.7 with sample data. I do get an error message on top of the page that says: Some of the products are currently out of stock. You could change the text to explain what the user should do (remove that item from the cart) to continue or you can set all your products invertory to allow Qty below 0 so that the item is ordered as a backorder.

  • That is not what the op describes. Op says item gets added, but checkout button is removed. That is not default behaviour. – ProxiBlue Aug 17 '13 at 14:42
  • This is exactly what I tested, first add the product to your shoppingcart, set qty in backend to 0 then refresh shoppingcart. This is default behaviour because if there is no stock for an item you can't start the checkout so the buttons on the shoppingcart page are removed, so it leaves you with an error on the top of the page indicating you have a problem with one of your items and a message with the product that is no longer in stock and therefore my two options on how to solve this. See tinypic.com/view.php?pic=2h2pmp3&s=5 – Vladimir Kerkhoff Aug 17 '13 at 15:51
  • Thanks for your thoughts! Allowing backorders isn't really an ideal solution because then we have to refund those items and explain it to the customer, which comes off a bit unprofessional. I appreciate the idea though. We will examine adding to the out of stock message to the backend until we can find a more seamless solution. – Laura Aug 17 '13 at 16:08
  • @VladimirKerkhoff I stand corrected. never seen, or heard of this behaviour before (cart button removed). learn something new today about magento. – ProxiBlue Aug 17 '13 at 22:04
0

The solution would be to have the Checkout button itself become a message block, rather than the message be on TOP OF THE SCREEN where the customer may not scroll up to see, if they have 30 items (wholesale cart instance). I am going to implement this solution.

  • 1
    maybe you could provide some ideas as to how someone would go about coding such a solution. – David Manners Oct 14 '13 at 8:33
0

Why it's doing this:

The link / button graphic on the cart is disabled by default if the value of the hasError methods in checkout/cart.phtml template returns false:

<?php if(!$this->hasError()): ?>
<ul class="checkout-types">

If this returns false all checkout methods are then suppressed from displaying on the cart page.

This error is triggered from the CatalogInventory module in the class Mage_CatalogInventory_Model_Stock_Item (~line 580) which explicitly sets the error if the item is not in stock.

Workaround:

So what's the workaround? You can set an observer to remove the item from the stock and place a message on the cart that some of the items were removed. To do so you will rewrite the method checkQuoteItemQty:

<?php

class MyCompany_MyModule_Model_Stock_Item extends Mage_CatalogInventory_Model_Stock_Item
{
    public function checkQuoteItemQty($qty, $summaryQty, $origQty = 0)
    {
        $helper = Mage::helper('cataloginventory');
        $result = parent::checkQuoteItemQty($qty, $summaryQty, $origQty);

        //check for error and specifically for the flag that the item went out of stock
        if($result->getHasError() && $result->getItemUseOldQty()){
            //remove the item from cart
            $this->subtractQty($qty);

            //set notification for the user
            Mage::getSingleton('checkout/session')->addError($helper->__('Some items have been removed from your cart as they were not available in the qty requested.'));
        }
    }

}

Disclaimer:

This suggested workaround is provided entirely top-of-mind and may have unforeseen consequences.

I suggest using this post as a guide of how the functionality flows so that you can make informed decisions about how to set up a proper workaround for your business and your set of rules that govern how you operate.

  • There's also a check in Mage_CatalogInventory_Model_Observer. – user487772 Aug 8 '16 at 11:57
  • I stay corrected. In EE there are 2 checks. First is in Mage_CatalogInventory_Model_Observer (this is what Phil most likely refers to) and the second is in Enterprise_Checkout_Model_Cart::getQtyStatus. – user487772 Aug 8 '16 at 12:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.