/** * 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(); } }
/** * Get applied coupons * @return array */ public function getAppliedCoupons() { if (!isset($this->appliedCodes)) { $quote = $this->getQuote(); $this->appliedCodes = $this->couponService->getCouponCodesFromQuote($quote); } return $this->appliedCodes; }
/** * Update coupon usage * @param Mage_Sales_Model_Order */ protected function updateCouponUsage(Mage_Sales_Model_Order $order) { $couponCodes = $this->couponService->getCouponCodesFromOrder($order); // default handler works well with 1 code, we don't need to change anything if (count($couponCodes) > 1) { $customerId = $order->getCustomerId(); $this->couponService->updateCouponUsage($couponCodes, $customerId); } }
/** * Validate the coupon usage for given address * @param Mage_Sales_Model_Quote_Address */ protected function validateCouponUsage(Mage_Sales_Model_Quote_Address $address) { $quote = $address->getQuote(); $customerId = $quote->getCustomerId(); $couponCodes = $this->couponService->getCouponCodesFromQuote($quote); $newCodes = $couponCodes; foreach ($couponCodes as $index => $couponCode) { $isValid = $this->isValidCouponUsage($couponCode, $customerId); if (!$isValid) { unset($newCodes[$index]); } } if ($newCodes != $couponCodes) { $couponCode = implode(',', $newCodes); $quote->setCouponCode($couponCode); } }
/** * Get the applied coupon codes * @return array */ public function getAppliedCoupons() { $quote = $this->getQuote(); return $this->couponService->getCouponCodesFromQuote($quote); }