bobotol Опубліковано: 31 липня 2014 Share Опубліковано: 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 Надіслати Поділитися на інших сайтах More sharing options...
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 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 Надіслати Поділитися на інших сайтах More sharing options...
Shkip Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 ну так черным по английски написано - Error: Unknown column 'o.date_modified' in 'where clause' Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Сам бы хотел бы я знать что это )) Надіслати Поділитися на інших сайтах More sharing options... Shkip Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 сперва-наперво надо проверить таблицу oc_order, если там колонки date_added и date_modified Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня есть!! Причем вся эта ошибка из-за указания "Дата изменения". Куда лезть и что делать подскажите? Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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']) . "')"; Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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']) . "')"; Поменял, ошибка таже Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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 То нету как это понимать? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 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 у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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 ; Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 31 липня 2014 Share Опубліковано: 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 прошло на ура!! Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 1 серпня 2014 Автор Share Опубліковано: 1 серпня 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 1 серпня 2014 Share Опубліковано: 1 серпня 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Загальні питання Ошибка в админке Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Надіслати Поділитися на інших сайтах More sharing options...
bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Что это значит, нет записи в заданный период или чего-то не хватает в самой системе? Сам бы хотел бы я знать что это )) Надіслати Поділитися на інших сайтах More sharing options...
Shkip Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 сперва-наперво надо проверить таблицу oc_order, если там колонки date_added и date_modified Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня есть!! Причем вся эта ошибка из-за указания "Дата изменения". Куда лезть и что делать подскажите? Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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']) . "')"; Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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']) . "')"; Поменял, ошибка таже Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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 То нету как это понимать? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 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 у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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 ; Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 31 липня 2014 Share Опубліковано: 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 прошло на ура!! Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 1 серпня 2014 Автор Share Опубліковано: 1 серпня 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 1 серпня 2014 Share Опубліковано: 1 серпня 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Загальні питання Ошибка в админке Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня есть!! Причем вся эта ошибка из-за указания "Дата изменения". Куда лезть и что делать подскажите? Надіслати Поділитися на інших сайтах More sharing options...
kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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']) . "')"; Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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']) . "')"; Поменял, ошибка таже Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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 То нету как это понимать? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 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 у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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 ; Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 31 липня 2014 Share Опубліковано: 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 прошло на ура!! Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 1 серпня 2014 Автор Share Опубліковано: 1 серпня 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 1 серпня 2014 Share Опубліковано: 1 серпня 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Загальні питання Ошибка в админке
fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Забавно, сейчас тоже проверил, тоже ошибка. OC store 1.5.5.1.2 Там нужно только date_modified менять или и date_added тоже? З.Ы. Оказывается нужна только строка 595. Ошибка пропала, но фильтр не находит ничего Надіслати Поділитися на інших сайтах More sharing options...
kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Там нужно только date_modified менять или и date_added тоже? только date_modified Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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']) . "')"; Поменял, ошибка таже Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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 То нету как это понимать? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 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 у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Надіслати Поділитися на інших сайтах More sharing options... fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Надіслати Поділитися на інших сайтах More sharing options... kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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 ; Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 31 липня 2014 Share Опубліковано: 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 прошло на ура!! Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 1 серпня 2014 Автор Share Опубліковано: 1 серпня 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 1 серпня 2014 Share Опубліковано: 1 серпня 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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']) . "')"; Поменял, ошибка таже Надіслати Поділитися на інших сайтах More sharing options...
bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 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 То нету как это понимать? Надіслати Поділитися на інших сайтах More sharing options...
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 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 у меня аж туннельный синдром обострился, пока вашу простыню листал. Пользуйтесь спойлерами для таких дел. Надіслати Поділитися на інших сайтах More sharing options...
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Может кому понадобится, прикладываю файл (admin/model/sale/order.php). order.php Надіслати Поділитися на інших сайтах More sharing options...
fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Странно всё это. На локалке на чистой установке нет вообще этой ошибки и в order.php все нормально. При этом у меня есть еще одна версия на локалке, на которой я ставил опыты и вообще знакомился с опенкартом и там эта ошибка есть. Сам бы я ее не поставил по идее. Фильтр оказывается работает, это я не так понял принцип фильтрации и думал что он мне выведет все ордера с 1 по 31 число. Вылетело из головы, что вторая колонка это дата модификации и поэтому выводило пустоту. Надіслати Поділитися на інших сайтах More sharing options...
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 У меня вообще чистый двиг на хостинге с такой ошибкой, мне кажется это недоработка разработчиков. :-) Надіслати Поділитися на інших сайтах More sharing options...
fijneman Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Звиняйте был не прав. В оригинальной чистой версии ошибка есть. Я просто запамятовал и ставил на чистую установку мод admin order pages, в котором заменялся оригинальный багованный order.php на order.php из этого мода. В моде ошибки не было. Надіслати Поділитися на інших сайтах More sharing options...
kourysan Опубліковано: 31 липня 2014 Share Опубліковано: 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 ; Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Надіслати Поділитися на інших сайтах More sharing options... kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 31 липня 2014 Share Опубліковано: 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 прошло на ура!! Надіслати Поділитися на інших сайтах More sharing options... bobotol Опубліковано: 1 серпня 2014 Автор Share Опубліковано: 1 серпня 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Надіслати Поділитися на інших сайтах More sharing options... Ketty83 Опубліковано: 1 серпня 2014 Share Опубліковано: 1 серпня 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Правда цирк ! В самой админке есть (где бэкап и воccтановление) а если входишь через phpMyAdmin То нету как это понимать? так это что у всех тогда так ? Получается ошибка при установке движка? Надіслати Поділитися на інших сайтах More sharing options...
kmkkoxa Опубліковано: 31 липня 2014 Share Опубліковано: 31 липня 2014 Правда цирк ! В самой админке есть (где бэкап и воccтановление) back.jpg а если входишь через phpMyAdmin mysql.jpg То нету как это понимать? Может вы не в ту базу зашли? Надіслати Поділитися на інших сайтах More sharing options...
bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Таблица oc_order - это таблица, в которой хранятся все заказы. Она в движке есть всегда. Возможно, у вас префикс таблицы не oc_ или просто проблемы с базой. запросом, который вы написали ее создавать не правильно. Если ее нет, советую переустановить базу Эта таблица создается так: Ой ошибся эта таблица там и там есть oc_order Надіслати Поділитися на інших сайтах More sharing options...
bobotol Опубліковано: 31 липня 2014 Автор Share Опубліковано: 31 липня 2014 Может вы не в ту базу зашли? Ой ошибся эта таблица там и там есть oc_order да есть .. но в этой таблице нет такого поля o.date_modified Надіслати Поділитися на інших сайтах More sharing options...
Ketty83 Опубліковано: 31 липня 2014 Share Опубліковано: 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 прошло на ура!! Надіслати Поділитися на інших сайтах More sharing options...
bobotol Опубліковано: 1 серпня 2014 Автор Share Опубліковано: 1 серпня 2014 спасибо... на ocStore 1.5.5.1.2 прошло на ура!! А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто Хотя у меня всё есть за это промежуток Надіслати Поділитися на інших сайтах More sharing options...
Ketty83 Опубліковано: 1 серпня 2014 Share Опубліковано: 1 серпня 2014 А у меня тоже пошло (opencart 1.5.5.1) только глюк следующий, когда вводишь дату добавления, и дату изменения и выбираешь любой статус например: в обработке, и нажимаешь на кнопку фильтр, и результат: пусто gluk.jpg Хотя у меня всё есть за это промежуток это не глюк! При указании фильтров будьте внимательны, вы немного не понимаете логики фильтра.. учитываются сразу все параметры... и даты указываются конкретные а не с такого по такое.. Конкретно по вашей картинке, фильтр отсортировал все заказы со статусом В обработке, добавленные 01,06,2014 и последние изменения вносились аж 31,08,2014 :-D в будущем.. Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts