Supprimer un article du devis de commande administrateur et ajouter un nouvel article par programme

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

  •  13-12-2019
  •  | 
  •  

Question

Je travaille sur un projet qui doit être peaufiné création de commande administrative fonction de magento.

Je dois supprimer un élément, puis en ajouter un autre par programme lors de la création de la commande.

Par exemple, quelques articles sont déjà ajoutés à la commande, maintenant si l'identifiant du produit correspond à my_product_id, supprimez ce produit de quote et ajoutez un nouveau produit (my_new_product) commander.

Ce ne sera pas de observer, puisque je devrai ajouter un bouton pour appeler cette action et faire le travail.

J'ai ajouté avec succès un bouton et lié à mon contrôleur personnalisé.

J'ai parcouru plein de liens, mais sans succès.

Veuillez suggérer.

Était-ce utile?

La solution 2

Après avoir creusé pendant quelques jours, j'ai pu obtenir le résultat.

Un grand merci à @lloiacono pour m'avoir indiqué la bonne direction, mais sa réponse n'était pas assez bonne.

Dans mon fichier contrôleur :

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

Autres conseils

Mise à jour

Puisqu'il vous suffit de modifier la création de commandes d'administration existante, vous pouvez vous connecter à : sales_order_save_before ou adminhtml_sales_order_create_process_data mais assurez-vous de l'ajouter au <adminhtml> nœud dans votre config.xml.

Une fois dans votre Observer.php, vous pouvez supprimer les éléments que vous souhaitez, j'essaierais plutôt de me connecter à un événement de citation également dans le <adminhtml> nœud, puis supprimez l'article au niveau du devis si possible.

Pour ajouter un article au devis :

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

Pour supprimer un article du devis :

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

Ensuite, vous pouvez demander à magento de créer la commande d'administration :

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

Il y a une réponse très complète ici : https://magento.stackexchange.com/a/15050/5913

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top