Magento自定义购物车/结帐价值在"Place Order"重置



我们使用Magento Enterprise 1.10,并一直在实施一种自定义方式,为特定产品提供免费送货和免税服务。我已经成功地在购物车和Onepage结账中实现了这方面的显示部分(步骤5)。我遇到的问题是,当您单击"下订单"时,它会删除(或重置)subTotal、grandTotal和taxAmount的自定义值。我可以在sales_flat_quote和sales_flat_quote_item表中看到,这些值是用我给它的自定义值设置的。但sales_flal_quote_address表中的grandTotal和taxAmount没有正确设置(不确定这是否相关,但假设)。他们正在重新计算的默认方式马根托计算他们。

例如,我可以将TaxAmount设置为自定义值,比如20美元。但Magento会把产品价格和税率重新计算出来。如果这有道理的话。

我已经在我们的OnepageController.php方法saveOrderAction()中指出了这一点

if ($data = $this->getRequest()->getPost('payment', false)) {
$this->getOnepage()->getQuote()->getPayment()->importData($data);
}

这段代码用Magento通常在中设置的方式替换了我设置的自定义值

我的问题是,为什么要阻止上面的代码块重新计算值,只使用我已经在中设置的值

Mage::getSingleton('checkout/session')->getQuote()

提前感谢

我不认为覆盖onepage控制器是应用自定义折扣/税收的最佳方式。最好在事件sales_quote_collect_totals_after上放置一个观察员,并在此处重新计算订单总额/修改项目/应用折扣。

此外,我经常看到人们犯错误,忘记调用collectTotals(),或者忘记保存更改,即

$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->setGrandTotal(999.99)->save();

如果我没有抓住你问题的要点,请提供进一步的细节。您在订单表中使用自定义列吗?

向致以最良好的问候

您不能像下面这样设置订单金额。

$quote->setGrandTotal(999.99)->save();

因为小计、合计和税额是订单总额,并且是在调用以下代码时计算的。

$quote->collectTotals();

这将合并您的价值。

只需检查Mage_Sales_Model_Quote_Address_Total_Abstract中名为collect的函数,并在函数开头添加以下代码。

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>

最新更新