Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Status: Aguardando pagamento vs nível de estoque #62

Closed
bruno-rodrigues opened this issue Jan 5, 2018 · 5 comments
Closed

Status: Aguardando pagamento vs nível de estoque #62

bruno-rodrigues opened this issue Jan 5, 2018 · 5 comments

Comments

@bruno-rodrigues
Copy link

Boa noite,

Gostaria de ilustrar um possível edge case com relação a alteração de status dentro do plugin woocommerce-pagseguro:

Tenho apenas 3 itens em estoque de um produto que já saiu de linha. Um cliente vem e faz o pedido e seleciona boleto como forma de pagamento (pedido 1).

Pelo que futriquei aqui no source, o estoque não é baixado quando um item vai para o status on-hold:

$order->update_status( 'on-hold', __( 'PagSeguro: The buyer initiated the transaction, but so far the PagSeguro not received any payment information.', 'woocommerce-pagseguro' ) );

Portanto, esse mesmo cliente volta no e-commerce e faz outro pedido para 3 unidades desse mesmo item (que está fora de linha) e seleciona boleto como forma de pagamento (pedido 2).

O WC gera esse novo pedido normalmente...

Então, esse abençoado cliente paga os 2 boletos, alterando os status dos pedidos 1 e 2 para processando. O que atualiza o estoque para 0 e -3, respectivamente:

Caso o status fosse alterado para wc-pending eu poderia usar a opção woocommerce_hold_stock_minutes do WooCommerce que "em tese", bloqueia o estoque por x minutos para evitar esse tipo de situação.

Compreendo que não faz sentido usar wc-pending, portanto sugiro que usemos a mesma abordagem do método original do WC cheque:

public function process_payment( $order_id ) {

	$order = wc_get_order( $order_id );

	// Mark as on-hold (we're awaiting the cheque)
	$order->update_status( 'on-hold', _x( 'Awaiting check payment', 'Check payment method', 'woocommerce' ) );

	// Reduce stock levels
	$order->reduce_order_stock();

	// Remove cart
	WC()->cart->empty_cart();

	// Return thankyou redirect
	return array(
		'result' 	=> 'success',
		'redirect'	=> $this->get_return_url( $order )
	);
}

E, caso o boleto não seja pago, após a notificação pagseguro faríamos o "estorno" do estoque.
Faz sentido o que estou falando? O que pensa a respeito disso @claudiosanches?

@bruno-rodrigues
Copy link
Author

bruno-rodrigues commented Jan 5, 2018

Vendo esse vídeo no canal oficial do WC, me faz crer que seria plausível o uso do status pending ao invés de on-hold quando o plugin recebe a notificação de código 1: Aguardando pagamento: o comprador iniciou a transação, mas até o momento o PagSeguro não recebeu nenhuma informação sobre o pagamento..

Um pouco mais a frente nesse mesmo vídeo é citado que on-hold deveria reduzir o estoque...

@Chicodarave
Copy link

Putz Bruno!
Tive um problema desses bem recente!
Só que o pagamento do pedido em específico foi pelo PayPal, agora não sei o que fazer!
O site não pode vender um produto que não tenho em estoque.
Até pedi ajuda lá no forum do WordPress:
https://br.wordpress.org/support/topic/woocommerce-estoque-menor-que-zero-com-encomenda-desativada/

@bruno-rodrigues
Copy link
Author

Cara eu mexi num pouco de coisa aqui e tá funcionando :).
Quando o pedido entra on-hold eu baixo o estoque se, por ventura o pedido for cancelado, o estoque volta... Mas é ruim mexer em plugin pq dá maior trampo pra atualizar depois =(

@4n0n1mo
Copy link

4n0n1mo commented May 9, 2018

@bruno-rodrigues compartilha seu código por favor!

@claudiosanches
Copy link
Owner

@bruno-rodrigues estou tentando melhorar isso no core do WooCommerce, que vai ser bem melhor do que fazer algo para tentar controlar o estoque que as vezes vai ainda dar problemas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants