Magento在结账页面保存订单总额

时间:2011-04-03 05:04:04

标签: magento magento-1.4

我们在结帐页面有一个类似礼品卡余额使用的系统。结账页面上的客户可以使用他们的礼品卡余额来购买产品。

所以我在付款标签之前添加了一个标签,其中客户可以选择从礼品卡余额中输入使用金额,这样当他们说继续我在自定义Onepage控制器中获取输入的值并将其传递给Onepage.php (模型类)减少总量。

这就是在模型类上做的事情。

public function saveCustomDiscount($discount=0)
{       
    $this->getQuote()->setGrandTotal($this->getQuote()->getGrandTotal() - $discount);
    $this->getQuote()->setBaseGrandTotal($this->getQuote()->getBaseGrandTotal() - $discount);
    $this->getQuote()->save();
    //$this->getQuote()->collectTotals()->save();
    $order = $this->getQuote()->getData();  
    Zend_Debug::dump($order);      
    return array();
}

我从控制器Action函数调用此函数正在获取用户输入。

在这里,作为折扣传递的总金额和基数总额并没有减少。和原版一样。

注意:  在自定义订单保存之前。

array(51) {
   ---------------
  ["grand_total"] => string(8) "243.7200"
  ["base_grand_total"] => string(8) "243.7200"
  ----------------- 
}

自定义订单保存后。

array(51) {
   ---------------
   ["grand_total"] => float(223.72)
   ["base_grand_total"] => float(223.72)
  ----------------- 
}

进行调试时,数据类型从字符串更改为float。我必须做什么,以减少自定义折扣的订单总额。请帮帮我。

由于

1 个答案:

答案 0 :(得分:3)

您是否设置了discountCode?

i.e.  $quote->setCouponCode(strlen($couponCode) ? $couponCode : '')
                 ->collectTotals()
                 ->save();

稍后,在报价中,您是否申请了折扣?

i.e. $order->setDiscountAmount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount() - Mage::getSingleton('checkout/session')->getQuote()->getSubtotal());
            $order->setShippingAmount(Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingAmount());
            $order->setSubtotalWithDiscount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount());
            $order->setGrandTotal(Mage::getSingleton('checkout/session')->getQuote()->getGrandTotal());

编辑:

我和一个团队一起做过Wordpress / Magento混合动力车,这肯定给我留下了一些学习经验。 Magento被用作纯交易引擎,我们必须手动完成整个结账流程(包括创建一个自定义WP插件来处理购物车中的每一步)。

在最后记录下来,这样我们就可以看到你的内容(可能会把这个放在你编辑过的问题中):

Mage::log("checkoutprocess: getSubtotal: " . $order->getSubtotal());
            Mage::log("checkoutprocess: getTaxAmount: " . $order->getTaxAmount());
            Mage::log("checkoutprocess: getDiscountAmount: " . $order->getDiscountAmount());
            Mage::log("checkoutprocess: getShippingAmount: " . $order->getShippingAmount());
            Mage::log("checkoutprocess: getGrandTotal: " . $order->getGrandTotal());

            Mage::log("checkoutprocess: getBaseSubtotal: " . $order->getBaseSubtotal());
            Mage::log("checkoutprocess: getBaseDiscountAmount: " . $order->getBaseDiscountAmount());
            Mage::log("checkoutprocess: getSubtotalWithDiscount: " . $order->getSubtotalWithDiscount());
            Mage::log("checkoutprocess: getBaseGrandTotal: " . $order->getBaseGrandTotal());