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

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

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

Обыскал весь форум, но ответа так и не нашел. Может это только у меня? OpenCart 1.4.8b. Номер заказа формируется после перехода со страницы выбора способа оплаты на страницу подтверждения. Когда я на сранице где надо подтвердить заказ, то в базе уже заказ записан. Если вернуться и изменить что-то или в корзине или способ оплаты или доставки, то формируется еще один заказ уже с новым номером. Поэтому таблица order разрастается очень быстро. Как-бы сделать, чтобы и номер заказа и запись его в таблицу происходили-бы только после нажатия кнопки Подтвердить Заказ.

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


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

ну если Вам не влом, то можно перетащить из файла ..catalogcontrollercheckoutconfirm.php

все что начинается

$data = array();
и заканчивается

$this->session->data['order_id'] = $this->model_checkout_order->create($data);
в файл

..catalogcontrollercheckoutsuccess.php

а вообще беспокоится о лишних записях в индексированной БД, на сайте где на каждой страничке выполняется 30-50 запросов к БД, причем заказ переписывают далеко не каждую секунду, я думаю не стоит =)

и еще в функции $this->model_checkout_order->create($data);

есть такие строчки:

$query = $this->db->query("SELECT order_id FROM `" . DB_PREFIX . "order` WHERE date_added < '" . date('Y-m-d', strtotime('-1 month')) . "' AND order_status_id = '0'");foreach ($query->rows as $result) {	$this->db->query("DELETE FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$result['order_id'] . "'");	$this->db->query("DELETE FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$result['order_id'] . "'");	$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$result['order_id'] . "'");	$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$result['order_id'] . "'");	$this->db->query("DELETE FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$result['order_id'] . "'");	$this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$result['order_id'] . "'");}
так что через месяц твои не использованные заказы будут обнуляться.

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


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

:D у меня на 1.4.0(реально работающий маг) все заказы имеют только четные номера . И вот какая странность , вчера последний заказ был №36 , а сегодня пришёл новый заказ уже №64 . :( я требую вернуть пропущенные 15 !!!Что-то мне кажется , что выше обозначенная проблема действительно реальная . Заказов ноль ,а счетчик уже в 2 раза больше. PS :) :( Опенкарт - любовь моя , боль моя !!! Извечные глюки !!!

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


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

а вообще беспокоится о лишних записях в индексированной БД, на сайте где на каждой страничке выполняется 30-50 запросов к БД, причем заказ переписывают далеко не каждую секунду, я думаю не стоит =).

Спасибо за столь быстрый ответ, буду пробовать, но дело не в базе, а в номерах заказа. Каждый заход на страницу confirm.php формирует новый номер. Поэтому-то и получается, что после 36 идет 64. Новый номер должен быть только при нажатии кнопки "Подтвердить заказ".Кстати, на странице confirm.php есть все данные заказа, адреса, виды платежа и доставки, примечание, а на success.php этого нет, и все поля в таблице остаются пустыми.

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


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

Все, для себя ворос решил. Формирование номера счета фактуры при нажатии "Подтвердить заказ". Если кому интересно: в catalog/model/checkout/order.php примерно 100 строка после

$this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$order_status_id . "' WHERE order_id = '" . (int)$order_id . "'");
вставить

//	Формируем номер счет фактуры			$query = $this->db->query("SELECT MAX(invoice_id) AS invoice_id FROM `" . DB_PREFIX . "order`");					if ($query->row['invoice_id']) {				$invoice_id = (int)$query->row['invoice_id'] + 1;			} elseif ($this->config->get('config_invoice_id')) {				$invoice_id = $this->config->get('config_invoice_id');			} else {				$invoice_id = 1;			}			$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_id = '" . (int)$invoice_id . "', invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");//	Формируем номер счет фактуры

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


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

Не решаемо ни одним из методов.А вопрос очень и очень важен.Поскольку если нумерация заказов идет как попало – то у меня как у владельца магазина проблема совсем не в том что база загружается пустыми номерами. Проблема намного глубже- я постоянно пребываю в состоянии когда непонятно заказы теряются просто где то, или это «фича» работы скрипта а может почтовый сервер мой заказ в спам слил, а пользоватеь сидит и ждет – это случаи из жизни. Когда почтовые сервера начинают менять механизмы спам защиты. Да вариантов куча. Это хаос, а должно быть упорядоченно направленное, понимаемое, контролируемое состояние.Вопрос на самом деле важный. Задайте вопрос любому бухгалтеру «а что у Вас в базе если нумерация расходных накладных/счетов фактур будет вестись в произвольно- хаотичном порядке?». Советую посмотреть на ее/его глаза !!! :)Если не сложно, кто знает поделитесь как пофиксить навсегда этот баг. С уважением!

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


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

Вот повторно, пару дней спустя, пробовал варианты.Не работает - номер заказа увеличивается все время, при любом шаге назад со страницы "конфирм"Подскажите как решить данный трабл?Неужели всех устраивает такое положение дел с нумерацией заказа?Это ведь ненормально - такая нумерация!с уважением!

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


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

Мне просто интересно:1. Это только у меня не решается вышеуказанным способом этот баг?2. Это только мне кажется этот баг существенным?3. Вообще реально кто то решил данный баг?

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


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

Хочу апнуть эту тему!Все молчатАдминистрация молчитРеальный трабл.Решаемо?Даже уже интресно становится.Никому эта проблема не мешает жить????

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


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

Проблема намного глубже- я постоянно пребываю в состоянии когда непонятно заказы теряются просто где то, или это «фича» работы скрипта а может почтовый сервер мой заказ в спам слил, а пользоватеь сидит и ждет – это случаи из жизни. Когда почтовые сервера начинают менять механизмы спам защиты. Да вариантов куча.

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

Вопрос на самом деле важный. Задайте вопрос любому бухгалтеру «а что у Вас в базе если нумерация расходных накладных/счетов фактур будет вестись в произвольно- хаотичном порядке?». Советую посмотреть на ее/его глаза !!! :)

Есть кол-во заказов в админке ("Всего заказов:"), оно считается вроде бы по правде. А номера заказов... Ну считайте их как номера счетов, а с номерами счетов можно делать все-что угодно, это вам любой бухгалтер скажет :roll:

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


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

Можно и забить :roll: Но:у меня несколько магазинов, это очередной. Все на разных движках. Центр концентрации заказов – почтовый клиент. Заказами занимается жена+диспетчер. Не с руки им постоянно висеть в админке. Если есть дырка в нумерации заказов – всегда есть напряжение, что провал какой то. Планирую прикрутить к этому движку скрипт партнерской программы. Тоже не сруки что какая то нумерация заказов не совсем адекватная.Поэтому и бьюсь. Пока только как рыба об лед:)

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


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

Если есть дырка в нумерации заказов – всегда есть напряжение, что провал какой то.

Так я же писал, что надо забыть про НомерЗаказа и формировать № Счет фактуры сразу, при нажатии кнопки ПОДТВЕРДИТЬ. Тогда все становится нормально, номера идут подряд, даже можно добавить ПрефиксНомера из админки. А НомерЗаказа можно убрать, ну и если очень надо, то изменить название НомерСчетФактуры на НомерЗаказа.

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


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

Моя догадка: Всех, кто когда-либо что-то добавлял в корзину, база помнит. Это сделано для зарегистрированных юзеров, которые потеряли куки или пересели за другой комп, но хотят видеть корзину в том виде, в котром оставили при закрытии. То есть заказ формируется ещё до его подтверждения. Уже после подтверждения, он виден операторам, цель которых - сгенерировать счёт. При правильной обработке номера счетов идут последовательно.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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