2012-12-04 100 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> 
相關問題