Remover um item da cotação do pedido administrativo e adicionar um novo item programaticamente
-
13-12-2019 - |
Pergunta
Estou trabalhando em um projeto que precisa ser ajustado criação de pedido administrativo função do magento.
Preciso remover um item e adicionar outro item programaticamente ao criar o pedido.
Por exemplo, poucos itens já foram adicionados ao pedido, agora se o ID do produto corresponder ao my_product_id
, remova esse produto de quote
e adicione novo produto (my_new_product
) pedir.
Não será de observer
, já que precisarei adicionar um botão para chamar esta ação e fazer o trabalho.
Adicionei com sucesso um botão e vinculei ao meu controlador personalizado.
Eu passei por muitos links, mas sem sorte.
Por favor sugira.
Solução 2
Depois de desenterrar por alguns dias, consegui obter o resultado.
Um grande obrigado a @lloiacono por me indicar a direção certa, porém sua resposta não foi boa o suficiente.
No meu arquivo de controlador:
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;
}
Outras dicas
Atualizar
Como você só precisa ajustar a criação do pedido administrativo existente, você pode conectar-se a: vendas_pedido_salvar_antes ou adminhtml_sales_order_create_process_data mas certifique-se de adicionar isso ao <adminhtml>
nó em seu config.xml
.
Uma vez em seu Observer.php você pode remover os itens que desejar. Em vez disso, eu tentaria conectar-se a um evento de cotação também no <adminhtml>
nó e, em seguida, remova o item no nível da cotação, se possível.
Para adicionar um item à cotação:
$quote->addProduct($product, new Varien_Object($eventArgs));
$quote->save();
Para remover um item da cotação:
$quote->removeItem($item->getItemId())->save();
Então você pode fazer com que o magento crie o pedido de administração:
$adminSalesOrderCreate = Mage::getSingleton('adminhtml/sales_order_create');
$adminSalesOrderCreate->setQuote($quote)->save();
Há uma resposta muito completa aqui: https://magento.stackexchange.com/a/15050/5913