Перейти к содержанию
john

[Решено] Проблема с остатком товара при отмене заказа

Рекомендуемые сообщения

Добрый день!Имеется следующая проблема - допустим на складе 100 единиц товара А, когда покупатель заказывает 1 единицу товара А, на складе остается, соответственно 99 единиц. Если я захочу удалить заказ, то единица товара не возвращается на склад, пробовал также не удалять заказ, а менять ему статус на "Неудавшийся", "Отменено", "Отменено и аннулировано", но все равно товар не возвращается на склад. Есть ли какое-нибудь решение этой проблемы? Буду очень признателен, так я не силён в PHP, и самому исправить вряд ли получиться. Заранее благодарен за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня OpenCart 1.4.8b. Там делается просто, т.к. в функции УдалитьЗаказ уже все есть. Но как в 0.0.1 я не знаю. Вот сама функция в 1.4.8:

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 . "'");	}
Не хватает только config_stock_subtract. Можно или добавить переменную для возможности выбора, или убрать проверку.

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 . "'");	}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое за ответ, у меня стоит ocStore v0.0.6, но я не понял, что Вы имели ввиду, что мне нужно поменять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати в демо админке в настройках системы есть функция Вычитать товар на складе, наверное, это то, что нужно. Как ее включить, у меня ее нет. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В админской части /model/sale/order.php, у меня строка 40, в функции

public function deleteOrder($order_id) {
надо удалить или закоментировать 2 строчки, как написано в предыдущем посте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое,теперь понятно :(, обязательно попробую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О, спасибо. А то тоже мучался, при удалении заказа количество на складе не восстанавливалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что нужно изменить или добавить в opencart 1.5.5.1 что бы после удаления заказа товары возвращались на склад?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После удаления заказа или удалении товара из заказа - товары на склад возвращаются. ocStore 1.5.5.2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.