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