Pregunta

Me gustaría actualizar el estado si un pedido tiene algún artículo pendiente. Tengo una configuración de estado personalizada llamada "en cuarentena" y me gustaría este conjunto si se encuentra un pedido. He intentado algunas maneras de trabajar, pero no tengo suerte. Este es mi observador, espero que alguien pueda señalarme en la dirección correcta.

$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)
}

¿Fue útil?

Solución

Supongo que está enganchando a un evento que se desencadena en orden Guardar , no sales_order_place_after, que se enciende una vez después de que se complete el pedido.Si lo hizo en el primero, entonces tendrá un bucle infinito, donde la actualización de estado de cada pedido activará su observador una y otra vez.Este último suena como podría ser lo que está sucediendo.

Muéstranos tu config.xml.Intente sales_order_place_after si aún no lo está usando.

Otros consejos

/app/design/frontend/base/default/template/checkout/success.phtml (o /site/app/design/frontend/default/yurtheme/template/checkout/success.phtml)

// orden de orden aquí

/*
    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 

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top