only is removed if i delete the cookie and still persist if I select another product with the same configuration for the code, the message when press cancel button is "coupon removed" but in the shopping cart still continue working, any ideas?
I had almost the same issue. I found a fix for my problem. The issue was with _setCartCouponCode() function in the \app\code\core\Mage\Checkout\Model\Type\Onepage.php file.In the function i replaced the line
if ($couponCode = $this->getCheckout()->getCartCouponCode()) { with if ($couponCode = $this->getCheckout()->getQuote()->getCartCouponCode()) {.
That's it. Don't know if this will work for you.
Magento sets the session when you apply the coupon, but never destroys it when the user removes/cancels it from the cart. This bug was introduced somewhere along the way in 1.9.x.
For now, create your own custom observer to destroy the session while watching the <controller_action_predispatch_checkout_cart_couponPost> event (replace Companyname and ModuleName in the below files with your own choice of names):
1.) Create Config File: app/code/local/Companyname/ModuleName/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Companyname_ModuleName>
<version>1.0.0</version>
</Companyname_ModuleName>
</modules>
<global>
<models>
<companyname_modulename>
<class>Companyname_ModuleName_Model</class>
</companyname_modulename>
</models>
</global>
<frontend>
<events>
<controller_action_predispatch_checkout_cart_couponPost>
<observers>
<remove_session_coupon_code>
<type>singleton</type>
<class>companyname_modulename/observer</class>
<method>removeCoupon</method>
</remove_session_coupon_code>
</observers>
</controller_action_predispatch_checkout_cart_couponPost>
</events>
</frontend>
</config>
2.) Create Observer: app/code/local/Companyname/ModuleName/Model/Observer.php
<?php
class Companyname_ModuleName_Model_Observer {
public function removeCoupon(Varien_Event_Observer $observer)
{
$controller = $observer->getControllerAction();
if ($controller->getRequest()->getParam('remove') == 1) {
Mage::getSingleton("checkout/session")->unsetData('cart_coupon_code');
}
return $this;
}
}
3.) Create Module Declaration File: app/etc/modules/Companyname_ModuleName.xml
<?xml version="1.0"?>
<config>
<modules>
<Companyname_ModuleName>
<codePool>local</codePool>
<active>true</active>
</Companyname_ModuleName>
</modules>
</config>
4.) Clear Magento Cache, test, be happy.
Credit to ahe_borriglione [https://stackoverflow.com/a/42839424/1830601]