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

Disponibilizar o boleto do painel Minha Conta #129

Closed quasemineira closed 5 years ago

quasemineira commented 5 years ago

A integração da Vindi não exibe o boleto para o cliente fazer download ou visualizar no painel "Minha conta" do Woocommerce, após a finalização da compra.

Muitas vezes ele não faz o download do boleto imediatamente após a compra e não tem como pegar o boleto pelo painel, apenas nos e-mails da Vindi.

Acontece que o e-mail das notificações vai com o domínio da Vindi e para muitos clientes acaba caindo na caixa de spam e segundo que agora como o boleto bancário tem que ser registrado a cliente não consegue pagar na hora e acaba não salvando no computador ou no celular.

Eu queria que a integração disponibilizasse o boleto ou pelo menos o link da fatura na conta do cliente dentro do painel "Minha conta" do Woocommerce, assim como ocorre em vários outros meios de pagamento como o pagseguro, o mercado pago e etc.

soareseneves commented 5 years ago

Implementei isso dessa forma:

add_filter( 'woocommerce_my_account_my_orders_actions', array( &$this, 'imprimir_boleto_vindi'), 50, 2 );

public function imprimir_boleto_vindi( $actions, $order ) {
    if ( in_array($order->status, ['on-hold', 'pending']) && $order->get_payment_method() == 'vindi-bank-slip' ) {
        $link_boleto = get_post_meta($order->ID, 'vindi_wc_invoice_download_url', true);
        $actions['imprimir-boleto'] = array(
            'url'  => $link_boleto,
            'name' => 'Imprimir Boleto'
        );
    }
    return $actions;
}
soareseneves commented 5 years ago

Caso deseje adicionar um botão imprimir boleto na lista de assinaturas também (com base no último pedido da assinatura), utilize esse código:

add_action( 'woocommerce_my_subscriptions_actions', array( &$this, 'action_imprimir_boleto'), 10 );

function imprimir_boleto_vindi_assinatura($subscription){
    if ( in_array($subscription->status, ['on-hold', 'pending']) && $subscription->get_payment_method() == 'vindi-bank-slip' ) {
        $related_orders = $subscription->get_related_orders();

        $order_id   = reset( $related_orders );
        $order      = wc_get_order( $order_id );

        if ( in_array($order->status, ['on-hold', 'pending']) && $order->get_payment_method() == 'vindi-bank-slip' ){
            $link_boleto = get_post_meta($order->ID, 'vindi_wc_invoice_download_url', true);
            echo "<a href='$link_boleto' class='button print'>Imprimir Boleto</a>";
        }
    }
}
quasemineira commented 5 years ago

Implementei isso dessa forma:

add_filter( 'woocommerce_my_account_my_orders_actions', array( &$this, 'imprimir_boleto_vindi'), 50, 2 );

public function imprimir_boleto_vindi( $actions, $order ) {
  if ( in_array($order->status, ['on-hold', 'pending']) && $order->get_payment_method() == 'vindi-bank-slip' ) {
      $link_boleto = get_post_meta($order->ID, 'vindi_wc_invoice_download_url', true);
      $actions['imprimir-boleto'] = array(
          'url'  => $link_boleto,
          'name' => 'Imprimir Boleto'
      );
  }
  return $actions;
}

Aqui não funcionou e deu erro :(

Parse error: syntax error, unexpected 'public' (T_PUBLIC), expecting end of file in ..../functions.php on line 279

Fatal error: Exception thrown without a stack frame in Unknown on line 0

soareseneves commented 5 years ago

É que eu tirei o código de um plugin que fiz, pra funcionar no functions.php vc precisa mudar um pouco, ficando assim:

add_filter( 'woocommerce_my_account_my_orders_actions', 'imprimir_boleto_vindi', 50, 2 );

function imprimir_boleto_vindi( $actions, $order ) {
    if ( in_array($order->status, ['on-hold', 'pending']) && $order->get_payment_method() == 'vindi-bank-slip' ) {
        $link_boleto = get_post_meta($order->ID, 'vindi_wc_invoice_download_url', true);
        $actions['imprimir-boleto'] = array(
            'url'  => $link_boleto,
            'name' => 'Imprimir Boleto'
        );
    }
    return $actions;
}
quasemineira commented 5 years ago

Deu super certo, obrigada!