Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


MusicMan08

Recommended Posts

Подскажите, какая команда служит для удаления заказа через 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.