从管理订单报价中删除项目并以编程方式添加新项目
-
13-12-2019 - |
题
我正在开发一个需要调整的项目 管理订单创建 magento的功能。
我需要在创建订单时删除一个项目,然后以编程方式添加另一个项目。
例如,很少有商品已添加到订单中,现在如果产品 ID 与 my_product_id
, ,将该产品从 quote
并添加新产品(my_new_product
) 订购。
它不会来自 observer
, ,因为我需要添加一个 按钮 调用此操作并完成工作。
我已成功添加一个按钮并链接到我的自定义控制器。
我浏览了很多链接,但没有运气。
请建议。
解决方案 2
经过几天的挖掘,我已经得到了结果。
非常感谢 @lloiacono 为我指明了正确的方向,但他/她的回答还不够好。
在我的控制器文件中:
public function removeAndAddAction()
{
$quote = $this->_getSession()->getQuote();
foreach($quote->getAllItems() as $item){
$quote->removeItem($item->getId());
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$quote->addProduct($product, 1);
}
$quote->collectTotals()->save();
$this->_redirect('*/sales_order_create');
}
//get session
protected function _getSession()
{
$session = Mage::getSingleton('adminhtml/session_quote');
return $session;
}
其他提示
更新
由于您只需要调整现有的管理订单创建,您可以连接到: sales_order_save_before 或者 adminhtml_sales_order_create_process_data 但请确保将其添加到 <adminhtml>
节点在你的 config.xml
.
一旦进入 Observer.php,您就可以删除您想要的项目,我会尝试在 <adminhtml>
节点,然后在可能的情况下删除报价级别的项目。
要将项目添加到报价中:
$quote->addProduct($product, new Varien_Object($eventArgs));
$quote->save();
要从报价中删除项目:
$quote->removeItem($item->getItemId())->save();
然后你可以让magento创建管理订单:
$adminSalesOrderCreate = Mage::getSingleton('adminhtml/sales_order_create');
$adminSalesOrderCreate->setQuote($quote)->save();
这里有一个非常完整的答案: https://magento.stackexchange.com/a/15050/5913