bobotol Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Есть два магазина на opencart один с февраля работает второй с мая, и только что обнаружил такую ошибку у обоих, у одного магазина всё по дефолту стоит, а у второго куплен шаблон и с 5-10 модулей доставлено(opencart 1.5.5.1) ошибка; Заходим в админку нажимаем на вкладку Продажи->Заказы потом выбираю дату добавления и дату изменения и потом кнопку фильтр и вот что выскакивает Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Вот 90 строка в vq2-system_database_mysql.php trigger_error('Error: ' . mysql_error($this->link) . '<br />Error No: ' . mysql_errno($this->link) . '<br />' . $sql); Как мне эту ошибку исправить? 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Аналогична история с ocStore 1.5.5.1.2. Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-21') AND DATE(o.date_modified) = DATE('2014-07-30') in/home/a/---/----/public_html/system/database/mysql.php on line 50 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Shkip Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 ну так черным по английски написано - Error: Unknown column 'o.date_modified' in 'where clause' Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Сам бы хотел бы я знать что это )) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Shkip Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 сперва-наперво надо проверить таблицу oc_order, если там колонки date_added и date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня есть!! Причем вся эта ошибка из-за указания "Дата изменения". Куда лезть и что делать подскажите? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Поменял, ошибка таже Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? У меня вообще такой таблицы нету oc_order Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Правда цирк ! В самой админке есть (где бэкап и востановление) а если входишь через phpMyAdmin То нету как это понимать? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 (изменено) Помогла! На ocStore 1.5.5.1.2 должно получится вот так: <?php class ModelSaleOrder extends Model { public function addOrder($data) { $this->load->model('setting/store'); $store_info = $this->model_setting_store->getStore($data['store_id']); if ($store_info) { $store_name = $store_info['name']; $store_url = $store_info['url']; } else { $store_name = $this->config->get('config_name'); $store_url = HTTP_CATALOG; } $this->load->model('setting/setting'); $setting_info = $this->model_setting_setting->getSetting('setting', $data['store_id']); if (isset($setting_info['invoice_prefix'])) { $invoice_prefix = $setting_info['invoice_prefix']; } else { $invoice_prefix = $this->config->get('config_invoice_prefix'); } $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } $this->load->model('localisation/currency'); $currency_info = $this->model_localisation_currency->getCurrencyByCode($this->config->get('config_currency')); if ($currency_info) { $currency_id = $currency_info['currency_id']; $currency_code = $currency_info['code']; $currency_value = $currency_info['value']; } else { $currency_id = 0; $currency_code = $this->config->get('config_currency'); $currency_value = 1.00000; } $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($invoice_prefix) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($store_name) . "',store_url = '" . $this->db->escape($store_url) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', language_id = '" . (int)$this->config->get('config_language_id') . "', currency_id = '" . (int)$currency_id . "', currency_code = '" . $this->db->escape($currency_code) . "', currency_value = '" . (float)$currency_value . "', date_added = NOW(), date_modified = NOW()"); $order_id = $this->db->getLastId(); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } // Update order total $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function editOrder($order_id, $data) { $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } // Restock products before subtracting the stock later on $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("UPDATE `" . DB_PREFIX . "order` SET firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', date_modified = NOW() 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 . "'"); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_product_id = '" . (int)$order_product['order_product_id'] . "', order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_option_id = '" . (int)$order_option['order_option_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_download_id = '" . (int)$order_download['order_download_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } $this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_voucher_id = '" . (int)$order_voucher['order_voucher_id'] . "', order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; $this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_total_id = '" . (int)$order_total['order_total_id'] . "', order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function deleteOrder($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 . "'"); } public function getOrder($order_id) { $order_query = $this->db->query("SELECT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $reward = 0; $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach ($order_product_query->rows as $product) { $reward += $product['reward']; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'"); if ($country_query->num_rows) { $payment_iso_code_2 = $country_query->row['iso_code_2']; $payment_iso_code_3 = $country_query->row['iso_code_3']; } else { $payment_iso_code_2 = ''; $payment_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'"); if ($zone_query->num_rows) { $payment_zone_code = $zone_query->row['code']; } else { $payment_zone_code = ''; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'"); if ($country_query->num_rows) { $shipping_iso_code_2 = $country_query->row['iso_code_2']; $shipping_iso_code_3 = $country_query->row['iso_code_3']; } else { $shipping_iso_code_2 = ''; $shipping_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'"); if ($zone_query->num_rows) { $shipping_zone_code = $zone_query->row['code']; } else { $shipping_zone_code = ''; } if ($order_query->row['affiliate_id']) { $affiliate_id = $order_query->row['affiliate_id']; } else { $affiliate_id = 0; } $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($affiliate_id); if ($affiliate_info) { $affiliate_firstname = $affiliate_info['firstname']; $affiliate_lastname = $affiliate_info['lastname']; } else { $affiliate_firstname = ''; $affiliate_lastname = ''; } $this->load->model('localisation/language'); $language_info = $this->model_localisation_language->getLanguage($order_query->row['language_id']); if ($language_info) { $language_code = $language_info['code']; $language_filename = $language_info['filename']; $language_directory = $language_info['directory']; } else { $language_code = ''; $language_filename = ''; $language_directory = ''; } return array( 'order_id' => $order_query->row['order_id'], 'invoice_no' => $order_query->row['invoice_no'], 'invoice_prefix' => $order_query->row['invoice_prefix'], 'store_id' => $order_query->row['store_id'], 'store_name' => $order_query->row['store_name'], 'store_url' => $order_query->row['store_url'], 'customer_id' => $order_query->row['customer_id'], 'customer' => $order_query->row['customer'], 'customer_group_id' => $order_query->row['customer_group_id'], 'firstname' => $order_query->row['firstname'], 'lastname' => $order_query->row['lastname'], 'telephone' => $order_query->row['telephone'], 'fax' => $order_query->row['fax'], 'email' => $order_query->row['email'], 'payment_firstname' => $order_query->row['payment_firstname'], 'payment_lastname' => $order_query->row['payment_lastname'], 'payment_company' => $order_query->row['payment_company'], 'payment_company_id' => $order_query->row['payment_company_id'], 'payment_tax_id' => $order_query->row['payment_tax_id'], 'payment_address_1' => $order_query->row['payment_address_1'], 'payment_address_2' => $order_query->row['payment_address_2'], 'payment_postcode' => $order_query->row['payment_postcode'], 'payment_city' => $order_query->row['payment_city'], 'payment_zone_id' => $order_query->row['payment_zone_id'], 'payment_zone' => $order_query->row['payment_zone'], 'payment_zone_code' => $payment_zone_code, 'payment_country_id' => $order_query->row['payment_country_id'], 'payment_country' => $order_query->row['payment_country'], 'payment_iso_code_2' => $payment_iso_code_2, 'payment_iso_code_3' => $payment_iso_code_3, 'payment_address_format' => $order_query->row['payment_address_format'], 'payment_method' => $order_query->row['payment_method'], 'payment_code' => $order_query->row['payment_code'], 'shipping_firstname' => $order_query->row['shipping_firstname'], 'shipping_lastname' => $order_query->row['shipping_lastname'], 'shipping_company' => $order_query->row['shipping_company'], 'shipping_address_1' => $order_query->row['shipping_address_1'], 'shipping_address_2' => $order_query->row['shipping_address_2'], 'shipping_postcode' => $order_query->row['shipping_postcode'], 'shipping_city' => $order_query->row['shipping_city'], 'shipping_zone_id' => $order_query->row['shipping_zone_id'], 'shipping_zone' => $order_query->row['shipping_zone'], 'shipping_zone_code' => $shipping_zone_code, 'shipping_country_id' => $order_query->row['shipping_country_id'], 'shipping_country' => $order_query->row['shipping_country'], 'shipping_iso_code_2' => $shipping_iso_code_2, 'shipping_iso_code_3' => $shipping_iso_code_3, 'shipping_address_format' => $order_query->row['shipping_address_format'], 'shipping_method' => $order_query->row['shipping_method'], 'shipping_code' => $order_query->row['shipping_code'], 'comment' => $order_query->row['comment'], 'total' => $order_query->row['total'], 'reward' => $reward, 'order_status_id' => $order_query->row['order_status_id'], 'affiliate_id' => $order_query->row['affiliate_id'], 'affiliate_firstname' => $affiliate_firstname, 'affiliate_lastname' => $affiliate_lastname, 'commission' => $order_query->row['commission'], 'language_id' => $order_query->row['language_id'], 'language_code' => $language_code, 'language_filename' => $language_filename, 'language_directory' => $language_directory, 'currency_id' => $order_query->row['currency_id'], 'currency_code' => $order_query->row['currency_code'], 'currency_value' => $order_query->row['currency_value'], 'ip' => $order_query->row['ip'], 'forwarded_ip' => $order_query->row['forwarded_ip'], 'user_agent' => $order_query->row['user_agent'], 'accept_language' => $order_query->row['accept_language'], 'date_added' => $order_query->row['date_added'], 'date_modified' => $order_query->row['date_modified'] ); } else { return false; } } public function getOrders($data = array()) { $sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE o.order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND o.order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(o.firstname, ' ', o.lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(o.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND o.total = '" . (float)$data['filter_total'] . "'"; } $sort_data = array( 'o.order_id', 'customer', 'status', 'o.date_added', 'o.date_modified', 'o.total' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY o.order_id"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } public function getOrderProducts($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderOption($order_id, $order_option_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_option_id = '" . (int)$order_option_id . "'"); return $query->row; } public function getOrderOptions($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderDownloads($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderVouchers($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderVoucherByVoucherId($voucher_id) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_voucher` WHERE voucher_id = '" . (int)$voucher_id . "'"); return $query->row; } public function getOrderTotals($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows; } public function getTotalOrders($data = array()) { $sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order`"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(firstname, ' ', lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND total = '" . (float)$data['filter_total'] . "'"; } $query = $this->db->query($sql); return $query->row['total']; } public function getTotalOrdersByStoreId($store_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE store_id = '" . (int)$store_id . "'"); return $query->row['total']; } public function getTotalOrdersByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id = '" . (int)$order_status_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByLanguageId($language_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE language_id = '" . (int)$language_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByCurrencyId($currency_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE currency_id = '" . (int)$currency_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalSales() { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'"); return $query->row['total']; } public function getTotalSalesByYear($year) { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND YEAR(date_added) = '" . (int)$year . "'"); return $query->row['total']; } public function createInvoiceNo($order_id) { $order_info = $this->getOrder($order_id); if ($order_info && !$order_info['invoice_no']) { $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'"); if ($query->row['invoice_no']) { $invoice_no = $query->row['invoice_no'] + 1; } else { $invoice_no = 1; } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'"); return $order_info['invoice_prefix'] . $invoice_no; } } public function addOrderHistory($order_id, $data) { $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$data['order_status_id'] . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$data['order_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()"); $order_info = $this->getOrder($order_id); // Send out any gift voucher mails if ($this->config->get('config_complete_status_id') == $data['order_status_id']) { $this->load->model('sale/voucher'); $results = $this->getOrderVouchers($order_id); foreach ($results as $result) { $this->model_sale_voucher->sendVoucher($result['voucher_id']); } } if ($data['notify']) { $language = new Language($order_info['language_directory']); $language->load($order_info['language_filename']); $language->load('mail/order'); $subject = sprintf($language->get('text_subject'), $order_info['store_name'], $order_id); $message = $language->get('text_order') . ' ' . $order_id . "\n"; $message .= $language->get('text_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n\n"; $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$data['order_status_id'] . "' AND language_id = '" . (int)$order_info['language_id'] . "'"); if ($order_status_query->num_rows) { $message .= $language->get('text_order_status') . "\n"; $message .= $order_status_query->row['name'] . "\n\n"; } if ($order_info['customer_id']) { $message .= $language->get('text_link') . "\n"; $message .= html_entity_decode($order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id, ENT_QUOTES, 'UTF-8') . "\n\n"; } if ($data['comment']) { $message .= $language->get('text_comment') . "\n\n"; $message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n"; } $message .= $language->get('text_footer'); $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->hostname = $this->config->get('config_smtp_host'); $mail->username = $this->config->get('config_smtp_username'); $mail->password = $this->config->get('config_smtp_password'); $mail->port = $this->config->get('config_smtp_port'); $mail->timeout = $this->config->get('config_smtp_timeout'); $mail->setTo($order_info['email']); $mail->setFrom($this->config->get('config_email')); $mail->setSender($order_info['store_name']); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8')); $mail->send(); } } public function getOrderHistories($order_id, $start = 0, $limit = 10) { if ($start < 0) { $start = 0; } if ($limit < 1) { $limit = 10; } $query = $this->db->query("SELECT oh.date_added, os.name AS status, oh.comment, oh.notify FROM " . DB_PREFIX . "order_history oh LEFT JOIN " . DB_PREFIX . "order_status os ON oh.order_status_id = os.order_status_id WHERE oh.order_id = '" . (int)$order_id . "' AND os.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY oh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit); return $query->rows; } public function getTotalOrderHistories($order_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$order_id . "'"); return $query->row['total']; } public function getTotalOrderHistoriesByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_status_id = '" . (int)$order_status_id . "'"); return $query->row['total']; } public function getEmailsByProductsOrdered($products, $start, $end) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> '' LIMIT " . (int)$start . "," . (int)$end); return $query->rows; } public function getTotalEmailsByProductsOrdered($products) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> ''"); return $query->rows; } } ?> Изменено 31 июля 2014 пользователем AlexFisher у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще такой таблицы нету oc_order mysql.jpg Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: CREATE TABLE IF NOT EXISTS `oc_order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `invoice_no` int(11) NOT NULL DEFAULT '0', `invoice_prefix` varchar(26) NOT NULL, `store_id` int(11) NOT NULL DEFAULT '0', `store_name` varchar(64) NOT NULL, `store_url` varchar(255) NOT NULL, `customer_id` int(11) NOT NULL DEFAULT '0', `customer_group_id` int(11) NOT NULL DEFAULT '0', `firstname` varchar(32) NOT NULL, `lastname` varchar(32) NOT NULL, `email` varchar(96) NOT NULL, `telephone` varchar(32) NOT NULL, `fax` varchar(32) NOT NULL, `payment_firstname` varchar(32) NOT NULL, `payment_lastname` varchar(32) NOT NULL, `payment_company` varchar(32) NOT NULL, `payment_company_id` varchar(32) NOT NULL, `payment_tax_id` varchar(32) NOT NULL, `payment_address_1` varchar(128) NOT NULL, `payment_address_2` varchar(128) NOT NULL, `payment_city` varchar(128) NOT NULL, `payment_postcode` varchar(10) NOT NULL, `payment_country` varchar(128) NOT NULL, `payment_country_id` int(11) NOT NULL, `payment_zone` varchar(128) NOT NULL, `payment_zone_id` int(11) NOT NULL, `payment_address_format` text NOT NULL, `payment_method` varchar(128) NOT NULL, `payment_code` varchar(128) NOT NULL, `shipping_firstname` varchar(32) NOT NULL, `shipping_lastname` varchar(32) NOT NULL, `shipping_company` varchar(32) NOT NULL, `shipping_address_1` varchar(128) NOT NULL, `shipping_address_2` varchar(128) NOT NULL, `shipping_city` varchar(128) NOT NULL, `shipping_postcode` varchar(10) NOT NULL, `shipping_country` varchar(128) NOT NULL, `shipping_country_id` int(11) NOT NULL, `shipping_zone` varchar(128) NOT NULL, `shipping_zone_id` int(11) NOT NULL, `shipping_address_format` text NOT NULL, `shipping_method` varchar(128) NOT NULL, `shipping_code` varchar(128) NOT NULL, `comment` text NOT NULL, `total` decimal(15,4) NOT NULL DEFAULT '0.0000', `order_status_id` int(11) NOT NULL DEFAULT '0', `affiliate_id` int(11) NOT NULL, `commission` decimal(15,4) NOT NULL, `language_id` int(11) NOT NULL, `currency_id` int(11) NOT NULL, `currency_code` varchar(3) NOT NULL, `currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000', `ip` varchar(40) NOT NULL, `forwarded_ip` varchar(40) NOT NULL, `user_agent` varchar(255) NOT NULL, `accept_language` varchar(255) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; спасибо... на ocStore 1.5.5.1.2 прошло на ура!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 1 августа 2014 Автор Поделиться Опубликовано: 1 августа 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 1 августа 2014 Поделиться Опубликовано: 1 августа 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 0 Перейти к списку тем Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Общие вопросы Ошибка в админке Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Deals – адаптивный универсальный шаблон Автор: octemplates Динамичесткая инфострока в шапке + позиция в макете для opencart\ocstore 2x, 3x Автор: Lito911 Единицы Измерения Товара Автор: RoS Opencart Product Search by Image Автор: slavoglo Простой массовый редактор цен. Fast Price Edit Автор: Sha × Уже зарегистрированы? Войти Регистрация Раздел покупок Назад Приобретенные дополнения Ваши счета Список желаний Альтернативные контакты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Документация История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Где покупать модули? Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности. Я принимаю
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Сам бы хотел бы я знать что это )) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Shkip Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 сперва-наперво надо проверить таблицу oc_order, если там колонки date_added и date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня есть!! Причем вся эта ошибка из-за указания "Дата изменения". Куда лезть и что делать подскажите? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Поменял, ошибка таже Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? У меня вообще такой таблицы нету oc_order Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Правда цирк ! В самой админке есть (где бэкап и востановление) а если входишь через phpMyAdmin То нету как это понимать? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 (изменено) Помогла! На ocStore 1.5.5.1.2 должно получится вот так: <?php class ModelSaleOrder extends Model { public function addOrder($data) { $this->load->model('setting/store'); $store_info = $this->model_setting_store->getStore($data['store_id']); if ($store_info) { $store_name = $store_info['name']; $store_url = $store_info['url']; } else { $store_name = $this->config->get('config_name'); $store_url = HTTP_CATALOG; } $this->load->model('setting/setting'); $setting_info = $this->model_setting_setting->getSetting('setting', $data['store_id']); if (isset($setting_info['invoice_prefix'])) { $invoice_prefix = $setting_info['invoice_prefix']; } else { $invoice_prefix = $this->config->get('config_invoice_prefix'); } $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } $this->load->model('localisation/currency'); $currency_info = $this->model_localisation_currency->getCurrencyByCode($this->config->get('config_currency')); if ($currency_info) { $currency_id = $currency_info['currency_id']; $currency_code = $currency_info['code']; $currency_value = $currency_info['value']; } else { $currency_id = 0; $currency_code = $this->config->get('config_currency'); $currency_value = 1.00000; } $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($invoice_prefix) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($store_name) . "',store_url = '" . $this->db->escape($store_url) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', language_id = '" . (int)$this->config->get('config_language_id') . "', currency_id = '" . (int)$currency_id . "', currency_code = '" . $this->db->escape($currency_code) . "', currency_value = '" . (float)$currency_value . "', date_added = NOW(), date_modified = NOW()"); $order_id = $this->db->getLastId(); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } // Update order total $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function editOrder($order_id, $data) { $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } // Restock products before subtracting the stock later on $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("UPDATE `" . DB_PREFIX . "order` SET firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', date_modified = NOW() 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 . "'"); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_product_id = '" . (int)$order_product['order_product_id'] . "', order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_option_id = '" . (int)$order_option['order_option_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_download_id = '" . (int)$order_download['order_download_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } $this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_voucher_id = '" . (int)$order_voucher['order_voucher_id'] . "', order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; $this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_total_id = '" . (int)$order_total['order_total_id'] . "', order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function deleteOrder($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 . "'"); } public function getOrder($order_id) { $order_query = $this->db->query("SELECT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $reward = 0; $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach ($order_product_query->rows as $product) { $reward += $product['reward']; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'"); if ($country_query->num_rows) { $payment_iso_code_2 = $country_query->row['iso_code_2']; $payment_iso_code_3 = $country_query->row['iso_code_3']; } else { $payment_iso_code_2 = ''; $payment_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'"); if ($zone_query->num_rows) { $payment_zone_code = $zone_query->row['code']; } else { $payment_zone_code = ''; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'"); if ($country_query->num_rows) { $shipping_iso_code_2 = $country_query->row['iso_code_2']; $shipping_iso_code_3 = $country_query->row['iso_code_3']; } else { $shipping_iso_code_2 = ''; $shipping_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'"); if ($zone_query->num_rows) { $shipping_zone_code = $zone_query->row['code']; } else { $shipping_zone_code = ''; } if ($order_query->row['affiliate_id']) { $affiliate_id = $order_query->row['affiliate_id']; } else { $affiliate_id = 0; } $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($affiliate_id); if ($affiliate_info) { $affiliate_firstname = $affiliate_info['firstname']; $affiliate_lastname = $affiliate_info['lastname']; } else { $affiliate_firstname = ''; $affiliate_lastname = ''; } $this->load->model('localisation/language'); $language_info = $this->model_localisation_language->getLanguage($order_query->row['language_id']); if ($language_info) { $language_code = $language_info['code']; $language_filename = $language_info['filename']; $language_directory = $language_info['directory']; } else { $language_code = ''; $language_filename = ''; $language_directory = ''; } return array( 'order_id' => $order_query->row['order_id'], 'invoice_no' => $order_query->row['invoice_no'], 'invoice_prefix' => $order_query->row['invoice_prefix'], 'store_id' => $order_query->row['store_id'], 'store_name' => $order_query->row['store_name'], 'store_url' => $order_query->row['store_url'], 'customer_id' => $order_query->row['customer_id'], 'customer' => $order_query->row['customer'], 'customer_group_id' => $order_query->row['customer_group_id'], 'firstname' => $order_query->row['firstname'], 'lastname' => $order_query->row['lastname'], 'telephone' => $order_query->row['telephone'], 'fax' => $order_query->row['fax'], 'email' => $order_query->row['email'], 'payment_firstname' => $order_query->row['payment_firstname'], 'payment_lastname' => $order_query->row['payment_lastname'], 'payment_company' => $order_query->row['payment_company'], 'payment_company_id' => $order_query->row['payment_company_id'], 'payment_tax_id' => $order_query->row['payment_tax_id'], 'payment_address_1' => $order_query->row['payment_address_1'], 'payment_address_2' => $order_query->row['payment_address_2'], 'payment_postcode' => $order_query->row['payment_postcode'], 'payment_city' => $order_query->row['payment_city'], 'payment_zone_id' => $order_query->row['payment_zone_id'], 'payment_zone' => $order_query->row['payment_zone'], 'payment_zone_code' => $payment_zone_code, 'payment_country_id' => $order_query->row['payment_country_id'], 'payment_country' => $order_query->row['payment_country'], 'payment_iso_code_2' => $payment_iso_code_2, 'payment_iso_code_3' => $payment_iso_code_3, 'payment_address_format' => $order_query->row['payment_address_format'], 'payment_method' => $order_query->row['payment_method'], 'payment_code' => $order_query->row['payment_code'], 'shipping_firstname' => $order_query->row['shipping_firstname'], 'shipping_lastname' => $order_query->row['shipping_lastname'], 'shipping_company' => $order_query->row['shipping_company'], 'shipping_address_1' => $order_query->row['shipping_address_1'], 'shipping_address_2' => $order_query->row['shipping_address_2'], 'shipping_postcode' => $order_query->row['shipping_postcode'], 'shipping_city' => $order_query->row['shipping_city'], 'shipping_zone_id' => $order_query->row['shipping_zone_id'], 'shipping_zone' => $order_query->row['shipping_zone'], 'shipping_zone_code' => $shipping_zone_code, 'shipping_country_id' => $order_query->row['shipping_country_id'], 'shipping_country' => $order_query->row['shipping_country'], 'shipping_iso_code_2' => $shipping_iso_code_2, 'shipping_iso_code_3' => $shipping_iso_code_3, 'shipping_address_format' => $order_query->row['shipping_address_format'], 'shipping_method' => $order_query->row['shipping_method'], 'shipping_code' => $order_query->row['shipping_code'], 'comment' => $order_query->row['comment'], 'total' => $order_query->row['total'], 'reward' => $reward, 'order_status_id' => $order_query->row['order_status_id'], 'affiliate_id' => $order_query->row['affiliate_id'], 'affiliate_firstname' => $affiliate_firstname, 'affiliate_lastname' => $affiliate_lastname, 'commission' => $order_query->row['commission'], 'language_id' => $order_query->row['language_id'], 'language_code' => $language_code, 'language_filename' => $language_filename, 'language_directory' => $language_directory, 'currency_id' => $order_query->row['currency_id'], 'currency_code' => $order_query->row['currency_code'], 'currency_value' => $order_query->row['currency_value'], 'ip' => $order_query->row['ip'], 'forwarded_ip' => $order_query->row['forwarded_ip'], 'user_agent' => $order_query->row['user_agent'], 'accept_language' => $order_query->row['accept_language'], 'date_added' => $order_query->row['date_added'], 'date_modified' => $order_query->row['date_modified'] ); } else { return false; } } public function getOrders($data = array()) { $sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE o.order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND o.order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(o.firstname, ' ', o.lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(o.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND o.total = '" . (float)$data['filter_total'] . "'"; } $sort_data = array( 'o.order_id', 'customer', 'status', 'o.date_added', 'o.date_modified', 'o.total' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY o.order_id"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } public function getOrderProducts($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderOption($order_id, $order_option_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_option_id = '" . (int)$order_option_id . "'"); return $query->row; } public function getOrderOptions($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderDownloads($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderVouchers($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderVoucherByVoucherId($voucher_id) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_voucher` WHERE voucher_id = '" . (int)$voucher_id . "'"); return $query->row; } public function getOrderTotals($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows; } public function getTotalOrders($data = array()) { $sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order`"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(firstname, ' ', lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND total = '" . (float)$data['filter_total'] . "'"; } $query = $this->db->query($sql); return $query->row['total']; } public function getTotalOrdersByStoreId($store_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE store_id = '" . (int)$store_id . "'"); return $query->row['total']; } public function getTotalOrdersByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id = '" . (int)$order_status_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByLanguageId($language_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE language_id = '" . (int)$language_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByCurrencyId($currency_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE currency_id = '" . (int)$currency_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalSales() { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'"); return $query->row['total']; } public function getTotalSalesByYear($year) { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND YEAR(date_added) = '" . (int)$year . "'"); return $query->row['total']; } public function createInvoiceNo($order_id) { $order_info = $this->getOrder($order_id); if ($order_info && !$order_info['invoice_no']) { $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'"); if ($query->row['invoice_no']) { $invoice_no = $query->row['invoice_no'] + 1; } else { $invoice_no = 1; } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'"); return $order_info['invoice_prefix'] . $invoice_no; } } public function addOrderHistory($order_id, $data) { $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$data['order_status_id'] . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$data['order_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()"); $order_info = $this->getOrder($order_id); // Send out any gift voucher mails if ($this->config->get('config_complete_status_id') == $data['order_status_id']) { $this->load->model('sale/voucher'); $results = $this->getOrderVouchers($order_id); foreach ($results as $result) { $this->model_sale_voucher->sendVoucher($result['voucher_id']); } } if ($data['notify']) { $language = new Language($order_info['language_directory']); $language->load($order_info['language_filename']); $language->load('mail/order'); $subject = sprintf($language->get('text_subject'), $order_info['store_name'], $order_id); $message = $language->get('text_order') . ' ' . $order_id . "\n"; $message .= $language->get('text_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n\n"; $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$data['order_status_id'] . "' AND language_id = '" . (int)$order_info['language_id'] . "'"); if ($order_status_query->num_rows) { $message .= $language->get('text_order_status') . "\n"; $message .= $order_status_query->row['name'] . "\n\n"; } if ($order_info['customer_id']) { $message .= $language->get('text_link') . "\n"; $message .= html_entity_decode($order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id, ENT_QUOTES, 'UTF-8') . "\n\n"; } if ($data['comment']) { $message .= $language->get('text_comment') . "\n\n"; $message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n"; } $message .= $language->get('text_footer'); $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->hostname = $this->config->get('config_smtp_host'); $mail->username = $this->config->get('config_smtp_username'); $mail->password = $this->config->get('config_smtp_password'); $mail->port = $this->config->get('config_smtp_port'); $mail->timeout = $this->config->get('config_smtp_timeout'); $mail->setTo($order_info['email']); $mail->setFrom($this->config->get('config_email')); $mail->setSender($order_info['store_name']); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8')); $mail->send(); } } public function getOrderHistories($order_id, $start = 0, $limit = 10) { if ($start < 0) { $start = 0; } if ($limit < 1) { $limit = 10; } $query = $this->db->query("SELECT oh.date_added, os.name AS status, oh.comment, oh.notify FROM " . DB_PREFIX . "order_history oh LEFT JOIN " . DB_PREFIX . "order_status os ON oh.order_status_id = os.order_status_id WHERE oh.order_id = '" . (int)$order_id . "' AND os.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY oh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit); return $query->rows; } public function getTotalOrderHistories($order_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$order_id . "'"); return $query->row['total']; } public function getTotalOrderHistoriesByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_status_id = '" . (int)$order_status_id . "'"); return $query->row['total']; } public function getEmailsByProductsOrdered($products, $start, $end) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> '' LIMIT " . (int)$start . "," . (int)$end); return $query->rows; } public function getTotalEmailsByProductsOrdered($products) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> ''"); return $query->rows; } } ?> Изменено 31 июля 2014 пользователем AlexFisher у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще такой таблицы нету oc_order mysql.jpg Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: CREATE TABLE IF NOT EXISTS `oc_order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `invoice_no` int(11) NOT NULL DEFAULT '0', `invoice_prefix` varchar(26) NOT NULL, `store_id` int(11) NOT NULL DEFAULT '0', `store_name` varchar(64) NOT NULL, `store_url` varchar(255) NOT NULL, `customer_id` int(11) NOT NULL DEFAULT '0', `customer_group_id` int(11) NOT NULL DEFAULT '0', `firstname` varchar(32) NOT NULL, `lastname` varchar(32) NOT NULL, `email` varchar(96) NOT NULL, `telephone` varchar(32) NOT NULL, `fax` varchar(32) NOT NULL, `payment_firstname` varchar(32) NOT NULL, `payment_lastname` varchar(32) NOT NULL, `payment_company` varchar(32) NOT NULL, `payment_company_id` varchar(32) NOT NULL, `payment_tax_id` varchar(32) NOT NULL, `payment_address_1` varchar(128) NOT NULL, `payment_address_2` varchar(128) NOT NULL, `payment_city` varchar(128) NOT NULL, `payment_postcode` varchar(10) NOT NULL, `payment_country` varchar(128) NOT NULL, `payment_country_id` int(11) NOT NULL, `payment_zone` varchar(128) NOT NULL, `payment_zone_id` int(11) NOT NULL, `payment_address_format` text NOT NULL, `payment_method` varchar(128) NOT NULL, `payment_code` varchar(128) NOT NULL, `shipping_firstname` varchar(32) NOT NULL, `shipping_lastname` varchar(32) NOT NULL, `shipping_company` varchar(32) NOT NULL, `shipping_address_1` varchar(128) NOT NULL, `shipping_address_2` varchar(128) NOT NULL, `shipping_city` varchar(128) NOT NULL, `shipping_postcode` varchar(10) NOT NULL, `shipping_country` varchar(128) NOT NULL, `shipping_country_id` int(11) NOT NULL, `shipping_zone` varchar(128) NOT NULL, `shipping_zone_id` int(11) NOT NULL, `shipping_address_format` text NOT NULL, `shipping_method` varchar(128) NOT NULL, `shipping_code` varchar(128) NOT NULL, `comment` text NOT NULL, `total` decimal(15,4) NOT NULL DEFAULT '0.0000', `order_status_id` int(11) NOT NULL DEFAULT '0', `affiliate_id` int(11) NOT NULL, `commission` decimal(15,4) NOT NULL, `language_id` int(11) NOT NULL, `currency_id` int(11) NOT NULL, `currency_code` varchar(3) NOT NULL, `currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000', `ip` varchar(40) NOT NULL, `forwarded_ip` varchar(40) NOT NULL, `user_agent` varchar(255) NOT NULL, `accept_language` varchar(255) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; спасибо... на ocStore 1.5.5.1.2 прошло на ура!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 1 августа 2014 Автор Поделиться Опубликовано: 1 августа 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 1 августа 2014 Поделиться Опубликовано: 1 августа 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 0 Перейти к списку тем Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Общие вопросы Ошибка в админке Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Deals – адаптивный универсальный шаблон Автор: octemplates Динамичесткая инфострока в шапке + позиция в макете для opencart\ocstore 2x, 3x Автор: Lito911 Единицы Измерения Товара Автор: RoS Opencart Product Search by Image Автор: slavoglo Простой массовый редактор цен. Fast Price Edit Автор: Sha
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня есть!! Причем вся эта ошибка из-за указания "Дата изменения". Куда лезть и что делать подскажите? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Поменял, ошибка таже Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? У меня вообще такой таблицы нету oc_order Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Правда цирк ! В самой админке есть (где бэкап и востановление) а если входишь через phpMyAdmin То нету как это понимать? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 (изменено) Помогла! На ocStore 1.5.5.1.2 должно получится вот так: <?php class ModelSaleOrder extends Model { public function addOrder($data) { $this->load->model('setting/store'); $store_info = $this->model_setting_store->getStore($data['store_id']); if ($store_info) { $store_name = $store_info['name']; $store_url = $store_info['url']; } else { $store_name = $this->config->get('config_name'); $store_url = HTTP_CATALOG; } $this->load->model('setting/setting'); $setting_info = $this->model_setting_setting->getSetting('setting', $data['store_id']); if (isset($setting_info['invoice_prefix'])) { $invoice_prefix = $setting_info['invoice_prefix']; } else { $invoice_prefix = $this->config->get('config_invoice_prefix'); } $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } $this->load->model('localisation/currency'); $currency_info = $this->model_localisation_currency->getCurrencyByCode($this->config->get('config_currency')); if ($currency_info) { $currency_id = $currency_info['currency_id']; $currency_code = $currency_info['code']; $currency_value = $currency_info['value']; } else { $currency_id = 0; $currency_code = $this->config->get('config_currency'); $currency_value = 1.00000; } $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($invoice_prefix) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($store_name) . "',store_url = '" . $this->db->escape($store_url) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', language_id = '" . (int)$this->config->get('config_language_id') . "', currency_id = '" . (int)$currency_id . "', currency_code = '" . $this->db->escape($currency_code) . "', currency_value = '" . (float)$currency_value . "', date_added = NOW(), date_modified = NOW()"); $order_id = $this->db->getLastId(); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } // Update order total $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function editOrder($order_id, $data) { $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } // Restock products before subtracting the stock later on $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("UPDATE `" . DB_PREFIX . "order` SET firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', date_modified = NOW() 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 . "'"); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_product_id = '" . (int)$order_product['order_product_id'] . "', order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_option_id = '" . (int)$order_option['order_option_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_download_id = '" . (int)$order_download['order_download_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } $this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_voucher_id = '" . (int)$order_voucher['order_voucher_id'] . "', order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; $this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_total_id = '" . (int)$order_total['order_total_id'] . "', order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function deleteOrder($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 . "'"); } public function getOrder($order_id) { $order_query = $this->db->query("SELECT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $reward = 0; $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach ($order_product_query->rows as $product) { $reward += $product['reward']; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'"); if ($country_query->num_rows) { $payment_iso_code_2 = $country_query->row['iso_code_2']; $payment_iso_code_3 = $country_query->row['iso_code_3']; } else { $payment_iso_code_2 = ''; $payment_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'"); if ($zone_query->num_rows) { $payment_zone_code = $zone_query->row['code']; } else { $payment_zone_code = ''; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'"); if ($country_query->num_rows) { $shipping_iso_code_2 = $country_query->row['iso_code_2']; $shipping_iso_code_3 = $country_query->row['iso_code_3']; } else { $shipping_iso_code_2 = ''; $shipping_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'"); if ($zone_query->num_rows) { $shipping_zone_code = $zone_query->row['code']; } else { $shipping_zone_code = ''; } if ($order_query->row['affiliate_id']) { $affiliate_id = $order_query->row['affiliate_id']; } else { $affiliate_id = 0; } $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($affiliate_id); if ($affiliate_info) { $affiliate_firstname = $affiliate_info['firstname']; $affiliate_lastname = $affiliate_info['lastname']; } else { $affiliate_firstname = ''; $affiliate_lastname = ''; } $this->load->model('localisation/language'); $language_info = $this->model_localisation_language->getLanguage($order_query->row['language_id']); if ($language_info) { $language_code = $language_info['code']; $language_filename = $language_info['filename']; $language_directory = $language_info['directory']; } else { $language_code = ''; $language_filename = ''; $language_directory = ''; } return array( 'order_id' => $order_query->row['order_id'], 'invoice_no' => $order_query->row['invoice_no'], 'invoice_prefix' => $order_query->row['invoice_prefix'], 'store_id' => $order_query->row['store_id'], 'store_name' => $order_query->row['store_name'], 'store_url' => $order_query->row['store_url'], 'customer_id' => $order_query->row['customer_id'], 'customer' => $order_query->row['customer'], 'customer_group_id' => $order_query->row['customer_group_id'], 'firstname' => $order_query->row['firstname'], 'lastname' => $order_query->row['lastname'], 'telephone' => $order_query->row['telephone'], 'fax' => $order_query->row['fax'], 'email' => $order_query->row['email'], 'payment_firstname' => $order_query->row['payment_firstname'], 'payment_lastname' => $order_query->row['payment_lastname'], 'payment_company' => $order_query->row['payment_company'], 'payment_company_id' => $order_query->row['payment_company_id'], 'payment_tax_id' => $order_query->row['payment_tax_id'], 'payment_address_1' => $order_query->row['payment_address_1'], 'payment_address_2' => $order_query->row['payment_address_2'], 'payment_postcode' => $order_query->row['payment_postcode'], 'payment_city' => $order_query->row['payment_city'], 'payment_zone_id' => $order_query->row['payment_zone_id'], 'payment_zone' => $order_query->row['payment_zone'], 'payment_zone_code' => $payment_zone_code, 'payment_country_id' => $order_query->row['payment_country_id'], 'payment_country' => $order_query->row['payment_country'], 'payment_iso_code_2' => $payment_iso_code_2, 'payment_iso_code_3' => $payment_iso_code_3, 'payment_address_format' => $order_query->row['payment_address_format'], 'payment_method' => $order_query->row['payment_method'], 'payment_code' => $order_query->row['payment_code'], 'shipping_firstname' => $order_query->row['shipping_firstname'], 'shipping_lastname' => $order_query->row['shipping_lastname'], 'shipping_company' => $order_query->row['shipping_company'], 'shipping_address_1' => $order_query->row['shipping_address_1'], 'shipping_address_2' => $order_query->row['shipping_address_2'], 'shipping_postcode' => $order_query->row['shipping_postcode'], 'shipping_city' => $order_query->row['shipping_city'], 'shipping_zone_id' => $order_query->row['shipping_zone_id'], 'shipping_zone' => $order_query->row['shipping_zone'], 'shipping_zone_code' => $shipping_zone_code, 'shipping_country_id' => $order_query->row['shipping_country_id'], 'shipping_country' => $order_query->row['shipping_country'], 'shipping_iso_code_2' => $shipping_iso_code_2, 'shipping_iso_code_3' => $shipping_iso_code_3, 'shipping_address_format' => $order_query->row['shipping_address_format'], 'shipping_method' => $order_query->row['shipping_method'], 'shipping_code' => $order_query->row['shipping_code'], 'comment' => $order_query->row['comment'], 'total' => $order_query->row['total'], 'reward' => $reward, 'order_status_id' => $order_query->row['order_status_id'], 'affiliate_id' => $order_query->row['affiliate_id'], 'affiliate_firstname' => $affiliate_firstname, 'affiliate_lastname' => $affiliate_lastname, 'commission' => $order_query->row['commission'], 'language_id' => $order_query->row['language_id'], 'language_code' => $language_code, 'language_filename' => $language_filename, 'language_directory' => $language_directory, 'currency_id' => $order_query->row['currency_id'], 'currency_code' => $order_query->row['currency_code'], 'currency_value' => $order_query->row['currency_value'], 'ip' => $order_query->row['ip'], 'forwarded_ip' => $order_query->row['forwarded_ip'], 'user_agent' => $order_query->row['user_agent'], 'accept_language' => $order_query->row['accept_language'], 'date_added' => $order_query->row['date_added'], 'date_modified' => $order_query->row['date_modified'] ); } else { return false; } } public function getOrders($data = array()) { $sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE o.order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND o.order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(o.firstname, ' ', o.lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(o.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND o.total = '" . (float)$data['filter_total'] . "'"; } $sort_data = array( 'o.order_id', 'customer', 'status', 'o.date_added', 'o.date_modified', 'o.total' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY o.order_id"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } public function getOrderProducts($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderOption($order_id, $order_option_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_option_id = '" . (int)$order_option_id . "'"); return $query->row; } public function getOrderOptions($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderDownloads($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderVouchers($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderVoucherByVoucherId($voucher_id) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_voucher` WHERE voucher_id = '" . (int)$voucher_id . "'"); return $query->row; } public function getOrderTotals($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows; } public function getTotalOrders($data = array()) { $sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order`"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(firstname, ' ', lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND total = '" . (float)$data['filter_total'] . "'"; } $query = $this->db->query($sql); return $query->row['total']; } public function getTotalOrdersByStoreId($store_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE store_id = '" . (int)$store_id . "'"); return $query->row['total']; } public function getTotalOrdersByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id = '" . (int)$order_status_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByLanguageId($language_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE language_id = '" . (int)$language_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByCurrencyId($currency_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE currency_id = '" . (int)$currency_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalSales() { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'"); return $query->row['total']; } public function getTotalSalesByYear($year) { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND YEAR(date_added) = '" . (int)$year . "'"); return $query->row['total']; } public function createInvoiceNo($order_id) { $order_info = $this->getOrder($order_id); if ($order_info && !$order_info['invoice_no']) { $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'"); if ($query->row['invoice_no']) { $invoice_no = $query->row['invoice_no'] + 1; } else { $invoice_no = 1; } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'"); return $order_info['invoice_prefix'] . $invoice_no; } } public function addOrderHistory($order_id, $data) { $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$data['order_status_id'] . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$data['order_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()"); $order_info = $this->getOrder($order_id); // Send out any gift voucher mails if ($this->config->get('config_complete_status_id') == $data['order_status_id']) { $this->load->model('sale/voucher'); $results = $this->getOrderVouchers($order_id); foreach ($results as $result) { $this->model_sale_voucher->sendVoucher($result['voucher_id']); } } if ($data['notify']) { $language = new Language($order_info['language_directory']); $language->load($order_info['language_filename']); $language->load('mail/order'); $subject = sprintf($language->get('text_subject'), $order_info['store_name'], $order_id); $message = $language->get('text_order') . ' ' . $order_id . "\n"; $message .= $language->get('text_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n\n"; $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$data['order_status_id'] . "' AND language_id = '" . (int)$order_info['language_id'] . "'"); if ($order_status_query->num_rows) { $message .= $language->get('text_order_status') . "\n"; $message .= $order_status_query->row['name'] . "\n\n"; } if ($order_info['customer_id']) { $message .= $language->get('text_link') . "\n"; $message .= html_entity_decode($order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id, ENT_QUOTES, 'UTF-8') . "\n\n"; } if ($data['comment']) { $message .= $language->get('text_comment') . "\n\n"; $message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n"; } $message .= $language->get('text_footer'); $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->hostname = $this->config->get('config_smtp_host'); $mail->username = $this->config->get('config_smtp_username'); $mail->password = $this->config->get('config_smtp_password'); $mail->port = $this->config->get('config_smtp_port'); $mail->timeout = $this->config->get('config_smtp_timeout'); $mail->setTo($order_info['email']); $mail->setFrom($this->config->get('config_email')); $mail->setSender($order_info['store_name']); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8')); $mail->send(); } } public function getOrderHistories($order_id, $start = 0, $limit = 10) { if ($start < 0) { $start = 0; } if ($limit < 1) { $limit = 10; } $query = $this->db->query("SELECT oh.date_added, os.name AS status, oh.comment, oh.notify FROM " . DB_PREFIX . "order_history oh LEFT JOIN " . DB_PREFIX . "order_status os ON oh.order_status_id = os.order_status_id WHERE oh.order_id = '" . (int)$order_id . "' AND os.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY oh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit); return $query->rows; } public function getTotalOrderHistories($order_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$order_id . "'"); return $query->row['total']; } public function getTotalOrderHistoriesByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_status_id = '" . (int)$order_status_id . "'"); return $query->row['total']; } public function getEmailsByProductsOrdered($products, $start, $end) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> '' LIMIT " . (int)$start . "," . (int)$end); return $query->rows; } public function getTotalEmailsByProductsOrdered($products) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> ''"); return $query->rows; } } ?> Изменено 31 июля 2014 пользователем AlexFisher у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще такой таблицы нету oc_order mysql.jpg Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: CREATE TABLE IF NOT EXISTS `oc_order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `invoice_no` int(11) NOT NULL DEFAULT '0', `invoice_prefix` varchar(26) NOT NULL, `store_id` int(11) NOT NULL DEFAULT '0', `store_name` varchar(64) NOT NULL, `store_url` varchar(255) NOT NULL, `customer_id` int(11) NOT NULL DEFAULT '0', `customer_group_id` int(11) NOT NULL DEFAULT '0', `firstname` varchar(32) NOT NULL, `lastname` varchar(32) NOT NULL, `email` varchar(96) NOT NULL, `telephone` varchar(32) NOT NULL, `fax` varchar(32) NOT NULL, `payment_firstname` varchar(32) NOT NULL, `payment_lastname` varchar(32) NOT NULL, `payment_company` varchar(32) NOT NULL, `payment_company_id` varchar(32) NOT NULL, `payment_tax_id` varchar(32) NOT NULL, `payment_address_1` varchar(128) NOT NULL, `payment_address_2` varchar(128) NOT NULL, `payment_city` varchar(128) NOT NULL, `payment_postcode` varchar(10) NOT NULL, `payment_country` varchar(128) NOT NULL, `payment_country_id` int(11) NOT NULL, `payment_zone` varchar(128) NOT NULL, `payment_zone_id` int(11) NOT NULL, `payment_address_format` text NOT NULL, `payment_method` varchar(128) NOT NULL, `payment_code` varchar(128) NOT NULL, `shipping_firstname` varchar(32) NOT NULL, `shipping_lastname` varchar(32) NOT NULL, `shipping_company` varchar(32) NOT NULL, `shipping_address_1` varchar(128) NOT NULL, `shipping_address_2` varchar(128) NOT NULL, `shipping_city` varchar(128) NOT NULL, `shipping_postcode` varchar(10) NOT NULL, `shipping_country` varchar(128) NOT NULL, `shipping_country_id` int(11) NOT NULL, `shipping_zone` varchar(128) NOT NULL, `shipping_zone_id` int(11) NOT NULL, `shipping_address_format` text NOT NULL, `shipping_method` varchar(128) NOT NULL, `shipping_code` varchar(128) NOT NULL, `comment` text NOT NULL, `total` decimal(15,4) NOT NULL DEFAULT '0.0000', `order_status_id` int(11) NOT NULL DEFAULT '0', `affiliate_id` int(11) NOT NULL, `commission` decimal(15,4) NOT NULL, `language_id` int(11) NOT NULL, `currency_id` int(11) NOT NULL, `currency_code` varchar(3) NOT NULL, `currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000', `ip` varchar(40) NOT NULL, `forwarded_ip` varchar(40) NOT NULL, `user_agent` varchar(255) NOT NULL, `accept_language` varchar(255) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; спасибо... на ocStore 1.5.5.1.2 прошло на ура!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 1 августа 2014 Автор Поделиться Опубликовано: 1 августа 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 1 августа 2014 Поделиться Опубликовано: 1 августа 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 0 Перейти к списку тем Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Общие вопросы Ошибка в админке
fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Поменял, ошибка таже Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? У меня вообще такой таблицы нету oc_order Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Правда цирк ! В самой админке есть (где бэкап и востановление) а если входишь через phpMyAdmin То нету как это понимать? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 (изменено) Помогла! На ocStore 1.5.5.1.2 должно получится вот так: <?php class ModelSaleOrder extends Model { public function addOrder($data) { $this->load->model('setting/store'); $store_info = $this->model_setting_store->getStore($data['store_id']); if ($store_info) { $store_name = $store_info['name']; $store_url = $store_info['url']; } else { $store_name = $this->config->get('config_name'); $store_url = HTTP_CATALOG; } $this->load->model('setting/setting'); $setting_info = $this->model_setting_setting->getSetting('setting', $data['store_id']); if (isset($setting_info['invoice_prefix'])) { $invoice_prefix = $setting_info['invoice_prefix']; } else { $invoice_prefix = $this->config->get('config_invoice_prefix'); } $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } $this->load->model('localisation/currency'); $currency_info = $this->model_localisation_currency->getCurrencyByCode($this->config->get('config_currency')); if ($currency_info) { $currency_id = $currency_info['currency_id']; $currency_code = $currency_info['code']; $currency_value = $currency_info['value']; } else { $currency_id = 0; $currency_code = $this->config->get('config_currency'); $currency_value = 1.00000; } $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($invoice_prefix) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($store_name) . "',store_url = '" . $this->db->escape($store_url) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', language_id = '" . (int)$this->config->get('config_language_id') . "', currency_id = '" . (int)$currency_id . "', currency_code = '" . $this->db->escape($currency_code) . "', currency_value = '" . (float)$currency_value . "', date_added = NOW(), date_modified = NOW()"); $order_id = $this->db->getLastId(); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } // Update order total $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function editOrder($order_id, $data) { $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } // Restock products before subtracting the stock later on $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("UPDATE `" . DB_PREFIX . "order` SET firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', date_modified = NOW() 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 . "'"); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_product_id = '" . (int)$order_product['order_product_id'] . "', order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_option_id = '" . (int)$order_option['order_option_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_download_id = '" . (int)$order_download['order_download_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } $this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_voucher_id = '" . (int)$order_voucher['order_voucher_id'] . "', order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; $this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_total_id = '" . (int)$order_total['order_total_id'] . "', order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function deleteOrder($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 . "'"); } public function getOrder($order_id) { $order_query = $this->db->query("SELECT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $reward = 0; $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach ($order_product_query->rows as $product) { $reward += $product['reward']; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'"); if ($country_query->num_rows) { $payment_iso_code_2 = $country_query->row['iso_code_2']; $payment_iso_code_3 = $country_query->row['iso_code_3']; } else { $payment_iso_code_2 = ''; $payment_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'"); if ($zone_query->num_rows) { $payment_zone_code = $zone_query->row['code']; } else { $payment_zone_code = ''; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'"); if ($country_query->num_rows) { $shipping_iso_code_2 = $country_query->row['iso_code_2']; $shipping_iso_code_3 = $country_query->row['iso_code_3']; } else { $shipping_iso_code_2 = ''; $shipping_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'"); if ($zone_query->num_rows) { $shipping_zone_code = $zone_query->row['code']; } else { $shipping_zone_code = ''; } if ($order_query->row['affiliate_id']) { $affiliate_id = $order_query->row['affiliate_id']; } else { $affiliate_id = 0; } $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($affiliate_id); if ($affiliate_info) { $affiliate_firstname = $affiliate_info['firstname']; $affiliate_lastname = $affiliate_info['lastname']; } else { $affiliate_firstname = ''; $affiliate_lastname = ''; } $this->load->model('localisation/language'); $language_info = $this->model_localisation_language->getLanguage($order_query->row['language_id']); if ($language_info) { $language_code = $language_info['code']; $language_filename = $language_info['filename']; $language_directory = $language_info['directory']; } else { $language_code = ''; $language_filename = ''; $language_directory = ''; } return array( 'order_id' => $order_query->row['order_id'], 'invoice_no' => $order_query->row['invoice_no'], 'invoice_prefix' => $order_query->row['invoice_prefix'], 'store_id' => $order_query->row['store_id'], 'store_name' => $order_query->row['store_name'], 'store_url' => $order_query->row['store_url'], 'customer_id' => $order_query->row['customer_id'], 'customer' => $order_query->row['customer'], 'customer_group_id' => $order_query->row['customer_group_id'], 'firstname' => $order_query->row['firstname'], 'lastname' => $order_query->row['lastname'], 'telephone' => $order_query->row['telephone'], 'fax' => $order_query->row['fax'], 'email' => $order_query->row['email'], 'payment_firstname' => $order_query->row['payment_firstname'], 'payment_lastname' => $order_query->row['payment_lastname'], 'payment_company' => $order_query->row['payment_company'], 'payment_company_id' => $order_query->row['payment_company_id'], 'payment_tax_id' => $order_query->row['payment_tax_id'], 'payment_address_1' => $order_query->row['payment_address_1'], 'payment_address_2' => $order_query->row['payment_address_2'], 'payment_postcode' => $order_query->row['payment_postcode'], 'payment_city' => $order_query->row['payment_city'], 'payment_zone_id' => $order_query->row['payment_zone_id'], 'payment_zone' => $order_query->row['payment_zone'], 'payment_zone_code' => $payment_zone_code, 'payment_country_id' => $order_query->row['payment_country_id'], 'payment_country' => $order_query->row['payment_country'], 'payment_iso_code_2' => $payment_iso_code_2, 'payment_iso_code_3' => $payment_iso_code_3, 'payment_address_format' => $order_query->row['payment_address_format'], 'payment_method' => $order_query->row['payment_method'], 'payment_code' => $order_query->row['payment_code'], 'shipping_firstname' => $order_query->row['shipping_firstname'], 'shipping_lastname' => $order_query->row['shipping_lastname'], 'shipping_company' => $order_query->row['shipping_company'], 'shipping_address_1' => $order_query->row['shipping_address_1'], 'shipping_address_2' => $order_query->row['shipping_address_2'], 'shipping_postcode' => $order_query->row['shipping_postcode'], 'shipping_city' => $order_query->row['shipping_city'], 'shipping_zone_id' => $order_query->row['shipping_zone_id'], 'shipping_zone' => $order_query->row['shipping_zone'], 'shipping_zone_code' => $shipping_zone_code, 'shipping_country_id' => $order_query->row['shipping_country_id'], 'shipping_country' => $order_query->row['shipping_country'], 'shipping_iso_code_2' => $shipping_iso_code_2, 'shipping_iso_code_3' => $shipping_iso_code_3, 'shipping_address_format' => $order_query->row['shipping_address_format'], 'shipping_method' => $order_query->row['shipping_method'], 'shipping_code' => $order_query->row['shipping_code'], 'comment' => $order_query->row['comment'], 'total' => $order_query->row['total'], 'reward' => $reward, 'order_status_id' => $order_query->row['order_status_id'], 'affiliate_id' => $order_query->row['affiliate_id'], 'affiliate_firstname' => $affiliate_firstname, 'affiliate_lastname' => $affiliate_lastname, 'commission' => $order_query->row['commission'], 'language_id' => $order_query->row['language_id'], 'language_code' => $language_code, 'language_filename' => $language_filename, 'language_directory' => $language_directory, 'currency_id' => $order_query->row['currency_id'], 'currency_code' => $order_query->row['currency_code'], 'currency_value' => $order_query->row['currency_value'], 'ip' => $order_query->row['ip'], 'forwarded_ip' => $order_query->row['forwarded_ip'], 'user_agent' => $order_query->row['user_agent'], 'accept_language' => $order_query->row['accept_language'], 'date_added' => $order_query->row['date_added'], 'date_modified' => $order_query->row['date_modified'] ); } else { return false; } } public function getOrders($data = array()) { $sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE o.order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND o.order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(o.firstname, ' ', o.lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(o.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND o.total = '" . (float)$data['filter_total'] . "'"; } $sort_data = array( 'o.order_id', 'customer', 'status', 'o.date_added', 'o.date_modified', 'o.total' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY o.order_id"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } public function getOrderProducts($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderOption($order_id, $order_option_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_option_id = '" . (int)$order_option_id . "'"); return $query->row; } public function getOrderOptions($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderDownloads($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderVouchers($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderVoucherByVoucherId($voucher_id) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_voucher` WHERE voucher_id = '" . (int)$voucher_id . "'"); return $query->row; } public function getOrderTotals($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows; } public function getTotalOrders($data = array()) { $sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order`"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(firstname, ' ', lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND total = '" . (float)$data['filter_total'] . "'"; } $query = $this->db->query($sql); return $query->row['total']; } public function getTotalOrdersByStoreId($store_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE store_id = '" . (int)$store_id . "'"); return $query->row['total']; } public function getTotalOrdersByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id = '" . (int)$order_status_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByLanguageId($language_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE language_id = '" . (int)$language_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByCurrencyId($currency_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE currency_id = '" . (int)$currency_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalSales() { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'"); return $query->row['total']; } public function getTotalSalesByYear($year) { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND YEAR(date_added) = '" . (int)$year . "'"); return $query->row['total']; } public function createInvoiceNo($order_id) { $order_info = $this->getOrder($order_id); if ($order_info && !$order_info['invoice_no']) { $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'"); if ($query->row['invoice_no']) { $invoice_no = $query->row['invoice_no'] + 1; } else { $invoice_no = 1; } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'"); return $order_info['invoice_prefix'] . $invoice_no; } } public function addOrderHistory($order_id, $data) { $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$data['order_status_id'] . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$data['order_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()"); $order_info = $this->getOrder($order_id); // Send out any gift voucher mails if ($this->config->get('config_complete_status_id') == $data['order_status_id']) { $this->load->model('sale/voucher'); $results = $this->getOrderVouchers($order_id); foreach ($results as $result) { $this->model_sale_voucher->sendVoucher($result['voucher_id']); } } if ($data['notify']) { $language = new Language($order_info['language_directory']); $language->load($order_info['language_filename']); $language->load('mail/order'); $subject = sprintf($language->get('text_subject'), $order_info['store_name'], $order_id); $message = $language->get('text_order') . ' ' . $order_id . "\n"; $message .= $language->get('text_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n\n"; $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$data['order_status_id'] . "' AND language_id = '" . (int)$order_info['language_id'] . "'"); if ($order_status_query->num_rows) { $message .= $language->get('text_order_status') . "\n"; $message .= $order_status_query->row['name'] . "\n\n"; } if ($order_info['customer_id']) { $message .= $language->get('text_link') . "\n"; $message .= html_entity_decode($order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id, ENT_QUOTES, 'UTF-8') . "\n\n"; } if ($data['comment']) { $message .= $language->get('text_comment') . "\n\n"; $message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n"; } $message .= $language->get('text_footer'); $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->hostname = $this->config->get('config_smtp_host'); $mail->username = $this->config->get('config_smtp_username'); $mail->password = $this->config->get('config_smtp_password'); $mail->port = $this->config->get('config_smtp_port'); $mail->timeout = $this->config->get('config_smtp_timeout'); $mail->setTo($order_info['email']); $mail->setFrom($this->config->get('config_email')); $mail->setSender($order_info['store_name']); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8')); $mail->send(); } } public function getOrderHistories($order_id, $start = 0, $limit = 10) { if ($start < 0) { $start = 0; } if ($limit < 1) { $limit = 10; } $query = $this->db->query("SELECT oh.date_added, os.name AS status, oh.comment, oh.notify FROM " . DB_PREFIX . "order_history oh LEFT JOIN " . DB_PREFIX . "order_status os ON oh.order_status_id = os.order_status_id WHERE oh.order_id = '" . (int)$order_id . "' AND os.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY oh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit); return $query->rows; } public function getTotalOrderHistories($order_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$order_id . "'"); return $query->row['total']; } public function getTotalOrderHistoriesByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_status_id = '" . (int)$order_status_id . "'"); return $query->row['total']; } public function getEmailsByProductsOrdered($products, $start, $end) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> '' LIMIT " . (int)$start . "," . (int)$end); return $query->rows; } public function getTotalEmailsByProductsOrdered($products) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> ''"); return $query->rows; } } ?> Изменено 31 июля 2014 пользователем AlexFisher у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще такой таблицы нету oc_order mysql.jpg Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: CREATE TABLE IF NOT EXISTS `oc_order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `invoice_no` int(11) NOT NULL DEFAULT '0', `invoice_prefix` varchar(26) NOT NULL, `store_id` int(11) NOT NULL DEFAULT '0', `store_name` varchar(64) NOT NULL, `store_url` varchar(255) NOT NULL, `customer_id` int(11) NOT NULL DEFAULT '0', `customer_group_id` int(11) NOT NULL DEFAULT '0', `firstname` varchar(32) NOT NULL, `lastname` varchar(32) NOT NULL, `email` varchar(96) NOT NULL, `telephone` varchar(32) NOT NULL, `fax` varchar(32) NOT NULL, `payment_firstname` varchar(32) NOT NULL, `payment_lastname` varchar(32) NOT NULL, `payment_company` varchar(32) NOT NULL, `payment_company_id` varchar(32) NOT NULL, `payment_tax_id` varchar(32) NOT NULL, `payment_address_1` varchar(128) NOT NULL, `payment_address_2` varchar(128) NOT NULL, `payment_city` varchar(128) NOT NULL, `payment_postcode` varchar(10) NOT NULL, `payment_country` varchar(128) NOT NULL, `payment_country_id` int(11) NOT NULL, `payment_zone` varchar(128) NOT NULL, `payment_zone_id` int(11) NOT NULL, `payment_address_format` text NOT NULL, `payment_method` varchar(128) NOT NULL, `payment_code` varchar(128) NOT NULL, `shipping_firstname` varchar(32) NOT NULL, `shipping_lastname` varchar(32) NOT NULL, `shipping_company` varchar(32) NOT NULL, `shipping_address_1` varchar(128) NOT NULL, `shipping_address_2` varchar(128) NOT NULL, `shipping_city` varchar(128) NOT NULL, `shipping_postcode` varchar(10) NOT NULL, `shipping_country` varchar(128) NOT NULL, `shipping_country_id` int(11) NOT NULL, `shipping_zone` varchar(128) NOT NULL, `shipping_zone_id` int(11) NOT NULL, `shipping_address_format` text NOT NULL, `shipping_method` varchar(128) NOT NULL, `shipping_code` varchar(128) NOT NULL, `comment` text NOT NULL, `total` decimal(15,4) NOT NULL DEFAULT '0.0000', `order_status_id` int(11) NOT NULL DEFAULT '0', `affiliate_id` int(11) NOT NULL, `commission` decimal(15,4) NOT NULL, `language_id` int(11) NOT NULL, `currency_id` int(11) NOT NULL, `currency_code` varchar(3) NOT NULL, `currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000', `ip` varchar(40) NOT NULL, `forwarded_ip` varchar(40) NOT NULL, `user_agent` varchar(255) NOT NULL, `accept_language` varchar(255) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; спасибо... на ocStore 1.5.5.1.2 прошло на ура!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 1 августа 2014 Автор Поделиться Опубликовано: 1 августа 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 1 августа 2014 Поделиться Опубликовано: 1 августа 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 0 Перейти к списку тем Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу.
bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; Поменял, ошибка таже Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? У меня вообще такой таблицы нету oc_order Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Правда цирк ! В самой админке есть (где бэкап и востановление) а если входишь через phpMyAdmin То нету как это понимать? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 (изменено) Помогла! На ocStore 1.5.5.1.2 должно получится вот так: <?php class ModelSaleOrder extends Model { public function addOrder($data) { $this->load->model('setting/store'); $store_info = $this->model_setting_store->getStore($data['store_id']); if ($store_info) { $store_name = $store_info['name']; $store_url = $store_info['url']; } else { $store_name = $this->config->get('config_name'); $store_url = HTTP_CATALOG; } $this->load->model('setting/setting'); $setting_info = $this->model_setting_setting->getSetting('setting', $data['store_id']); if (isset($setting_info['invoice_prefix'])) { $invoice_prefix = $setting_info['invoice_prefix']; } else { $invoice_prefix = $this->config->get('config_invoice_prefix'); } $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } $this->load->model('localisation/currency'); $currency_info = $this->model_localisation_currency->getCurrencyByCode($this->config->get('config_currency')); if ($currency_info) { $currency_id = $currency_info['currency_id']; $currency_code = $currency_info['code']; $currency_value = $currency_info['value']; } else { $currency_id = 0; $currency_code = $this->config->get('config_currency'); $currency_value = 1.00000; } $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($invoice_prefix) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($store_name) . "',store_url = '" . $this->db->escape($store_url) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', language_id = '" . (int)$this->config->get('config_language_id') . "', currency_id = '" . (int)$currency_id . "', currency_code = '" . $this->db->escape($currency_code) . "', currency_value = '" . (float)$currency_value . "', date_added = NOW(), date_modified = NOW()"); $order_id = $this->db->getLastId(); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } // Update order total $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function editOrder($order_id, $data) { $this->load->model('localisation/country'); $this->load->model('localisation/zone'); $country_info = $this->model_localisation_country->getCountry($data['shipping_country_id']); if ($country_info) { $shipping_country = $country_info['name']; $shipping_address_format = $country_info['address_format']; } else { $shipping_country = ''; $shipping_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['shipping_zone_id']); if ($zone_info) { $shipping_zone = $zone_info['name']; } else { $shipping_zone = ''; } $country_info = $this->model_localisation_country->getCountry($data['payment_country_id']); if ($country_info) { $payment_country = $country_info['name']; $payment_address_format = $country_info['address_format']; } else { $payment_country = ''; $payment_address_format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; } $zone_info = $this->model_localisation_zone->getZone($data['payment_zone_id']); if ($zone_info) { $payment_zone = $zone_info['name']; } else { $payment_zone = ''; } // Restock products before subtracting the stock later on $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("UPDATE `" . DB_PREFIX . "order` SET firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', date_modified = NOW() 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 . "'"); if (isset($data['order_product'])) { foreach ($data['order_product'] as $order_product) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_product_id = '" . (int)$order_product['order_product_id'] . "', order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'"); $order_product_id = $this->db->getLastId(); $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'"); if (isset($order_product['order_option'])) { foreach ($order_product['order_option'] as $order_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_option_id = '" . (int)$order_option['order_option_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$order_option['product_option_id'] . "', product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "', name = '" . $this->db->escape($order_option['name']) . "', `value` = '" . $this->db->escape($order_option['value']) . "', `type` = '" . $this->db->escape($order_option['type']) . "'"); $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$order_option['product_option_value_id'] . "' AND subtract = '1'"); } } if (isset($order_product['order_download'])) { foreach ($order_product['order_download'] as $order_download) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_download_id = '" . (int)$order_download['order_download_id'] . "', order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($order_download['name']) . "', filename = '" . $this->db->escape($order_download['filename']) . "', mask = '" . $this->db->escape($order_download['mask']) . "', remaining = '" . (int)$order_download['remaining'] . "'"); } } } } $this->db->query("DELETE FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_voucher'])) { foreach ($data['order_voucher'] as $order_voucher) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_voucher_id = '" . (int)$order_voucher['order_voucher_id'] . "', order_id = '" . (int)$order_id . "', voucher_id = '" . (int)$order_voucher['voucher_id'] . "', description = '" . $this->db->escape($order_voucher['description']) . "', code = '" . $this->db->escape($order_voucher['code']) . "', from_name = '" . $this->db->escape($order_voucher['from_name']) . "', from_email = '" . $this->db->escape($order_voucher['from_email']) . "', to_name = '" . $this->db->escape($order_voucher['to_name']) . "', to_email = '" . $this->db->escape($order_voucher['to_email']) . "', voucher_theme_id = '" . (int)$order_voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($order_voucher['message']) . "', amount = '" . (float)$order_voucher['amount'] . "'"); $this->db->query("UPDATE " . DB_PREFIX . "voucher SET order_id = '" . (int)$order_id . "' WHERE voucher_id = '" . (int)$order_voucher['voucher_id'] . "'"); } } // Get the total $total = 0; $this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "'"); if (isset($data['order_total'])) { foreach ($data['order_total'] as $order_total) { $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_total_id = '" . (int)$order_total['order_total_id'] . "', order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($order_total['code']) . "', title = '" . $this->db->escape($order_total['title']) . "', text = '" . $this->db->escape($order_total['text']) . "', `value` = '" . (float)$order_total['value'] . "', sort_order = '" . (int)$order_total['sort_order'] . "'"); } $total += $order_total['value']; } // Affiliate $affiliate_id = 0; $commission = 0; if (!empty($this->request->post['affiliate_id'])) { $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($this->request->post['affiliate_id']); if ($affiliate_info) { $affiliate_id = $affiliate_info['affiliate_id']; $commission = ($total / 100) * $affiliate_info['commission']; } } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET total = '" . (float)$total . "', affiliate_id = '" . (int)$affiliate_id . "', commission = '" . (float)$commission . "' WHERE order_id = '" . (int)$order_id . "'"); } public function deleteOrder($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 . "'"); } public function getOrder($order_id) { $order_query = $this->db->query("SELECT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $reward = 0; $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach ($order_product_query->rows as $product) { $reward += $product['reward']; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'"); if ($country_query->num_rows) { $payment_iso_code_2 = $country_query->row['iso_code_2']; $payment_iso_code_3 = $country_query->row['iso_code_3']; } else { $payment_iso_code_2 = ''; $payment_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'"); if ($zone_query->num_rows) { $payment_zone_code = $zone_query->row['code']; } else { $payment_zone_code = ''; } $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'"); if ($country_query->num_rows) { $shipping_iso_code_2 = $country_query->row['iso_code_2']; $shipping_iso_code_3 = $country_query->row['iso_code_3']; } else { $shipping_iso_code_2 = ''; $shipping_iso_code_3 = ''; } $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'"); if ($zone_query->num_rows) { $shipping_zone_code = $zone_query->row['code']; } else { $shipping_zone_code = ''; } if ($order_query->row['affiliate_id']) { $affiliate_id = $order_query->row['affiliate_id']; } else { $affiliate_id = 0; } $this->load->model('sale/affiliate'); $affiliate_info = $this->model_sale_affiliate->getAffiliate($affiliate_id); if ($affiliate_info) { $affiliate_firstname = $affiliate_info['firstname']; $affiliate_lastname = $affiliate_info['lastname']; } else { $affiliate_firstname = ''; $affiliate_lastname = ''; } $this->load->model('localisation/language'); $language_info = $this->model_localisation_language->getLanguage($order_query->row['language_id']); if ($language_info) { $language_code = $language_info['code']; $language_filename = $language_info['filename']; $language_directory = $language_info['directory']; } else { $language_code = ''; $language_filename = ''; $language_directory = ''; } return array( 'order_id' => $order_query->row['order_id'], 'invoice_no' => $order_query->row['invoice_no'], 'invoice_prefix' => $order_query->row['invoice_prefix'], 'store_id' => $order_query->row['store_id'], 'store_name' => $order_query->row['store_name'], 'store_url' => $order_query->row['store_url'], 'customer_id' => $order_query->row['customer_id'], 'customer' => $order_query->row['customer'], 'customer_group_id' => $order_query->row['customer_group_id'], 'firstname' => $order_query->row['firstname'], 'lastname' => $order_query->row['lastname'], 'telephone' => $order_query->row['telephone'], 'fax' => $order_query->row['fax'], 'email' => $order_query->row['email'], 'payment_firstname' => $order_query->row['payment_firstname'], 'payment_lastname' => $order_query->row['payment_lastname'], 'payment_company' => $order_query->row['payment_company'], 'payment_company_id' => $order_query->row['payment_company_id'], 'payment_tax_id' => $order_query->row['payment_tax_id'], 'payment_address_1' => $order_query->row['payment_address_1'], 'payment_address_2' => $order_query->row['payment_address_2'], 'payment_postcode' => $order_query->row['payment_postcode'], 'payment_city' => $order_query->row['payment_city'], 'payment_zone_id' => $order_query->row['payment_zone_id'], 'payment_zone' => $order_query->row['payment_zone'], 'payment_zone_code' => $payment_zone_code, 'payment_country_id' => $order_query->row['payment_country_id'], 'payment_country' => $order_query->row['payment_country'], 'payment_iso_code_2' => $payment_iso_code_2, 'payment_iso_code_3' => $payment_iso_code_3, 'payment_address_format' => $order_query->row['payment_address_format'], 'payment_method' => $order_query->row['payment_method'], 'payment_code' => $order_query->row['payment_code'], 'shipping_firstname' => $order_query->row['shipping_firstname'], 'shipping_lastname' => $order_query->row['shipping_lastname'], 'shipping_company' => $order_query->row['shipping_company'], 'shipping_address_1' => $order_query->row['shipping_address_1'], 'shipping_address_2' => $order_query->row['shipping_address_2'], 'shipping_postcode' => $order_query->row['shipping_postcode'], 'shipping_city' => $order_query->row['shipping_city'], 'shipping_zone_id' => $order_query->row['shipping_zone_id'], 'shipping_zone' => $order_query->row['shipping_zone'], 'shipping_zone_code' => $shipping_zone_code, 'shipping_country_id' => $order_query->row['shipping_country_id'], 'shipping_country' => $order_query->row['shipping_country'], 'shipping_iso_code_2' => $shipping_iso_code_2, 'shipping_iso_code_3' => $shipping_iso_code_3, 'shipping_address_format' => $order_query->row['shipping_address_format'], 'shipping_method' => $order_query->row['shipping_method'], 'shipping_code' => $order_query->row['shipping_code'], 'comment' => $order_query->row['comment'], 'total' => $order_query->row['total'], 'reward' => $reward, 'order_status_id' => $order_query->row['order_status_id'], 'affiliate_id' => $order_query->row['affiliate_id'], 'affiliate_firstname' => $affiliate_firstname, 'affiliate_lastname' => $affiliate_lastname, 'commission' => $order_query->row['commission'], 'language_id' => $order_query->row['language_id'], 'language_code' => $language_code, 'language_filename' => $language_filename, 'language_directory' => $language_directory, 'currency_id' => $order_query->row['currency_id'], 'currency_code' => $order_query->row['currency_code'], 'currency_value' => $order_query->row['currency_value'], 'ip' => $order_query->row['ip'], 'forwarded_ip' => $order_query->row['forwarded_ip'], 'user_agent' => $order_query->row['user_agent'], 'accept_language' => $order_query->row['accept_language'], 'date_added' => $order_query->row['date_added'], 'date_modified' => $order_query->row['date_modified'] ); } else { return false; } } public function getOrders($data = array()) { $sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE o.order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND o.order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(o.firstname, ' ', o.lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(o.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND o.total = '" . (float)$data['filter_total'] . "'"; } $sort_data = array( 'o.order_id', 'customer', 'status', 'o.date_added', 'o.date_modified', 'o.total' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY o.order_id"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } public function getOrderProducts($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderOption($order_id, $order_option_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_option_id = '" . (int)$order_option_id . "'"); return $query->row; } public function getOrderOptions($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderDownloads($order_id, $order_product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product_id . "'"); return $query->rows; } public function getOrderVouchers($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; } public function getOrderVoucherByVoucherId($voucher_id) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_voucher` WHERE voucher_id = '" . (int)$voucher_id . "'"); return $query->row; } public function getOrderTotals($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows; } public function getTotalOrders($data = array()) { $sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order`"; if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) { $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'"; } else { $sql .= " WHERE order_status_id > '0'"; } if (!empty($data['filter_order_id'])) { $sql .= " AND order_id = '" . (int)$data['filter_order_id'] . "'"; } if (!empty($data['filter_customer'])) { $sql .= " AND CONCAT(firstname, ' ', lastname) LIKE '%" . $this->db->escape($data['filter_customer']) . "%'"; } if (!empty($data['filter_date_added'])) { $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')"; } if (!empty($data['filter_date_modified'])) { $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; } if (!empty($data['filter_total'])) { $sql .= " AND total = '" . (float)$data['filter_total'] . "'"; } $query = $this->db->query($sql); return $query->row['total']; } public function getTotalOrdersByStoreId($store_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE store_id = '" . (int)$store_id . "'"); return $query->row['total']; } public function getTotalOrdersByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id = '" . (int)$order_status_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByLanguageId($language_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE language_id = '" . (int)$language_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalOrdersByCurrencyId($currency_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE currency_id = '" . (int)$currency_id . "' AND order_status_id > '0'"); return $query->row['total']; } public function getTotalSales() { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'"); return $query->row['total']; } public function getTotalSalesByYear($year) { $query = $this->db->query("SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND YEAR(date_added) = '" . (int)$year . "'"); return $query->row['total']; } public function createInvoiceNo($order_id) { $order_info = $this->getOrder($order_id); if ($order_info && !$order_info['invoice_no']) { $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'"); if ($query->row['invoice_no']) { $invoice_no = $query->row['invoice_no'] + 1; } else { $invoice_no = 1; } $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'"); return $order_info['invoice_prefix'] . $invoice_no; } } public function addOrderHistory($order_id, $data) { $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$data['order_status_id'] . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$data['order_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()"); $order_info = $this->getOrder($order_id); // Send out any gift voucher mails if ($this->config->get('config_complete_status_id') == $data['order_status_id']) { $this->load->model('sale/voucher'); $results = $this->getOrderVouchers($order_id); foreach ($results as $result) { $this->model_sale_voucher->sendVoucher($result['voucher_id']); } } if ($data['notify']) { $language = new Language($order_info['language_directory']); $language->load($order_info['language_filename']); $language->load('mail/order'); $subject = sprintf($language->get('text_subject'), $order_info['store_name'], $order_id); $message = $language->get('text_order') . ' ' . $order_id . "\n"; $message .= $language->get('text_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n\n"; $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$data['order_status_id'] . "' AND language_id = '" . (int)$order_info['language_id'] . "'"); if ($order_status_query->num_rows) { $message .= $language->get('text_order_status') . "\n"; $message .= $order_status_query->row['name'] . "\n\n"; } if ($order_info['customer_id']) { $message .= $language->get('text_link') . "\n"; $message .= html_entity_decode($order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id, ENT_QUOTES, 'UTF-8') . "\n\n"; } if ($data['comment']) { $message .= $language->get('text_comment') . "\n\n"; $message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n"; } $message .= $language->get('text_footer'); $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->hostname = $this->config->get('config_smtp_host'); $mail->username = $this->config->get('config_smtp_username'); $mail->password = $this->config->get('config_smtp_password'); $mail->port = $this->config->get('config_smtp_port'); $mail->timeout = $this->config->get('config_smtp_timeout'); $mail->setTo($order_info['email']); $mail->setFrom($this->config->get('config_email')); $mail->setSender($order_info['store_name']); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8')); $mail->send(); } } public function getOrderHistories($order_id, $start = 0, $limit = 10) { if ($start < 0) { $start = 0; } if ($limit < 1) { $limit = 10; } $query = $this->db->query("SELECT oh.date_added, os.name AS status, oh.comment, oh.notify FROM " . DB_PREFIX . "order_history oh LEFT JOIN " . DB_PREFIX . "order_status os ON oh.order_status_id = os.order_status_id WHERE oh.order_id = '" . (int)$order_id . "' AND os.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY oh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit); return $query->rows; } public function getTotalOrderHistories($order_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$order_id . "'"); return $query->row['total']; } public function getTotalOrderHistoriesByOrderStatusId($order_status_id) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_history WHERE order_status_id = '" . (int)$order_status_id . "'"); return $query->row['total']; } public function getEmailsByProductsOrdered($products, $start, $end) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> '' LIMIT " . (int)$start . "," . (int)$end); return $query->rows; } public function getTotalEmailsByProductsOrdered($products) { $implode = array(); foreach ($products as $product_id) { $implode[] = "op.product_id = '" . (int)$product_id . "'"; } $query = $this->db->query("SELECT DISTINCT email FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op ON (o.order_id = op.order_id) WHERE (" . implode(" OR ", $implode) . ") AND o.order_status_id <> '0' AND o.email <> ''"); return $query->rows; } } ?> Изменено 31 июля 2014 пользователем AlexFisher у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
fijneman Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kourysan Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 У меня вообще такой таблицы нету oc_order mysql.jpg Могу и сам создать: вот ошибка: Notice: Error: Unknown column 'o.date_modified' in 'where clause' Error No: 1054 SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id > '0' AND DATE(date_added) = DATE('2014-07-02') AND DATE(o.date_modified) = DATE('2014-07-01') in /sata1/home/users/sexshoppi/www/www.sex-shopping.com.ua/vqmod/vqcache/vq2-system_database_mysql.php on line 90 Создаём таблицу: CREATE TABLE `oc_order` ( `order_status_id` int(11) NOT NULL DEFAULT '0', `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; И потом получается вот это делаю: Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')" Можно так ? Или как? Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: CREATE TABLE IF NOT EXISTS `oc_order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `invoice_no` int(11) NOT NULL DEFAULT '0', `invoice_prefix` varchar(26) NOT NULL, `store_id` int(11) NOT NULL DEFAULT '0', `store_name` varchar(64) NOT NULL, `store_url` varchar(255) NOT NULL, `customer_id` int(11) NOT NULL DEFAULT '0', `customer_group_id` int(11) NOT NULL DEFAULT '0', `firstname` varchar(32) NOT NULL, `lastname` varchar(32) NOT NULL, `email` varchar(96) NOT NULL, `telephone` varchar(32) NOT NULL, `fax` varchar(32) NOT NULL, `payment_firstname` varchar(32) NOT NULL, `payment_lastname` varchar(32) NOT NULL, `payment_company` varchar(32) NOT NULL, `payment_company_id` varchar(32) NOT NULL, `payment_tax_id` varchar(32) NOT NULL, `payment_address_1` varchar(128) NOT NULL, `payment_address_2` varchar(128) NOT NULL, `payment_city` varchar(128) NOT NULL, `payment_postcode` varchar(10) NOT NULL, `payment_country` varchar(128) NOT NULL, `payment_country_id` int(11) NOT NULL, `payment_zone` varchar(128) NOT NULL, `payment_zone_id` int(11) NOT NULL, `payment_address_format` text NOT NULL, `payment_method` varchar(128) NOT NULL, `payment_code` varchar(128) NOT NULL, `shipping_firstname` varchar(32) NOT NULL, `shipping_lastname` varchar(32) NOT NULL, `shipping_company` varchar(32) NOT NULL, `shipping_address_1` varchar(128) NOT NULL, `shipping_address_2` varchar(128) NOT NULL, `shipping_city` varchar(128) NOT NULL, `shipping_postcode` varchar(10) NOT NULL, `shipping_country` varchar(128) NOT NULL, `shipping_country_id` int(11) NOT NULL, `shipping_zone` varchar(128) NOT NULL, `shipping_zone_id` int(11) NOT NULL, `shipping_address_format` text NOT NULL, `shipping_method` varchar(128) NOT NULL, `shipping_code` varchar(128) NOT NULL, `comment` text NOT NULL, `total` decimal(15,4) NOT NULL DEFAULT '0.0000', `order_status_id` int(11) NOT NULL DEFAULT '0', `affiliate_id` int(11) NOT NULL, `commission` decimal(15,4) NOT NULL, `language_id` int(11) NOT NULL, `currency_id` int(11) NOT NULL, `currency_code` varchar(3) NOT NULL, `currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000', `ip` varchar(40) NOT NULL, `forwarded_ip` varchar(40) NOT NULL, `user_agent` varchar(255) NOT NULL, `accept_language` varchar(255) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; спасибо... на ocStore 1.5.5.1.2 прошло на ура!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... bobotol Опубликовано: 1 августа 2014 Автор Поделиться Опубликовано: 1 августа 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Ketty83 Опубликовано: 1 августа 2014 Поделиться Опубликовано: 1 августа 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 0
bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
kmkkoxa Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
bobotol Опубликовано: 31 июля 2014 Автор Поделиться Опубликовано: 31 июля 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Ketty83 Опубликовано: 31 июля 2014 Поделиться Опубликовано: 31 июля 2014 супер, вы наткнулись на ошибку в фале движка. Странно,что никто ее ранее не видел. Присутствует в ocStore, включая opencart 1.5.6.4. Напишу разрабам, чтобы пофиксили Нужно в файле admin/model/sale/order.php в методе getTotalOrders строку $sql .= " AND DATE(o.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; заменить на $sql .= " AND DATE(date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')"; спасибо... на ocStore 1.5.5.1.2 прошло на ура!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
bobotol Опубликовано: 1 августа 2014 Автор Поделиться Опубликовано: 1 августа 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Ketty83 Опубликовано: 1 августа 2014 Поделиться Опубликовано: 1 августа 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Рекомендованные сообщения