Php 在后端magento中编辑订单时价格不正确

Php 在后端magento中编辑订单时价格不正确,php,magento,edit,backend,Php,Magento,Edit,Backend,我在Magento后端编辑订单时遇到问题。在前端,我有自定义价格时,添加产品到购物车。“后端显示”中的价格良好,并且顺序正确,但当我单击“编辑顺序”时,项目顺序中的价格不正确。我看到它得到了产品的默认价格。我尝试捕捉活动销售_quote _save _,然后尝试代码 $quote = $observer->getEvent()->getQuote(); foreach ($quote->getAllItems() as $item) { $item->setCusto

我在Magento后端编辑订单时遇到问题。在前端,我有自定义价格时,添加产品到购物车。“后端显示”中的价格良好,并且顺序正确,但当我单击“编辑顺序”时,项目顺序中的价格不正确。我看到它得到了产品的默认价格。我尝试捕捉活动销售_quote _save _,然后尝试代码

$quote = $observer->getEvent()->getQuote(); 
foreach ($quote->getAllItems() as $item)
{
 $item->setCustomPrice($price);
 $item->setOriginalCustomPrice($price);
} 

但我只为订单中的每个项目设置自定义价格,不能为订单设置小计和行小计。你能告诉我怎么做吗?非常感谢

您可以通过编程设置小计和其他相关属性,如下所示:

$order = Mage::getModel('sales/order')->setIncrementId($reservedOrderId)->setStoreId($storeId); // if saving new one

$order = Mage::getModel('sales/order')->loadByIncrementId('10012345');    //if loading product
$order->setSubtotal($sub_total)
$order->setBaseSubtotal($base_sub_total)
$order->setTaxAmount($some_tax_price)
$order->setGrandTotal($grand_total)
$order->setBaseGrandTotal($base_grand_total);

请注意,如果您以这种方式进行更改,则某些报告可能无法正确计算订单,例如dashboard

可以尝试以下解决方案-

可以通过Magento模块创建解决方案

一, config.xml,需要添加带有事件sales的块\u convert\u order\u item\u to \u quote\u item-like

您可以检查Magento核心模块-Mage_GiftMessage

所以,什么时候可以通过Adminpanel编辑订单-价格将相同。
但要注意低价:

添加到Magefast的解决方案中,我发现在使用可配置产品时,您还需要在父项上设置CustomPrice。报价将包含两个简单+可配置的产品,您希望确保两行都用自定义价格更新

观察者方法:

public function setCustomPriceForItem($observer)
{
    $quoteItem = $observer->getQuoteItem();
    $orderItem = $observer->getOrderItem();

    $session = Mage::getSingleton('customer/session');

    if ($session != null && !$session->getReordered() && $orderItem->getOriginalPrice() != $orderItem->getPrice()) {            
        $quoteItem->setCustomPrice($orderItem->getPrice());
        $quoteItem->setOriginalCustomPrice($orderItem->getPrice());

        //also update the price on the parent item
        if ($parentQuoteItem = $quoteItem->getParentItem()) {                  
            $parentQuoteItem->setCustomPrice($orderItem->getPrice());
            $parentQuoteItem->setOriginalCustomPrice($orderItem->getPrice());
        }
    }

    return $this;
}
也看到

public function salesEventOrderItemToQuoteItemPrices($observer)
{

    /** @var $orderItem Mage_Sales_Model_Order_Item */
    $orderItem = $observer->getEvent()->getOrderItem();
    $quoteItem = $observer->getEvent()->getQuoteItem();
    // Do not import giftmessage data if order is reordered
    $order = $orderItem->getOrder();
    if ($order && $order->getReordered()) {
        return $this;
    }

    // mage::log($orderItem->getData('price'));
    // mage::log($quoteItem->getProduct()->getData('price'));

    if ($orderItem->getData('price') && $orderItem->getData('price') != '') {

        $quoteItem->setCustomPrice($orderItem->getData('price'));
        $quoteItem->setOriginalCustomPrice($orderItem->getData('price'));
    }

    return $this;
}
public function setCustomPriceForItem($observer)
{
    $quoteItem = $observer->getQuoteItem();
    $orderItem = $observer->getOrderItem();

    $session = Mage::getSingleton('customer/session');

    if ($session != null && !$session->getReordered() && $orderItem->getOriginalPrice() != $orderItem->getPrice()) {            
        $quoteItem->setCustomPrice($orderItem->getPrice());
        $quoteItem->setOriginalCustomPrice($orderItem->getPrice());

        //also update the price on the parent item
        if ($parentQuoteItem = $quoteItem->getParentItem()) {                  
            $parentQuoteItem->setCustomPrice($orderItem->getPrice());
            $parentQuoteItem->setOriginalCustomPrice($orderItem->getPrice());
        }
    }

    return $this;
}