vindi / vindi-woocommerce-subscriptions

Plugin de cobrança recorrente para WooCommerce Subscriptions e WordPress
https://wordpress.org/plugins/vindi-woocommerce-subscriptions/
GNU General Public License v3.0
20 stars 25 forks source link

Método $order->payment_complete() não utilizado #123

Open soareseneves opened 5 years ago

soareseneves commented 5 years ago

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.

laerte-guimaraes commented 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:

soareseneves commented 5 years ago

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()...

soareseneves commented 5 years ago

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.