/**
  * Remote coupon from cart
  *
  * @throws Mage_Exception
  */
 public function cancelAction()
 {
     $isAjax = $this->getRequest()->getParam('isAjax');
     try {
         $quote = $this->_getQuote();
         $couponCode = (string) $this->getRequest()->getParam('coupon_code_cancel');
         $oldCouponCode = $quote->getCouponCode();
         $this->couponService->removeCoupon($quote, $couponCode);
         $newCouponCode = $quote->getCouponCode();
         $foundInOldCoupon = stristr($oldCouponCode, $couponCode) !== false;
         $foundInNewCoupon = stristr($newCouponCode, $couponCode) !== false;
         $hasCouponChanged = $foundInOldCoupon === true && $foundInNewCoupon === false;
         if ($hasCouponChanged) {
             $this->_getSession()->addSuccess($this->__('Coupon code %s was canceled.', $couponCode));
         } else {
             $this->_getSession()->addError($this->__('Cannot cancel the coupon code.'));
         }
     } catch (Mage_Core_Exception $e) {
         $this->_getSession()->addError($e->getMessage());
     } catch (Exception $e) {
         $this->_getSession()->addError($this->__('Cannot cancel the coupon code.'));
         Mage::logException($e);
     }
     if (!$isAjax) {
         $this->_goBack();
     }
 }
 /**
  * @param Varien_Event_Observer $observer
  *  this observer event contains:
  *      - 'order_create_model'  => Mage_Adminhtml_Model_Sales_Order_Create
  *      - 'request_model'       => Mage_Core_Controller_Request_Http
  *      - 'session'             => Mage_Adminhtml_Model_Session_Quote
  */
 public function handleAdminCouponAdd(Varien_Event_Observer $observer)
 {
     $event = $observer->getEvent();
     /** @var Mage_Core_Controller_Request_Http $request */
     $request = $event->getRequestModel();
     $order = $request->getPost('order');
     if (isset($order['coupon']['code'])) {
         /** @var Mage_Adminhtml_Model_Session_Quote $session */
         $session = $event->getSession();
         $quote = $session->getQuote();
         if (isset($order['coupon']['remove'])) {
             $this->couponService->removeCoupon($quote, $order['coupon']['code']);
         } else {
             $this->couponService->addCoupon($quote, $order['coupon']['code']);
         }
         // Remove coupon from the request.
         // - see Mage_Adminhtml_Model_Sales_Order_Create::importPostData
         unset($order['coupon']);
         $request->setPost('order', $order);
     }
 }