Magento 下单后重新计算总计

Magento 下单后重新计算总计,magento,magento-1.8,Magento,Magento 1.8,下单后,我尝试使用magento事件观察程序重新计算magento总计。我使用下面的代码来计算总计 观察函数 public function recalculateTotal($observer){ //var_dump($observer->getOrder()->getData());exit; $orderModel = $observer->getOrder(); //echo "<pre>";print_r($orderModel-

下单后,我尝试使用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;
}
公共功能重新计算总计($observer){
//变量转储($observer->getOrder()->getData());退出;
$orderModel=$observer->getOrder();
//echo“”;打印($orderModel->getData());echo“”;退出;
$saveModel=Mage::getModel('sales/order')->load($orderModel->getId());
$saveModel->setsource(10);
$saveModel->setbase附加费(10);
$saveModel->collectTotals();
$saveModel->save();
echo“”;打印($orderModel->getData());echo“”;退出;
}
事件

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;
}

独生子女
附加费/观察员
重新计算

但是没有任何变化,请帮助。

您无法重新计算订单总数。此方法仅适用于报价单。如果您想添加您的个人价值,您必须在事件之后使用:
sales\u quote\u collect\u totals\u

在模块的config.xml中,您应该添加如下内容,以将报价中的总额转换为订单:


*
*
直接更改订单总数:

公共功能重新计算总计($observer){
//变量转储($observer->getOrder()->getData());退出;
$orderModel=$observer->getOrder();
//echo“”;打印($orderModel->getData());echo“”;退出;
$orderModel->SetSourceAmount(10);//通常所有合计都有“金额”后缀
$orderModel->Setbase附加费金额(10);
$orderModel->setGrandTotal($orderModel->getGrandTotal()+10);
$orderModel->setBaseGrandTotal($orderModel->getBaseGrandTotal()+10);
试一试{
$orderModel->save();
}捕获(例外$e){
echo$e->getMessage();
}
echo“”;打印($orderModel->getData());echo“”;退出;
}

PS:您必须更改报价和报价地址,但不能更改订单

谢谢您的replay@siarey,但这不起作用,因为我想在下订单后更改grandtotal。
<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;
}