/** * Add coupon from this system to quote * * @param Mage_Sales_Model_Quote $quote * @param ShopgateCartBase $order * * @return Mage_Sales_Model_Quote * @throws ShopgateLibraryException */ protected function _setQuoteShopCoupons($quote, $order) { if (count($order->getExternalCoupons()) > 1) { throw new ShopgateLibraryException(ShopgateLibraryException::COUPON_TOO_MANY_COUPONS); } foreach ($order->getExternalCoupons() as $coupon) { /* @var $coupon ShopgateShopgateCoupon */ $couponInfos = $this->jsonDecode($coupon->getInternalInfo(), true); if ($order instanceof ShopgateOrder) { if (!$coupon->getInternalInfo()) { throw new ShopgateLibraryException(ShopgateLibraryException::COUPON_NOT_VALID, 'Field "internal_info" is empty.'); } /** @var Mage_SalesRule_Model_Coupon $mageCoupon */ if ($this->_getConfigHelper()->getIsMagentoVersionLower1410()) { $mageCoupon = Mage::getModel('salesrule/rule')->load($couponInfos["coupon_id"]); } else { $mageCoupon = Mage::getModel('salesrule/coupon')->load($couponInfos["coupon_id"]); } $count = (int) $mageCoupon->getTimesUsed(); $count--; $mageCoupon->setTimesUsed($count); $mageCoupon->save(); } $quote->setCouponCode($coupon->getCode()); foreach ($quote->getAllAddresses() as $address) { $address->setCouponCode($coupon->getCode()); } $quote->setTotalsCollectedFlag(false); $quote->collectTotals(); if ($this->_errorOnInvalidCoupon) { if ($coupon->getCode() != $quote->getCouponCode()) { throw new ShopgateLibraryException(ShopgateLibraryException::COUPON_NOT_VALID, 'Code transferred by Shopgate"' . $coupon->getCode() . '" != "' . $quote->getCouponCode() . '" code in Magento'); } } $quote->save(); } return $quote; }
/** * Validate current coupon code * * @param Mage_Sales_Model_Quote $quote * @param string $couponCode * * @return bool */ protected function validateCouponCode($quote, $couponCode = '') { $codeLength = strlen($couponCode); $isCodeLengthValid = $codeLength && $codeLength <= 255; // Validate NEW coupon if ($codeLength) { if ($isCodeLengthValid && $couponCode == $quote->getCouponCode()) { Mage::getSingleton('adminhtml/session')->setCouponMessage(Mage::helper('checkout/cart')->__('Coupon code "%s" was applied.', Mage::helper('core')->escapeHtml($couponCode))); return true; } else { // If NEW coupon is not valid add error message Mage::getSingleton('adminhtml/session')->setCouponMessage(Mage::helper('checkout/cart')->__('Coupon code "%s" is not valid.', Mage::helper('core')->escapeHtml($couponCode))); Mage::helper('mageworx_orderspro/edit')->addPendingChanges(Mage::registry('orderspro_order')->getEntityId(), array('coupon_code' => '')); return false; // reset coupon code to empty } } else { Mage::getSingleton('adminhtml/session')->setCouponMessage(Mage::helper('checkout/cart')->__('Coupon code was canceled.')); $quote->setCouponCode(''); return true; } }
/** * Set the coupon code on the quote * * @param Mage_Sales_Model_Quote * @param $couponCode */ public function setCouponCode(Mage_Sales_Model_Quote $quote, $couponCode) { $quote->setCouponCode($couponCode); $quote->setTotalsCollectedFlag(false)->collectTotals(); $quote->save(); }