Rimuovi un elemento dalla citazione dell'ordine di amministrazione e aggiungi nuova voce programmaticamente
-
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.
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