我正在开发一个需要调整的项目 管理订单创建 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

许可以下: CC-BY-SA归因
scroll top