Question

Je souhaite mettre à jour le statut si une commande contient des articles en rupture de stock.J'ai une configuration de statut personnalisée appelée « mis en quarantaine » et j'aimerais que cet ensemble soit défini si une commande est trouvée.J'ai essayé plusieurs façons de faire fonctionner cela, mais je n'ai pas de chance.Ceci est mon observateur, j'espère que quelqu'un pourra m'orienter dans la bonne direction.

$order = $observer->getEvent()->getOrder();
$items = $order->getAllItems();
$hasBackorderedItems = false;
foreach ($items as $item) {
     if ($item->getQtyBackordered() > 0) {
        $hasBackorderedItems = true;
        break;
     }
}

if ($hasBackorderedItems) {
    // I'm Stuck here. I need to change the current order status to quarantined (which is mapped to the state processing)
}
Était-ce utile?

La solution

Je suppose que vous vous connectez à un événement qui se déclenche sur commande sauvegarder, pas sales_order_place_after, qui est déclenché une fois la commande terminée.Si vous l'avez fait avec le premier, vous aurez alors une boucle infinie, où chaque mise à jour du statut de la commande déclenchera votre observateur encore et encore.Ce dernier semble être ce qui se passe.

Montre-nous ton config.xml.Essayer sales_order_place_after si vous ne l'utilisez pas déjà.

Autres conseils

/app/design/fronte/base/default/template/checkout/success.phtml (ou / /site/app/design/frontend/default/Yourtheme/template/checkout/success.phtml)

// état de commande ici

/*
    const STATE_NEW             = 'new';
    const STATE_PENDING_PAYMENT = 'pending_payment';
    const STATE_PROCESSING      = 'processing';
    const STATE_COMPLETE        = 'complete';
    const STATE_CLOSED          = 'closed';
    const STATE_CANCELED        = 'canceled';
    const STATE_HOLDED          = 'holded';
    const STATE_PAYMENT_REVIEW  = 'payment_review';
 */



// Retrieve order
$_order = new Mage_Sales_Model_Order();
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$_order->loadByIncrementId($orderId);
// Update order
$order = Mage::getModel('sales/order')->loadByIncrementID($orderId);
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
$order->save();
// Write your success Massage  here 

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