【问题标题】:Recalculate Total after Order place下订单后重新计算总计
【发布时间】:2016-03-25 05:11:13
【问题描述】:

我正在尝试在下订单后使用 magento 事件观察器重新计算 magento 总数。我使用下面的代码来计算总数。

观察者函数

public function recalculateTotal($observer){
    //var_dump($observer->getOrder()->getData());exit;
    $orderModel = $observer->getOrder();
    //echo "<pre>";print_r($orderModel->getData());echo "</pre>";exit;
    $saveModel = Mage::getModel('sales/order')->load($orderModel->getId());
    $saveModel->setSurcharge(10);
    $saveModel->setBaseSurcharge(10);
    $saveModel->collectTotals();
    $saveModel->save();
    echo "<pre>";print_r($orderModel->getData());echo "</pre>";exit;
}

事件

 <global>
    <events>
        <sales_order_place_after>
          <observers>
            <order_surcharge_display>
              <type>singleton</type>
              <class>surcharge/observer</class>
              <method>recalculateTotal</method>
            </order_surcharge_display>
          </observers>
        </sales_order_place_after>
  </events>

</global>

但没有任何改变,请帮忙。

【问题讨论】:

    标签: magento magento-1.8


    【解决方案1】:

    您无法重新计算订单总额。此方法仅适用于报价。您必须使用:sales_quote_collect_totals_after 事件,以防您想添加您的个人价值观。

    在您模块的 config.xml 中,您应该添加类似这样的内容,以将您的总数从报价转换为订单:

    <sales_convert_quote>
        <surcharge_amount>
            <to_order>*</to_order>
        </surcharge_amount>
        <base_surcharge_amount>
            <to_order>*</to_order>
        </base_surcharge_amount>
    </sales_convert_quote>
    

    直接更改订单总额:

    public function recalculateTotal($observer){
        //var_dump($observer->getOrder()->getData());exit;
        $orderModel = $observer->getOrder();
        //echo "<pre>";print_r($orderModel->getData());echo "</pre>";exit;
        $orderModel->setSurchargeAmount(10); // usually all totals has "amount" suffix
        $orderModel->setBaseSurchargeAmount(10);
        $orderModel->setGrandTotal($orderModel->getGrandTotal() + 10);
        $orderModel->setBaseGrandTotal($orderModel->getBaseGrandTotal() + 10);
        try {
            $orderModel->save();
        } catch (Exception $e) {
            echo $e->getMessage();
        }
        echo "<pre>";print_r($orderModel->getData());echo "</pre>";exit;
    }
    

    PS:报价单和报价单地址要改,顺序不行

    【讨论】:

    • 感谢您的重播@Siarhey 但这不起作用,因为我想在下订单后更改总计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多