在Magento后端编辑订单时遇到问题。在前端,我将产品添加到购物车时有自定义价格。后端的价格很好(按顺序显示和更正)但是当我点击编辑订单时,价格在Item
订单中不正确。我看到它得到了产品的默认价格。我尝试捕获事件sales_quote_save_before并尝试代码
$quote = $observer->getEvent()->getQuote();
foreach ($quote->getAllItems() as $item)
{
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
}
但我只是按顺序为每个项目设置自定义价格,我无法为订单设置小计和行小计。你能告诉我怎么做吗?非常感谢
答案 0 :(得分:0)
您可以通过编程方式设置小计和其他相关属性,如下所示:
$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);
请注意,如果您以这种方式进行更改,则某些报告可能无法正确计算订单(例如仪表板)
答案 1 :(得分:0)
可以尝试以下解决方案 -
可以通过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核心模块 - Mage_GiftMessage
那么,何时通过Adminpanel编辑订单 - 价格会相同。 但要小心低价:)
答案 2 :(得分:0)
添加到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;
}