Open soareseneves opened 5 years ago
O $order->payment_complete()
altera automaticamente o pedido para status final, certo?!
Hoje temos como opção os status: processing
, on-hold
e completed
.
Realizar alterações nesse hook não impede o funcionamento para o status on-hold
?
Talvez uma opção seja:
apply_filters('woocommerce_payment_complete_order_status',
$this->settings->get_return_status(), &$this->get_id(), &$this
);
Isso funciona? :thinking:
Sim, $order->payment_complete() altera para o status final, mas isso pode ser resolvido com o hook:
add_filter( 'woocommerce_order_item_needs_processing' , array($this, '__return_true') );
Dessa forma o pedido vai pro status processando.
A partir daí, caso vocês decidam manter aquela configuração do status $this->settings->get_return_status(), podem utilizar esse hook:
add_action( 'woocommerce_order_status_processing', array(&$this, 'status_processando'));
function status_processando($order_id){
$order = wc_get_order($order_id);
if ($this->settings->get_return_status() != 'processing')
$order->update_status($this->settings->get_return_status());
}
Dessa forma poderão utilizar o $order->payment_complete() e tudo continuará funcionando como está.
Estou solicitando isso pois por algum motivo a Vindi altera o status do pedido para "processando" (status que configurei na Vindi) duas ou mais vezes... Eu implementei o hook woocommerce_order_status_processing para alterar o status para personaliza que é um status customizado do meu site, porém após essa alteração, o status é novamente alterado para processando pois a Vindi dispara novamente a função bill_paid()...
Outra questão importante que acabei de descobrir, quando o método payment_complete não é chamado, o meta-dado '_paid_date' não é preenchido.
Gostaria de saber o porque do método payment_complete não é utilizado pelo plugin, mas apenas feita uma simples alteração no status do pedido para o status definido em configurações, essa função é a que deve ser utilizada ao efetuar o pagamento do pedido, seja por cartão, boleto ou qualquer outro método. Sem isso não é possível utilizar os hooks woocommerce_pre_payment_complete e woocommerce_payment_complete.
Quando um produto virtual/downloadable é comprado, ao executar o método payment_complete, o pedido vai direto para o status Concluído, talvez esse foi o motivo de não terem utilizado? Se for o caso, existe uma maneira de contornar isso:
add_filter( 'woocommerce_order_item_needs_processing' , array($this, '__return_true') );
Esse filter poderia ser uma opção nas configurações da Vindi.Acredito que quem deve controlar o fluxo de status dos pedidos é o desenvolvedor do site e não o gateway de pagamento em si, certo? Portanto se utilizarem o método payment_complete, o mesmo será alterado para o status processando ou concluído de acordo com a configuração acima, daí pra frente o dev poderá assumir o controle.