Estamos utilizando un módulo personalizado que requiere el estado: "completo" (no puedo cambiar el módulo porque usa ioncube)
También estamos utilizando un sistema de pago que no ofrece la opción de estado: "completo"
Entonces mi pregunta es: ¿Cómo puedo forzar una orden para que se complete el estado?
PD: esto no funciona:
$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();
order-status
Bob van Luijt
fuente
fuente
Respuestas:
No está permitido establecer manualmente el estado del pedido en 'completo' y debería recibir esta excepción cuando llame
setState
al pedido con el estado 'completo':La razón de esto es simple: el estado 'completo' (y el estado, ya que es el único estado con un estado de 'completo') está destinado a indicar que un pedido se ha completado por completo. Es decir, se ha colocado, facturado y enviado al cliente.
Una vez que el pedido ha sido facturado y enviado, Magento establecerá este estado en el pedido automáticamente.
Si su sistema de pago "no permite" el estado 'completo', entonces no confiaría en él, especialmente si está codificado con ionCube. Sin embargo, si es porque está manejando la facturación fuera de Magento, entonces deberá generar manualmente una factura "fuera de línea" para el pedido, de modo que Magento reconozca que se ha pagado.
No intente hacer un cambio corto evitando el problema de que las órdenes no lleguen al estado completado como deberían hacerlo normalmente. En su lugar, solucione el problema real asegurándose de que los pedidos se facturen y envíen en Magento para que el sistema los marque como completos.
fuente
Para cambiar el estado:
Para cambiar el estado:
Y entonces
$order->save();
Debe cambiar el estado utilizando
setData
para evitar que la excepción le indique que no puede llamar manualmentesetState
fuente
Prueba esto.
A mí me funciona en mi proyecto.
fuente
fuente