Skip to main content

Status de Pedido Personalizado

Uma ação que achei interessante depois de ver algumas pessoas procurando, é a opção de alterar o status do pedido para um valor personalizado. Isso é interessante se você deseja ter um controle maior dos processos ou até se você possui ações personalizadas.

No caso você poderia querer alterar o status do seu pedido para “Em Desenvolvimento“, ou “Aguardando Estoque“, “Em Trânsito“, “Em Produção“, “Aguardando Retirada“, enfim, inúmeras as possibilidades de status. Vejamos então como ativar este recurso na sua loja.

Atenção: Os procedimentos abaixo envolvem programação e alteração de arquivos do Core do sistema. Faça backup dos arquivos antes de executar qualquer alteração, e faça as alterações em um ambiente de testes antes de aplicar na loja em produção.

Neste exemplo iremos alterar 4 arquivos. Os testes foram feitos na versão 1.4.0.1 do Magento, podendo haver pequenas diferenças em outras versões.

Para começar vamos alterar o arquivo Grid.php que fica em app -> code -> core -> Mage -> Adminhtml -> Block -> Sales -> Order, responsável por carregar as opções de status na tela de Pedidos.

Dentro da função _prepareMassaction() lá pela linha 215 você deve ver um código comentado com //. Apenas retire as barras:

[php]$statuses = Mage::getSingleton(‘sales/order_config’)->getStatuses();
array_unshift($statuses, array(‘value’=>”, ‘label’=>”));
$this->getMassactionBlock()->addItem(‘change_status’, array(
‘label’=> Mage::helper(‘sales’)->__(‘Change Status’),
‘url’ => $this->getUrl(‘*/*/massStatus’),
‘additional’ => array(
‘visibility’ => array(
‘name’ => ‘status’,
‘type’ => ‘select’,
‘class’ => ‘required-entry’,
‘label’ => Mage::helper(‘sales’)->__(‘New Status’),
‘values’ => $statuses
)
)
));[/php]

Veja que no código acima ele carrega os status do arquivo config: Mage::getSingleton(‘sales/order_config’)->getStatuses();

Então vamos abrir este arquivo config.xml que fica em app -> code -> core -> Mage -> Sales -> etc, para inserirmos os status personalizados. Lá pela linha 544 você deve encontrar as tags <order><statuses> e dentro deste bloco todos os status personalizados disponíveis.

Incluiremos aqui a linha <transito translate=”label”><label>Em Transito</label></transito> ficando o bloco assim:

[xml]





[/xml]Inclua quantos status desejar, sempre cuidando para que sua tag tenha um valor único. Logo abaixo temos a tag <states> com os blocos identificados acima. Vamos inserir nosso bloco personalizado aqui também (logo abaixo de holded como no bloco anterior).

[xml]

[/xml]Lembra do código que descomentamos agora a pouco? Eu realmente espero que você lembre, senão você está com algum problema. :D

Depois de carregar a lista de status, ele chama uma função $this->getMassactionBlock() que fica no arquivo OrderController.php em app -> code -> core -> Mage -> Adminhtml -> controllers -> Sale. Procure pela função que deve estar lá pela linha 395.

Para nossa surpresa o método está em branco, ou seja, ele não faz nada. Será que a equipe do Magento esqueceu de descomentar aquele código e criar as rotinas? Nunca saberemos. hehe. Bom, então vamos colocar nosso próprio código ali dentro, ficando assim:

[php]public function massStatusAction() {
$pedidosIds = $this->getRequest()->getPost(‘order_ids’, array());
$i=0;

foreach ( $pedidosIds as $pedidoId ) {
$order = Mage::getModel(‘sales/order’)->load( $pedidoId );
$order->setNovoStatus( $this->getRequest()->getPost(‘status’) )->save();
$i++;
}

if ( $i>0 ) {
$this->_getSession()->addSuccess( $this->__( ‘%s pedidos(s) com status atualizado(s)’, $i ) );
} else {
$this->_getSession()->addError( $this->__( ‘Nenhum status de pedido foi atualizado’ ) );
}

$this->_redirect(‘*/*/’);
}[/php]

Veja que para cada pedido selecionado eu chamo uma função setNovoStatus passando o valor selecionado na tela por você. Para que isso funcione precisamos criar esse método no arquivo Order.php que fica em app -> code -> core -> Mage -> Sales -> Model, lá pela linha 1157 você deve encontrar um comentário como este:

[php]/*********************** STATUSES ***************************/[/php]

Abaixo dele adicione o seguinte código:

[php]/**
* Altera o status do pedido
*
* @param string $valor
* @return Mage_Sales_Model_Order
*/
public function setNovoStatus( $valor=” ) {
$this->setState( $valor, true );

return $this;
}[/php]

E está pronto! Agora vamos aos testes. No seu backend vá em Vendas -> Pedidos para listar todos seus pedidos. Em seguida selecione os pedidos que deseja alterar o status e na combobox Ações selecione a opção Alterar Status. Uma nova combobox deve aparecer com as opções disponíveis, selecione o status e clique em Executar.

novos status

Os pedidos terão seus status alterados, e você poderá usar o filtro para visualizar apenas os status relacionados.

Sucesso!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *