Search code examples
magento-1.9checkoutcartquotediscount

Adding discount by coupon code programmatically


 public function coupon($data) {
        $couponCode = $data['couponcode'];
        if (!Zend_Validate::is(trim($couponCode), 'NotEmpty')) {
            throw new Exception($this->__('coupon code cannot be empty.'));
        }
        $oCoupon = Mage::getModel('salesrule/coupon')->load($couponCode, 'code');
        $data = $oCoupon->getData();
        if (empty($data)) {
            throw new Exception($this->__('coupon code did not match.'));
        }     
        $quote = Mage::getModel('checkout/session')->getQuote();
        $quote->setCouponCode($couponCode);
        $quote->save();
        $quoteData = Mage::getModel('checkout/cart')->getQuote();
        $subTotal = $quoteData['subtotal'];
        $subtotal_with_discount = $quoteData['subtotal_with_discount'];
        $grandTotal = $quoteData['grand_total'];
        $discountTotal = ($subTotal - $subtotal_with_discount);
        $discount = number_format($discountTotal, 4, null, '');
        return $discount;
    }

The Coupon code is applied and showing but when I Print the quoteData->GetData() then discount is not coming,and when I will update the refresh cart page then discount is coming


Solution

  • I got the solution

    public function coupon($data) {
            $couponCode = $data['couponcode'];
            if (!Zend_Validate::is(trim($couponCode), 'NotEmpty')) {
                throw new Exception($this->__('coupon code cannot be empty.'));
            }
            $oCoupon = Mage::getModel('salesrule/coupon')->load($couponCode, 'code');
            $data = $oCoupon->getData();
            if (empty($data)) {
                throw new Exception($this->__('coupon code did not match.'));
            }
            Mage::getSingleton('checkout/cart')->getQuote()->getShippingAddress()
                    ->setCollectShippingRates(true);
            Mage::getSingleton('checkout/cart')->getQuote()
                    ->setCouponCode($couponCode)->collectTotals()->save();
            $quoteData = Mage::getModel('checkout/cart')->getQuote();
            $subTotal = $quoteData['subtotal'];
            $subtotal_with_discount = $quoteData['subtotal_with_discount'];
            $grandTotal = $quoteData['grand_total'];
            $discountTotal = ($subTotal - $subtotal_with_discount);
            $discount = number_format($discountTotal, 4, null, '');
    
            return $discount;
        }