- 25 Out 2011, 09:53
#10880
Para quem está com problemas de fazer os produtos voltarem ao estoque após um pedido ser cancelado na versão 1.5.1.3, a solução pode ser mais simples do que parece. Já existe um código escrito para resolver este problema, porém, ele está dentro de uma condição ainda não definida nas configurações do sistema. Entretanto, é possível desativar essa condição para que o código seja executado e, assim que o pedido é removido os produtos retornam ao estoque.
O código que repõe o estoque é executado somente quando o pedido é removido (deletado) e não quando é adicionado a opção "Cancelado" no status do pedido.
Segue a solução:
1. edite o arquivo /admin/model/sale/order.php e procure por:
public function deleteOrder($order_id) {
2. comente o if adicionando duas barras na frente das linhas abaixo:
if ($this->config->get('config_stock_subtract')) {
}
... desta forma:
// if ($this->config->get('config_stock_subtract')) {
// }
3. ficará assim:
O código que repõe o estoque é executado somente quando o pedido é removido (deletado) e não quando é adicionado a opção "Cancelado" no status do pedido.
Segue a solução:
1. edite o arquivo /admin/model/sale/order.php e procure por:
public function deleteOrder($order_id) {
2. comente o if adicionando duas barras na frente das linhas abaixo:
if ($this->config->get('config_stock_subtract')) {
}
... desta forma:
// if ($this->config->get('config_stock_subtract')) {
// }
3. ficará assim:
Código: Selecionar todos
Espero ter ajudado. public function deleteOrder($order_id) {
//if ($this->config->get('config_stock_subtract')) {
$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND order_id = '" . (int)$order_id . "'");
if ($order_query->num_rows) {
$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");
foreach($product_query->rows as $product) {
$this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_id = '" . (int)$product['product_id'] . "'");
$option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'");
foreach ($option_query->rows as $option) {
$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
}
}
}
//}
$this->db->query("DELETE FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_transaction WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_reward WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "affiliate_transaction WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "coupon_history WHERE order_id = '" . (int)$order_id . "'");
}