Rimuovi un elemento dalla citazione dell'ordine di amministrazione e aggiungi nuova voce programmaticamente

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

  •  13-12-2019
  •  | 
  •  

Domanda

Sto lavorando su un progetto che ha bisogno di modificare Admin Order Creation Funzione di Magento.

Ho bisogno di rimuovere un oggetto e aggiungere un altro oggetto a livello di programmazione durante la creazione dell'ordine.

Ad esempio, alcuni elementi sono già aggiunti su ordinazione, ora se ID prodotto corrisponde a my_product_id, rimuovere quel prodotto da quote e aggiungi il nuovo prodotto (my_new_product) da ordinare.

Non sarà da observer, dal momento che avrei dovuto aggiungere un pulsante per chiamare questa azione e fare il lavoro.

Ho aggiunto con successo un pulsante e collegato al mio controller personalizzato.

Ho passato un sacco di collegamenti, ma senza fortuna.

Si prega di suggerire.

È stato utile?

Soluzione 2

Dopo aver scavato per alcuni giorni, sono stato in grado di ottenere il risultato.

Un grande ringraziamento a @lloiacono per indicarmi la giusta direzione, tuttavia la sua risposta non era abbastanza buona.

nel mio file controller:

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;
    }
.

Altri suggerimenti

Aggiornamento

Poiché è necessario modificare la creazione dell'ordine di amministrazione esistente, è possibile agganciare a: sales_order_save_brefore o adminhtml_sales_order_create_process_Data ma assicurati di aggiungere questo al nodo <adminhtml> in config.xml.

Una volta nel tuo Observer.php puoi rimuovere gli elementi che si desidera, tenterei invece di agganciare a un evento di preventivo anche nel nodo <adminhtml> e quindi rimuovere la voce a un livello di prelievo, se possibile.

Per aggiungere un elemento al preventivo:

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

Per rimuovere un elemento dalla citazione:

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

Allora puoi avere Magento Creare l'ordine amministratore:

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

C'è una risposta molto completa qui: https://magento.stackexchange.com/a/15050/5913

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top