Estamos usando um módulo personalizado que requer o status: "completo" (não consigo alterar o módulo porque ele usa o ioncube)
Também estamos usando um sistema de pagamento que não oferece a opção de status: "completo"
Portanto, minha pergunta é: como forçar um pedido para ir ao status completo?
PS: Isso não 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
fonte
fonte
Respostas:
Não é permitido definir manualmente o estado do pedido como 'concluído' e você deve receber essa exceção ao chamar
setState
o pedido com o estado 'concluído':A razão para isso é simples: o estado 'completo' (e o status, já que é o único estado com o status 'completo') pretende indicar que um pedido foi completamente preenchido. Ou seja, foi colocado, faturado e enviado ao cliente.
Depois que o pedido for faturado e enviado, o Magento definirá esse estado no pedido automaticamente.
Se o seu sistema de pagamento "não permitir" o status 'completo', não confiaria nele, especialmente com a codificação do ionCube. Se, no entanto, é porque está lidando com o faturamento fora do Magento, você precisará gerar manualmente uma fatura "Off-line" para o pedido, para que o Magento reconheça que foi pago.
Não tente se enganar, contornando o problema de os pedidos não atingirem o estado concluído, como normalmente deveriam. Em vez disso, corrija o problema real, certificando-se de que os pedidos sejam faturados e enviados no Magento para que sejam marcados como concluídos pelo sistema.
fonte
Para alterar o estado:
Para alterar o status:
E depois
$order->save();
Você deve alterar o estado usando
setData
para evitar que a exceção diga que você não pode ligar manualmentesetState
fonte
Tente isso.
Funciona para mim no meu projeto ..
fonte
fonte