Trocando status/estado de um pedido no Magento (via PHP)

magento-imagem-status-01

Ao desenvolver meu primeiro módulo de método de pagamento me deparei com essa necessidade, e fica aqui a dica para quem precisar.

É bem simples trocar o status de uma order (pedido) no Magento.

Antes de qualquer coisa, status (idem em inglês) e estado (state) de um pedido não são as mesmas coisas.

Eu mesmo cito a palavra status me referindo ao estado de um pedido.

Antes que eu possa deixá-lo mais confuso, vamos ao ponto.

Os estados (states) são referentes a processos.

Todo pedido tem um estado que traduz o processo no qual o pedido se encontra. Porém um estado não é visível no backoffice do Magento.

Já o status nada mais é do que a situação atual do processo em que o pedido se encontra em sua loja Magento.

Um estado pode ter um ou vários status. Porém, normalmente em pequenas e médias operações com Magento acabamos usando apenas um status para cada processo.

Vejamos a seguinte tabela:

magento-imagem-status-02

Porém você pode adicionar novos status a um estado.

Vejamos o exemplo de um config.xml que acrescenta essa funcionalidade:

<config>
 ...
 <global>
 <sales>
 <order>
 <!-- Declarando o novo status -->
 <statuses>
 <my_processing_status translate="label"><label>My Status de Processamento</label></my_processing_status>
 </statuses>
 <!-- Ligado o novo status ao Estado -->
 <states>
 <processing>
 <statuses>
 <my_processing_status />
 </statuses>
 </processing>
 </states>
 </order>
 </sales>
 </global>
</config>

Dessa forma o seu novo status irá passar a existir caso o módulo em questão esteja carregado. O primeiro passo para mudar o estado ou status de um pedido é carregar o mesmo:

$order = Mage::getModel(‘sales/order’)->load($id_of_order);

Agora iremos utilizar o método setState. Com ele iremos definir o estado e status de um pedido. Veja a descrição do método:

$order->setState($orderState, $orderStatus, $message, $isCustomerNotified);

* orderState: o estado (state) do pedido: processing, complete, entre outros.
* orderStatus: status do estado do pedido.
* message (opcional): mensagem que ficará visível na área de comentários do pedido na página do pedido em questão.
* isCustomerNotified: define se o cliente irá ser notificado via email (normalmente pelo template de atualização de pedido).

Veja o exemplo:

$order = Mage::getModel('sales/order')->loadByIncrementId('100000001');
$state = 'processing';
$status = 'my_processing_status'; //status criado por nós anteriormente.
$comment = 'Changing state to Processing and status to My Processing Status';
$order->setState($state, $status, $comment, false);
$order->save();

Repare que é necessário usar o método save() após utilizar o método setState.

[toggle title=”Fonte”]
http://denisspalenza.com/
[/toggle]

2014-08-29T14:07:24+00:00