我们正在使用Magento Enterprise 1.10并且一直在实施自定义方式,以便为特定产品提供免费送货和免税。我已经在购物车和Onepage结帐中成功实现了这个显示部分(步骤5)。我遇到的问题是,当您点击“下订单”时,它会删除(或重置)subTotal,grandTotal和taxAmount的自定义值。我可以在sales_flat_quote和sales_flat_quote_item表中看到使用我给出的自定义值设置值。但是sales_flat_quote_address表中的grandTotal和taxAmount没有正确设置(不确定这是否相关,但假设)。它们被重新计算为Magento计算它们的默认方式。
因此,举例来说,我可能会设置自定义值为$ 20的自定义值。但Magento采取产品价格和税率并重新计算。如果这是有道理的。
我已经在我们的OnepageController.php中找到了saveOrderAction()方法
if ($data = $this->getRequest()->getPost('payment', false)) {
$this->getOnepage()->getQuote()->getPayment()->importData($data);
}
这部分代码正在替换我设置的自定义值以及Magento通常如何设置它们:
我的问题是为什么要阻止上面的代码块重新计算值,只使用我已经设置的值:
Mage::getSingleton('checkout/session')->getQuote()
提前致谢,
答案 0 :(得分:0)
我不认为覆盖onepage-controller是应用自定义折扣/税的最佳方式。最好将观察者放在事件sales_quote_collect_totals_after
上,并在此处重新计算订单总数/修改项目/应用折扣。
此外,我经常看到人们犯了错误,他们忘记调用collectTotals(),或者他们忘记保存他们的更改,即
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->setGrandTotal(999.99)->save();
如果我错过了您的问题,请提供进一步的详细信息。您是否在订单表中使用自定义列?
祝你好运
答案 1 :(得分:0)
您无法设置如下订单金额。
$quote->setGrandTotal(999.99)->save();
因为小计,总计,税额是订单总数,并在下面的代码调用时计算。
$quote->collectTotals();
这将合并你的价值。
只需检查名为collect的Mage_Sales_Model_Quote_Address_Total_Abstract中的函数,并在函数开头添加以下代码。
foreach (Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems() as $item ) {
if ($item->getParentItem()) {
$item = $item->getParentItem();
}
$item->setTaxAmount(20);
$item->getProduct()->setIsSuperMode(true);
}
当然你应该覆盖这个方法。如果要在模块的config.xml中覆盖
,请在下面使用<sales>
<quote>
<totals>
<wrapping>
<class>pay/total_taksit</class>
<before>subtotal</before>
</wrapping>
</totals>
</quote>
</sales>