Eliminar un artículo de la cotización del pedido del administrador y agregar un nuevo artículo mediante programación

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

  •  13-12-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un proyecto que necesita ajustes. creación de orden de administrador función de magento.

Necesito eliminar un elemento y luego agregar otro elemento mediante programación mientras creo el pedido.

Por ejemplo, ya se han agregado algunos artículos al pedido; ahora, si la identificación del producto coincide con my_product_id, retire ese producto de quote y agregar nuevo producto (my_new_product) ordenar.

no será de observer, ya que necesitaré agregar un botón para llamar a esta acción y hacer el trabajo.

Agregué exitosamente un botón y lo vinculé a mi controlador personalizado.

Revisé muchos enlaces, pero no tuve suerte.

Por favor recomiende.

¿Fue útil?

Solución 2

Después de excavar durante unos días, he podido obtener el resultado.

Una gran gracias a @lloiaiaco por señalarme hacia la dirección correcta, sin embargo, su respuesta no fue lo suficientemente buena.

en mi archivo 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;
    }

Otros consejos

Actualizar

Dado que solo necesita modificar la creación de la orden de administrador existente, puede conectarse a: pedido_venta_guardar_antes o adminhtml_sales_order_create_process_data pero asegúrese de agregar esto al <adminhtml> nodo en tu config.xml.

Una vez en su Observer.php, puede eliminar los elementos que desee. En su lugar, intentaría conectarme a un evento de cotización también en el <adminhtml> nodo y luego elimine el artículo a nivel de cotización si es posible.

Para agregar un artículo a la cotización:

$quote->addProduct($product, new Varien_Object($eventArgs));
$quote->save();

Para eliminar un artículo de la cotización:

$quote->removeItem($item->getItemId())->save();

Luego puedes hacer que magento cree el orden de administración:

$adminSalesOrderCreate = Mage::getSingleton('adminhtml/sales_order_create');
$adminSalesOrderCreate->setQuote($quote)->save();

Aquí hay una respuesta muy completa: https://magento.stackexchange.com/a/15050/5913

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top