Remover um item da cotação do pedido administrativo e adicionar um novo item programaticamente

magento.stackexchange https://magento.stackexchange.com//questions/70109

  •  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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top