diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 937775371..810e8778e 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -206,9 +206,13 @@ abstract class PaymentModuleCore extends Module $order_detail_list[] = $order_detail; // Adding an entry in order_carrier table - Db::getInstance()->execute(' - INSERT INTO `'._DB_PREFIX_.'order_carrier` (`id_order`, `id_carrier`, `weight`, `shipping_cost_tax_excl`, `shipping_cost_tax_incl`, `date_add`) VALUES - ('.(int)$order->id.', '.(int)$carrier->id.', '.(float)$order->getTotalWeight().', '.(float)$order->total_shipping_tax_excl.', '.(float)$order->total_shipping_tax_incl.', NOW())'); + $order_carrier = new OrderCarrier(); + $order_carrier->id_order = (int)$order->id; + $order_carrier->id_carrier = (int)$carrier->id; + $order_carrier->weight = (float)$order->getTotalWeight(); + $order_carrier->shipping_cost_tax_excl = (float)$order->total_shipping_tax_excl; + $order_carrier->shipping_cost_tax_incl = (float)$order->total_shipping_tax_incl; + $order_carrier->add(); } // Register Payment if (!$order->addOrderPayment($amountPaid)) diff --git a/classes/order/Order.php b/classes/order/Order.php index 1373f5363..8799816d5 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -1084,10 +1084,14 @@ class OrderCore extends ObjectModel $order_invoice->add(); // Update order_carrier - Db::getInstance()->execute(' - UPDATE `'._DB_PREFIX_.'order_carrier` - SET `id_order_invoice` = '.(int)$order_invoice->id.' - WHERE `id_order` = '.(int)$order_invoice->id_order); + $id_order_carrier = Db::getInstance()->getValue(' + SELECT `id_order_carrier` + FROM `'._DB_PREFIX_.'order_carrier` + WHERE `id_order` = '.(int)$order_invoice->id_order.' + AND `id_order_invoice` IS NOT NULL'); + $order_carrier = new OrderCarrier($id_order_carrier); + $order_carrier->id_order_invoice = (int)$order_invoice->id; + $order_carrier->update(); // Update order detail Db::getInstance()->execute(' diff --git a/classes/order/OrderCarrier.php b/classes/order/OrderCarrier.php new file mode 100644 index 000000000..bd868bd3f --- /dev/null +++ b/classes/order/OrderCarrier.php @@ -0,0 +1,98 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 6844 $ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +class OrderCarrierCore extends ObjectModel +{ + /** @var integer */ + public $id_order_carrier; + + /** @var integer */ + public $id_order; + + /** @var integer */ + public $id_carrier; + + /** @var integer */ + public $id_order_invoice; + + /** @var float */ + public $weight; + + /** @var float */ + public $shipping_cost_tax_excl; + + /** @var float */ + public $shipping_cost_tax_incl; + + /** @var integer */ + public $tracking_number; + + + /** @var string Object creation date */ + public $date_add; + + protected $tables = array ('order_carrier'); + + protected $fieldsRequired = array ('id_order', 'id_carrier'); + protected $fieldsValidate = array ( + 'id_order_carrier' => 'isUnsignedId', + 'id_order' => 'isUnsignedId', + 'id_carrier' => 'isUnsignedId', + 'id_order_invoice' => 'isUnsignedId', + 'weight' => 'isFloat', + 'shipping_cost_tax_excl' => 'isFloat', + 'shipping_cost_tax_incl' => 'isFloat', + 'tracking_number' => 'isAnything'); + + public static $definition = array( + 'table' => 'order_carrier', + 'primary' => 'id_order_carrier', + ); + + protected $webserviceParameters = array( + 'fields' => array( + 'id_order' => array('xlink_resource' => 'orders'), + 'id_carrier' => array('xlink_resource' => 'carriers'), + ), + ); + + public function getFields() + { + $this->validateFields(); + + $fields['id_order'] = (int)($this->id_order); + $fields['id_carrier'] = (int)($this->id_carrier); + $fields['id_order_invoice'] = (int)($this->id_order_invoice); + $fields['weight'] = (float)($this->weight); + $fields['shipping_cost_tax_excl'] = (float)($this->shipping_cost_tax_excl); + $fields['shipping_cost_tax_incl'] = (float)($this->shipping_cost_tax_incl); + $fields['tracking_number'] = pSQL(($this->tracking_number)); + $fields['date_add'] = pSQL($this->date_add); + + return $fields; + } +} \ No newline at end of file diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index ee1c5742f..f874c88f5 100755 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -175,12 +175,15 @@ class AdminOrdersControllerCore extends AdminController // Update order_carrier $id_order_invoice = Tools::getValue('id_order_invoice'); $id_carrier = Tools::getValue('id_carrier'); - Db::getInstance()->execute(' - UPDATE `'._DB_PREFIX_.'order_carrier` - SET `tracking_number` = \''.pSQL(Tools::getValue('tracking_number')).'\' + $id_order_carrier = Db::getInstance()->getValue(' + SELECT `id_order_carrier` + FROM `'._DB_PREFIX_.'order_carrier` WHERE `id_order` = '.(int)$order->id. ' AND `id_carrier` = '.(int)$id_carrier. ($id_order_invoice ? ' AND `id_order_invoice` = '.(int)$id_order_invoice : '')); + $order_carrier = new OrderCarrier($id_order_carrier); + $order_carrier->tracking_number = pSQL(Tools::getValue('tracking_number')); + $order_carrier->update(); global $_LANGMAIL; $customer = new Customer((int)$order->id_customer); @@ -635,17 +638,14 @@ class AdminOrdersControllerCore extends AdminController $payment->update(); } - $order_carrier = Db::getInstance()->getRow(' - SELECT * + $id_order_carrier = Db::getInstance()->getRow(' + SELECT `id_order_carrier` FROM `'._DB_PREFIX_.'order_carrier` WHERE `id_order` = '.(int)$order->id); - - // Update order carrier amount - Db::getInstance()->execute(' - UPDATE `'._DB_PREFIX_.'order_carrier` - SET `shipping_cost_tax_excl` = '.(float)Tools::convertPriceFull($order_carrier['shipping_cost_tax_excl'], $old_currency, $currency).', - `shipping_cost_tax_incl` = '.(float)Tools::convertPriceFull($order_carrier['shipping_cost_tax_incl'], $old_currency, $currency).' - WHERE `id_order` = '.(int)$order->id); + $order_carrier = new OrderCarrier($id_order_carrier); + $order_carrier->shipping_cost_tax_excl = (float)Tools::convertPriceFull($order_carrier['shipping_cost_tax_excl'], $old_currency, $currency); + $order_carrier->shipping_cost_tax_incl = (float)Tools::convertPriceFull($order_carrier['shipping_cost_tax_incl'], $old_currency, $currency); + $order_carrier->update(); // Update order amount $order->total_discounts = Tools::convertPriceFull($order->total_discounts, $old_currency, $currency); @@ -1012,16 +1012,6 @@ class AdminOrdersControllerCore extends AdminController $order_carrier->shipping_cost_tax_excl = (float)$order_invoice->total_shipping_tax_excl; $order_carrier->shipping_cost_tax_incl = ($use_taxes) ? (float)$order_invoice->total_shipping_tax_incl : (float)$order_invoice->total_shipping_tax_excl; $order_carrier->add(); - /*// Adding an entry in order_carrier table - Db::getInstance()->execute(' - INSERT INTO `'._DB_PREFIX_.'order_carrier` (`id_order`, `id_carrier`, `id_order_invoice`, `weight`, `shipping_cost_tax_excl`, `shipping_cost_tax_incl`, `date_add`) VALUES - ('.(int)$order->id.', - '.(int)$order->id_carrier.', - '.(int)$order_invoice->id.', - '.(float)$cart->getTotalWeight().', - '.$order_invoice->total_shipping_tax_excl.', - '.(($use_taxes) ? $order_invoice->total_shipping_tax_incl : $order_invoice->total_shipping_tax_excl).', - NOW())');*/ } // Update current invoice else diff --git a/install-dev/php/add_order_carrier.php b/install-dev/php/add_order_carrier.php index 15ec00a57..ca6ff8201 100755 --- a/install-dev/php/add_order_carrier.php +++ b/install-dev/php/add_order_carrier.php @@ -35,9 +35,9 @@ function add_order_carrier() if (count($orders) && is_array($orders)) { $i = 0; - $sql = 'INSERT INTO `'._DB_PREFIX_.'order_carrier` (`id_order`, `id_carrier`, `id_order_invoice`, `weight`, `shipping_cost_tax_excl`, `shipping_cost_tax_incl`, `date_add`) VALUES '; + $sql = 'INSERT INTO `'._DB_PREFIX_.'order_carrier` (`id_order_carrier`, `id_order`, `id_carrier`, `id_order_invoice`, `weight`, `shipping_cost_tax_excl`, `shipping_cost_tax_incl`, `date_add`) VALUES '; foreach ($orders as $order) - $sql .= '('.(int)$order['id_order'].', '.(int)$order['id_carrier'].', '.(int)$order['id_order_invoice'].', '.(float)$order['product_weight'].', '.(float)$order['total_shipping_tax_excl'].', '.(float)$order['total_shipping_tax_incl'].', "'.pSQL($order['date_add']).'"),'; + $sql .= '(NULL, '.(int)$order['id_order'].', '.(int)$order['id_carrier'].', '.(int)$order['id_order_invoice'].', '.(float)$order['product_weight'].', '.(float)$order['total_shipping_tax_excl'].', '.(float)$order['total_shipping_tax_incl'].', "'.pSQL($order['date_add']).'"),'; // removing last comma to avoid SQL error $sql = substr($sql, 0, strlen($sql) - 1); Db::getInstance()->execute($sql); diff --git a/install-dev/sql/db.sql b/install-dev/sql/db.sql index 5f66656aa..f874a0134 100644 --- a/install-dev/sql/db.sql +++ b/install-dev/sql/db.sql @@ -2276,15 +2276,17 @@ CREATE TABLE `PREFIX_accounting_product_zone_shop` ( ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; CREATE TABLE `PREFIX_order_carrier` ( + `id_order_carrier` int(11) NOT NULL AUTO_INCREMENT, `id_order` int(11) unsigned NOT NULL, `id_carrier` int(11) unsigned NOT NULL, `id_order_invoice` int(11) unsigned DEFAULT NULL, `weight` float DEFAULT NULL, `shipping_cost_tax_excl` decimal(20,6) DEFAULT NULL, `shipping_cost_tax_incl` decimal(20,6) DEFAULT NULL, - `tracking_number` int(11) unsigned DEFAULT NULL, + `tracking_number` varchar(64) DEFAULT NULL, `date_add` datetime NOT NULL, - KEY `id_order` (`id_order`,`id_carrier`), - KEY `id_order_2` (`id_order`), + PRIMARY KEY (`id_order_carrier`), + KEY `id_order` (`id_order`), + KEY `id_carrier` (`id_carrier`), KEY `id_order_invoice` (`id_order_invoice`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; diff --git a/install-dev/sql/db_settings_extends.sql b/install-dev/sql/db_settings_extends.sql index efccc8f4f..b4d5bebdd 100644 --- a/install-dev/sql/db_settings_extends.sql +++ b/install-dev/sql/db_settings_extends.sql @@ -1546,8 +1546,8 @@ INSERT INTO `ps_stock_available` (`id_stock_available`, `id_product`, `id_produc (33, 7, 22, 1, 0, 40, 0, 0), (34, 7, 23, 1, 0, 40, 0, 0); -INSERT INTO `PREFIX_order_carrier` (`id_order`, `id_carrier`, `date_add`) VALUES -(1, 2, NOW()); +INSERT INTO `PREFIX_order_carrier` (`id_order_carrier`, `id_order`, `id_carrier`, `date_add`) VALUES +(1, 1, 2, NOW()); /* new theme, need to be checked */ diff --git a/install-dev/sql/upgrade/1.5.0.1.sql b/install-dev/sql/upgrade/1.5.0.1.sql index ad5aeb32c..0adc75609 100644 --- a/install-dev/sql/upgrade/1.5.0.1.sql +++ b/install-dev/sql/upgrade/1.5.0.1.sql @@ -610,16 +610,18 @@ UPDATE `PREFIX_tab` SET `class_name` = 'AdminCmsCategories' WHERE `class_name` = UPDATE `PREFIX_tab` SET `class_name` = 'AdminPdf' WHERE `class_name` = 'AdminPDF'; CREATE TABLE `PREFIX_order_carrier` ( + `id_order_carrier` int(11) NOT NULL AUTO_INCREMENT, `id_order` int(11) unsigned NOT NULL, `id_carrier` int(11) unsigned NOT NULL, `id_order_invoice` int(11) unsigned DEFAULT NULL, `weight` float DEFAULT NULL, `shipping_cost_tax_excl` decimal(20,6) DEFAULT NULL, `shipping_cost_tax_incl` decimal(20,6) DEFAULT NULL, - `tracking_number` int(11) unsigned DEFAULT NULL, + `tracking_number` varchar(64) DEFAULT NULL, `date_add` datetime NOT NULL, - KEY `id_order` (`id_order`,`id_carrier`), - KEY `id_order_2` (`id_order`), + PRIMARY KEY (`id_order_carrier`), + KEY `id_order` (`id_order`), + KEY `id_carrier` (`id_carrier`), KEY `id_order_invoice` (`id_order_invoice`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;