Página 1 de 1

[Resolvido] Não retornar item ao estoque apos cancelar pedido

Enviado: 15 Abr 2020, 11:53
por reds
Bom dia pessoal
Eu gostaria de não retornar ao estoque os produtos após cancelar um pedido!

A nível de conhecimento, penso em escrever algo para canalizar isso, exemplo a loja vende com boleto que demora X dias para ser pago, quando o pedido é cancelado o produto volta ao estoque, mas eu gostaria de interromper isso e alertar o gestor do painel para que ele o faça manualmente, assim ele opta por continuar a vender o item ou não.

se alguém tiver uma dica onde eu devo modificar pra isso, sou grato. :D

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 15 Abr 2020, 14:08
por veteranodf
Olá @reds , tente da forma abaixo que irá funcionar;

Arquivo catalog\model\checkout\order.php

Localize:
Código: Selecionar todos
				// Restock
				$order_products = $this->getOrderProducts($order_id);

				foreach($order_products as $order_product) {
					$this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");

					$order_options = $this->getOrderOptions($order_id, $order_product['order_product_id']);

					foreach ($order_options as $order_option) {
						$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'");
					}
				}

Substitua por: Altere o ORDER_STATUS_ID pelo ID que seu status tem
Código: Selecionar todos
                // Restock
                if ($order_status_id !== 'ORDER_STATUS_ID') {
                    $order_products = $this->getOrderProducts($order_id);

                    foreach($order_products as $order_product) {
                        $this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");

                        $order_options = $this->getOrderOptions($order_id, $order_product['order_product_id']);

                        foreach ($order_options as $order_option) {
                            $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'");
                        }
                    }
                }

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 15 Abr 2020, 17:15
por reds
@veteranodf

Cara obrigado pela dica,
Então eu desejo que os pedidos cancelados não façam o re-stock, ai modifiquei assim, e em teste esta ok
Código: Selecionar todos
	// Restock
					$order_products = $this->getOrderProducts($order_id);
					
				// =========== no re-stock
				//============================
				if ($order_status_id !== '7') {
					foreach($order_products as $order_product) {
						$this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");

						$order_options = $this->getOrderOptions($order_id, $order_product['order_product_id']);

						foreach ($order_options as $order_option) {
							$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'");
						}
					}
				} 
				//=========================
				//=========================
Mas estou testando ainda para ser mais preciso.

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 16 Abr 2020, 11:33
por veteranodf
Maravilha é isso mesmo, acabei passando a alteração errada e vc notou e corrigiu, fiz a correção; Vai da certo sim;

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 18 Abr 2020, 09:49
por reds
@veteranodf
Uma ajudinha se possível,
Caso eu queira pegar mais que 1 status como eu consigo fazer isso?
Por exemplo, quero pegar os status 1, 2,3,4 assim por adiante.

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 18 Abr 2020, 10:58
por veteranodf
Bom dia @reds , faça a modificação abaixo;

Substituir:
Código: Selecionar todos
if ($order_status_id !== '7') {
Por:
Código: Selecionar todos
if (!in_array($order_status_id, array('7', 'ID2', 'ID3', 'ID4')) {

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 18 Abr 2020, 13:56
por reds
Muito obrigado @veteranodf

Fiz um teste aqui e retornou um erro com a linha abaixo.
Código: Selecionar todos
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
OK
<b>ParseError</b>: syntax error, unexpected 'foreach' (T_FOREACH) no arquivo <b>C:\wamp\www\store_test\system\storage\modification\catalog\model\checkout\order.php</b> na linha <b>385</b>
:D

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 18 Abr 2020, 15:33
por veteranodf
Correto abaixo;
Código: Selecionar todos
if (!in_array($order_status_id, array('7', 'ID2', 'ID3', 'ID4'))) {

Re: Não retornar item ao estoque apos cancelar pedido

Enviado: 18 Abr 2020, 15:37
por reds
Poxxa tinha passado despercebido tbm, rsrs

Muito obrigado pela ajuda, grato!
Agora ficou showwwwwww

:D