0

私たちは Magento Enterprise 1.10 を使用しており、特定の製品を送料無料で税抜きにする独自の方法を実装しています。これの表示部分をカートと Onepage チェックアウト (ステップ 5) に正常に実装しました。私が抱えている問題は、[注文する] をクリックすると、subTotal、grandTotal、taxAmount のカスタム値が消去 (またはリセット) されることです。sales_flat_quote テーブルと sales_flat_quote_item テーブルで、指定したカスタム値で値が設定されていることがわかります。しかし、sales_flat_quote_address テーブルの grandTotal と taxAmount が適切に設定されていません (これが関連しているかどうかはわかりませんが、想定しています)。それらは、Magento が計算するデフォルトの方法で再計算されています。

たとえば、TaxAmount に $20 というカスタム値を設定できます。しかし、Magento は製品価格と税率を取得して再計算します。それが理にかなっていれば。

メソッド saveOrderAction() の OnepageController.php でそれを特定しました

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

コードのこのセクションでは、設定したカスタム値を、Magento が通常設定する方法に置き換えています。

私の質問は、上記のコードブロックが値を再計算するのを防ぎ、すでに設定した値を使用する理由があるということです:

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

前もって感謝します、

4

2 に答える 2

0

onepage-controller をオーバーライドすることが、カスタム割引/税金を適用する最良の方法だとは思いません。イベントにオブザーバーを配置し、sales_quote_collect_totals_afterここで注文合計を再計算/アイテムを変更/割引を適用することをお勧めします。

また、collectTotals() を呼び出すのを忘れたり、変更を保存するのを忘れたりするという間違いを犯している人々をよく見かけます。

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

質問の要点が分からない場合は、詳細をお知らせください。注文テーブルでカスタム列を使用していますか?

よろしくお願いします

于 2013-03-08T15:32:04.027 に答える
0

以下のような注文金額の設定はできません。

$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>
于 2014-02-12T09:37:38.573 に答える