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

удаление заказа через mysql

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

Подскажите, какая команда служит для удаления заказа через mysql, если нет возможности удалить заказ через админку. Удалить нужно так, чтобы товар вернулся на склад после удаления заказа.

Пробовал так:

mysql> DELETE from `order` WHERE order_id = "номер заказа";

но товар Не возвращается на склад. 

Если удаляю через админку, товар возвращается на склад и доступен для нового заказа.

ЧЯДНТ?

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


Ссылка на сообщение
Поделиться на другие сайты
$this->db->query("DELETE FROM `" . DB_PREFIX . "order` WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_download WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_history WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_fraud WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_transaction WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_reward WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "affiliate_transaction WHERE order_id = '"номер заказа"'");

Теперь переформулировать вопрос нужно, как составить один запрос, ключ в которм был бы "номер заказа" 

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


Ссылка на сообщение
Поделиться на другие сайты
$this->db->query("DELETE FROM `" . DB_PREFIX . "order` WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_download WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_history WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_fraud WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_transaction WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "customer_reward WHERE order_id = '"номер заказа"'");
$this->db->query("DELETE FROM " . DB_PREFIX . "affiliate_transaction WHERE order_id = '"номер заказа"'");

Теперь переформулировать вопрос нужно, как составить один запрос, ключ в которм был бы "номер заказа" 

 

Так точно, буду очень признателен если кто-то поможет составить один запрос из всего этого

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


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

Хотя можно проще сделать, создать новую функцию, которая будет включать в себя все эти запросы по удалению и прикрепить её в нужном месте.

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


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

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

скучно живется и много свободного времени?

удаляйте через админку - для этого она и существует.

Теперь переформулировать вопрос нужно, как составить один запрос, ключ в которм был бы "номер заказа"

никак.

можно извращаться с процедурами, но одним запросом - никак.

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


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

скучно живется и много свободного времени?

удаляйте через админку - для этого она и существует.

никак.

можно извращаться с процедурами, но одним запросом - никак.

Объясню. Так как нормального возврата в opencart нет, приходится извращаться. У меня не магазин, а склад. Мне нужно, чтобы человек набрал себе товар (к примеру 10 наименований), а через некоторое время (это может случиться и ночью) его вернул на склад. Ночью я обычно сплю, и принимать товар обратно на склад я не могу. Поэтому с помощью программы autoit, создал простое приложение, которое получает на вход номер заказа и удаляет его. Приложение работает на основе консольных команд. Дать доступ к админке людям я дать не могу. Если кто-то предложит что-то другое, пожалуйста.

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


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

Объясню. Так как нормального возврата в opencart нет, приходится извращаться. У меня не магазин, а склад. Мне нужно, чтобы человек набрал себе товар (к примеру 10 наименований), а через некоторое время (это может случиться и ночью) его вернул на склад. Ночью я обычно сплю, и принимать товар обратно на склад я не могу. Поэтому с помощью программы autoit, создал простое приложение, которое получает на вход номер заказа и удаляет его. Приложение работает на основе консольных команд. Дать доступ к админке людям я дать не могу. Если кто-то предложит что-то другое, пожалуйста.

Сделай какой-нибудь контроллер, в котором размести процедуру удаления заказа из базы.

При этом, передавай в гет какую-нибудь секретную фразу, чтобы без нее ничего не удалялось.

 

Например: 

index.php?route=catalog/delete_order&secret=password&order_id=52

Пара условий в контроллере, подключенная моделька с заказами и все ок.

Я думаю, консоль способна отправить гет-запрос на сервер.

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


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

Если для магазина, то можете в файле: catalog\model\account\order.php
 
перед функцией:
public function getTotalOrderVouchersByOrderId($order_id) {
 
добавить свою: 

public function delOrderById($order_id) {
	
		$this->db->query("DELETE FROM `" . DB_PREFIX . "order` 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_voucher 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 . "order_history WHERE order_id = '" . (int)$order_id . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "order_fraud 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 . "'");
		
	}

в контроллере же, добавить вызов этой функции (controller\account\order.php):

     $this->data['delorid'] = $this->model_account_order->delOrderById($this->request->post['order_id']);

теперь остальсь создать форму, в ТПЛ файле, где постом будет передаваться значение заказа, тоесть его ИД.

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


Ссылка на сообщение
Поделиться на другие сайты
$this->db->query("DELETE FROM `" . DB_PREFIX . "order` WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_download WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_history WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "order_fraud WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "customer_transaction WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "customer_reward WHERE order_id = '"номер заказа"'");$this->db->query("DELETE FROM " . DB_PREFIX . "affiliate_transaction WHERE order_id = '"номер заказа"'");
Теперь переформулировать вопрос нужно, как составить один запрос, ключ в которм был бы "номер заказа"

Возвращаясь к этим запросам. Последовательное их выполнение всеравно не позволяет возвратить товар в магазин. Он не доступен для заказа. Заказ из админки удаляется.

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


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


public function delOrId($order_id) {

$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'] . "' AND subtract = '1'");

$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_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_voucher 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 . "order_history WHERE order_id = '" . (int)$order_id . "'");

$this->db->query("DELETE FROM " . DB_PREFIX . "order_fraud 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 . "'");

}

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


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

Ребята, в общем получилось удалить заказ и вернуть товар на склад с помощью запросов mysql. Вот таким образом:

INSERT INTO `return`(`product`, `model`, `quantity`, `order_id`) SELECT `name`, `model`, `quantity`, `order_id` FROM `order_product` WHERE `order_id` = "xxx";
INSERT INTO `return`(`order_id`, `firstname`, `email`, `telephone`, `comment`, `date_added`, `date_modified`) SELECT `order_id`, `firstname`, `email`, `telephone`, `comment`, `date_added`, `date_modified` FROM `order` WHERE `order_id` = "xxx";
UPDATE `product` SET quantity = "15" WHERE `product_id` in (SELECT `product_id` from `order_product` WHERE `order_id` ="xxx");
DELETE from `order` WHERE order_id = "xxx";

Теперь возникает другой вопрос:

в админке в разделе возвраты появляется несколько возвратов одного заказа. Связано это с тем, что каждый товар это отдельный возврат, а если у меня в заказе 10 товаров, то и в разделе возвратов будет 10 возвратов. Если есть спецы по mysql, подскажите как мне на уровне запроса mysql объединить эти, например, 10 возвратов в один, то есть выполнить слияние в один возврат.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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