2012-12-04 75 views
0

我们正在使用Magento Enterprise 1.10,并已实施了一种自定义的方式来提供免费送货,并且对特定产品不征税。我已成功在购物车和Onepage结帐中实现了此显示部分(步骤5)。我遇到的问题是当您点击“Place Order”时,它会删除(或重置)subTotal,grandTotal和taxAmount的自定义值。我可以在sales_flat_quote和sales_flat_quote_item表中看到,这些值是使用我给出的自定义值设置的。但是sales_flat_quote_address表中的grandTotal和taxAmount没有正确设置(不确定这是否相关,但假设)。他们正在重新计算Magento计算它们的默认方式。Magento自定义购物车/结帐值重置为“下订单”

因此,举例来说,我可能会设置一个自定义值为20美元的值。但是Magento需要产品价格和税率并重新计算。如果这是有道理的。

我已经查明,在我们的方法saveOrderAction(OnepageController.php)

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

这一段代码被替换我已经设置与Magento的通常是如何将他们在自定义的值:

我的问题是有什么原因,以防止上面的代码块从重新计算的值,只需使用我已经在设定值:

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

提前致谢,

回答

0

我不认为重写onepage-controller是应用自定义折扣/税收的最佳方式。最好在事件sales_quote_collect_totals_after上安排观察员,并在此处重新计算订单总额/修改项目/应用折扣。

而且,我经常看到有人做,他们忘记调用collectTotals(错误),或者说他们忘记保存自己的变化,即

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

如果我错过了你的问题的点,请提供更多细节。你在订单表中使用自定义列吗?

此致敬礼

0

您不能设置下面的订单金额。

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

因为小计,grandtotal,税额是订单总数,并要求下面的代码时计算。

$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> 
相关问题