Eliminar un artículo de la cotización del pedido del administrador y agregar un nuevo artículo mediante programación
-
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.
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