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.

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:
Por:
Código: Selecionar todosif (!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 todosSyntaxError: 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>

Re: Não retornar item ao estoque apos cancelar pedido
Enviado: 18 Abr 2020, 15:33
por veteranodf
Correto abaixo;
Código: Selecionar todosif (!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
