/** * 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); } }