【问题标题】:Price is not correct when edit order in back end magento在后端 magento 中编辑订单时价格不正确
【发布时间】:2015-04-17 03:15:27
【问题描述】:

我在 Magento 后端编辑订单时遇到问题。在前端,将产品添加到购物车时我有自定义价格。后端的价格很好(按顺序显示并更正),但是当我单击编辑订单时,Item 订单中的价格不正确。我已经看到它获得了产品的默认价格。我尝试捕捉事件 sales_quote_save_before 并尝试代码

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

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

【问题讨论】:

    标签: php magento edit backend


    【解决方案1】:

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

    $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);
    

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

    【讨论】:

      【解决方案2】:

      可以尝试以下解决方案 -

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

      1) config.xml,需要添加带有事件 sales_convert_order_item_to_quote_item 的块 - 比如

      <adminhtml>
          <events>
              <sales_convert_order_item_to_quote_item>
                  <observers>
                      <orderpricesfromoldorder_old_prices>
                          <type>singleton</type>
                          <class>Magefast_OrderPricesFromOldOrder_Model_Observer</class>
                          <method>salesEventOrderItemToQuoteItemPrices</method>
                      </orderpricesfromoldorder_old_prices>
                  </observers>
              </sales_convert_order_item_to_quote_item>
          </events>
      </adminhtml>
      

      2) 带有函数/方法的观察者文件 - 类似

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

      您可以查看 Magento Core 模块 - Mage_GiftMessage

      因此,何时通过管理面板编辑订单 - 价格将相同。 但要小心低价:)

      【讨论】:

        【解决方案3】:

        除了 Magefast 的解决方案之外,我发现在使用可配置产品时,您还需要在父项上 setCustomPrice()。报价将包含简单 + 可配置的产品,您要确保这两行都使用自定义价格进行更新。

        观察者法:

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

        另见https://magento.stackexchange.com/questions/62422/getting-quote-cart-items-programatically-shows-duplicate-skus-for-both-the-con

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-26
          • 2014-03-20
          • 2023-03-20
          • 2017-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多