Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/session/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento一个订单的多个优惠券代码,无扩展名_Magento - Fatal编程技术网

Magento一个订单的多个优惠券代码,无扩展名

Magento一个订单的多个优惠券代码,无扩展名,magento,Magento,我已经工作了3天,试图在一个订单中应用多个优惠券代码 我知道有一些模块可供使用。 但我不想投资购买模块。我需要一些自定义代码,以便我可以在单个订单中应用多个优惠券代码。要添加两个优惠券代码, 我是这样做的: 1) 在sales\u flat\u quote表中添加列优惠券\u code2 ALTER TABLE sales_flat_quote 加( 优惠券代码2varchar(255) )“ 2) 要添加新优惠券代码2,只需将其保存在quote中: Mage::getSingleton('c

我已经工作了3天,试图在一个订单中应用多个优惠券代码

我知道有一些模块可供使用。 但我不想投资购买模块。我需要一些自定义代码,以便我可以在单个订单中应用多个优惠券代码。

要添加两个优惠券代码, 我是这样做的:

1) 在sales\u flat\u quote表中添加列优惠券\u code2

ALTER TABLE sales_flat_quote
加( 优惠券代码2varchar(255) )“

2) 要添加新优惠券代码2,只需将其保存在quote中:

Mage::getSingleton('checkout/cart')->getQuote()->setCouponCode2($coupon_code)->save();
3) 最后,为了计算优惠券代码,我在observer文件中添加了函数: /magento/app/code/core/Mage/Sales/Model/Observer.php

 public function setDiscountCouponCode2(Varien_Event_Observer $observer)
{
    $couponCode2 = $observer->getEvent()->getQuote()->getCouponCode2();

    $oCoupon = Mage::getModel('salesrule/coupon')->load($couponCode2, 'code');
    $oRule = Mage::getModel('salesrule/rule')->load($oCoupon->getRuleId());
    $ruleData = $oRule->getData();
    $flag =0;
    if(isset($ruleData['product_ids'])){
        $product_ids = $ruleData['product_ids'];
        foreach(Mage::getSingleton('checkout/session')->getQuote()->getAllItems() as $_item){
                if($product_ids == $_item->getProductId()){
                        $flag = 1;
                }
        }
    }


if($flag){
        $ruleSimpleAction = $ruleData['simple_action'];
        $ruleDiscountAmount = $ruleData['discount_amount'];


        $quote=$observer->getEvent()->getQuote();
        $quoteid=$quote->getId();

        $discountAmount=$ruleDiscountAmount;
        if($quoteid) {
            if($discountAmount>0) {
                $total=$quote->getBaseSubtotal();
                $quote->setSubtotal(0);
                $quote->setBaseSubtotal(0);

                $quote->setSubtotalWithDiscount(0);
                $quote->setBaseSubtotalWithDiscount(0);

                $quote->setGrandTotal(0);
                $quote->setBaseGrandTotal(0);


                $canAddItems = $quote->isVirtual()? ('billing') : ('shipping'); 
                foreach ($quote->getAllAddresses() as $address) {

                    $address->setSubtotal(0);
                    $address->setBaseSubtotal(0);

                    $address->setGrandTotal(0);
                    $address->setBaseGrandTotal(0);

                    $address->collectTotals();

                    $quote->setSubtotal((float) $quote->getSubtotal() + $address->getSubtotal());
                    $quote->setBaseSubtotal((float) $quote->getBaseSubtotal() + $address->getBaseSubtotal());

                    $quote->setSubtotalWithDiscount(
                        (float) $quote->getSubtotalWithDiscount() + $address->getSubtotalWithDiscount()
                    );
                    $quote->setBaseSubtotalWithDiscount(
                        (float) $quote->getBaseSubtotalWithDiscount() + $address->getBaseSubtotalWithDiscount()
                    );

                    $quote->setGrandTotal((float) $quote->getGrandTotal() + $address->getGrandTotal());
                    $quote->setBaseGrandTotal((float) $quote->getBaseGrandTotal() + $address->getBaseGrandTotal());

                    $quote ->save(); 

                    $quote->setGrandTotal($quote->getBaseSubtotal()-$discountAmount)
                        ->setBaseGrandTotal($quote->getBaseSubtotal()-$discountAmount)
                        ->setSubtotalWithDiscount($quote->getBaseSubtotal()-$discountAmount)
                        ->setBaseSubtotalWithDiscount($quote->getBaseSubtotal()-$discountAmount)
                        ->save(); 

                    if($address->getAddressType()==$canAddItems) {
                        $address->setSubtotalWithDiscount((float) $address->getSubtotalWithDiscount()-$discountAmount);
                        $address->setGrandTotal((float) $address->getGrandTotal()-$discountAmount);
                        $address->setBaseSubtotalWithDiscount((float) $address->getBaseSubtotalWithDiscount()-$discountAmount);
                        $address->setBaseGrandTotal((float) $address->getBaseGrandTotal()-$discountAmount);
                        if($address->getDiscountDescription()){
                            $address->setDiscountAmount(-($address->getDiscountAmount()-$discountAmount));
                            $address->setDiscountDescription($address->getDiscountDescription().', Instant Exchange -'.$couponCode2);
                            $address->setBaseDiscountAmount(-($address->getBaseDiscountAmount()-$discountAmount));
                        }else {
                            $address->setDiscountAmount(-($discountAmount));
                            $address->setDiscountDescription('Instant Exchange -'.$couponCode2);
                            $address->setBaseDiscountAmount(-($discountAmount));
                        }
                        $address->save();
                    }
                }

                foreach($quote->getAllItems() as $item){
                    $rat=$item->getPriceInclTax()/$total;
                    $ratdisc=$discountAmount*$rat;
                    $item->setDiscountAmount(($item->getDiscountAmount()+$ratdisc) * $item->getQty());
                    $item->setBaseDiscountAmount(($item->getBaseDiscountAmount()+$ratdisc) * $item->getQty())->save();
                }
            }
        }
}else{
        Mage::getSingleton('checkout/cart')->getQuote()->setCouponCode2('')->save();
    }
}
4) 最后,通过更新同一文件中的setQuoteCanaplyMSRP函数来调用上述函数:

 public function setQuoteCanApplyMsrp(Varien_Event_Observer $observer)
{
    /** @var $quote Mage_Sales_Model_Quote */
    $quote = $observer->getEvent()->getQuote();

    $canApplyMsrp = false;
    if (Mage::helper('catalog')->isMsrpEnabled()) {
        foreach ($quote->getAllAddresses() as $adddress) {
            if ($adddress->getCanApplyMsrp()) {
                $canApplyMsrp = true;
                break;
            }
        }
    }
    $this->setDiscountCouponCode2($observer);
    $quote->setCanApplyMsrp($canApplyMsrp);
}

看一看@Sry R.S.但它没有任何帮助。你有任何其他解决方案吗?对不起,目前没有其他解决方案。我还需要购买/创建一个,所以请告诉我你发现了什么。好的,当然,R.S.我一定会与你分享我的解决方案。谢谢你的支持嗨,你对此功能有任何解决方案吗?实际上我需要sameHi@djmak,我需要发现应税产品存在一个问题。为了确保一切正常,但发票中的折扣金额因税收而增加,例如小计$134.99折扣$25.84税收$11.31总计$120.46,但折扣金额仅为$25,为什么?