Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


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 . "'");	}
Ссылка на комментарий
Поделиться на других сайтах


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

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


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

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


  • 1 год спустя...
  • 1 год спустя...
  • 7 месяцев спустя...
Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

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

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