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

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


garik

Recommended Posts

Обыскал весь форум, но ответа так и не нашел. Может это только у меня? 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 month later...

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

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

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

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

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


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

Надіслати
Поділитися на інших сайтах


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

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


  • 3 months later...

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

Important Information

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