From 5615dca5c125327cdd72424a093d207f4e6012fa Mon Sep 17 00:00:00 2001 From: aFolletete Date: Wed, 1 Feb 2012 14:34:17 +0000 Subject: [PATCH] [-] Classes : fixed bug #PSTEST-550 - Add current_state attribute on Order class [~] Deprecated : OrderHistory::getLastOrderState() git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@12898 b9a71923-0436-4b27-9f14-aed3839534dd --- classes/order/Order.php | 56 +++++++++++--------- classes/order/OrderHistory.php | 11 ++-- controllers/admin/AdminOrdersController.php | 8 +-- install-dev/data/db_structure.sql | 1 + install-dev/fixtures/apple/data/customer.xml | 2 +- install-dev/fixtures/apple/data/orders.xml | 3 +- install-dev/upgrade/sql/1.5.0.4.sql | 2 + 7 files changed, 48 insertions(+), 35 deletions(-) diff --git a/classes/order/Order.php b/classes/order/Order.php index e1690619c..efa2a9543 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -52,6 +52,9 @@ class OrderCore extends ObjectModel /** @var integer Carrier id */ public $id_carrier; + /** @var integer Order State id */ + public $current_state; + /** @var string Secure key */ public $secure_key; @@ -163,6 +166,7 @@ class OrderCore extends ObjectModel 'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'id_carrier' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), + 'current_state' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5'), 'payment' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true), 'module' => array('type' => self::TYPE_STRING), @@ -210,13 +214,13 @@ class OrderCore extends ObjectModel 'id_lang' => array('xlink_resource'=> 'languages'), 'id_customer' => array('xlink_resource'=> 'customers'), 'id_carrier' => array('xlink_resource'=> 'carriers'), + 'current_state' => array('xlink_resource'=> 'order_states'), 'module' => array('required' => true), 'invoice_number' => array(), 'invoice_date' => array(), 'delivery_number' => array(), 'delivery_date' => array(), 'valid' => array(), - 'current_state' => array('getter' => 'getCurrentState', 'setter' => 'setCurrentState', 'xlink_resource'=> 'order_states'), 'date_add' => array(), 'date_upd' => array(), ), @@ -696,14 +700,11 @@ class OrderCore extends ObjectModel /** * Get current order state (eg. Awaiting payment, Delivered...) * - * @return array Order state details + * @return int Order state id */ public function getCurrentState() { - $orderHistory = OrderHistory::getLastOrderState($this->id); - if (!isset($orderHistory) || !$orderHistory) - return false; - return $orderHistory->id; + return $this->current_state; } /** @@ -714,13 +715,10 @@ class OrderCore extends ObjectModel public function getCurrentStateFull($id_lang) { return Db::getInstance()->getRow(' - SELECT oh.`id_order_state`, osl.`name`, os.`logable`, os.`shipped` - FROM `'._DB_PREFIX_.'order_history` oh - LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (osl.`id_order_state` = oh.`id_order_state`) - LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = oh.`id_order_state`) - WHERE osl.`id_lang` = '.(int)($id_lang).' AND oh.`id_order` = '.(int)($this->id).' - ORDER BY `date_add` DESC, `id_order_history` DESC - '); + SELECT os.`id_order_state`, osl.`name`, os.`logable`, os.`shipped` + FROM `'._DB_PREFIX_.'order_state` os + LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (osl.`id_order_state` = os.`id_order_state`) + WHERE osl.`id_lang` = '.(int)$id_lang.' AND os.`id_order_state` = '.(int)$this->current_state); } public function hasBeenDelivered() @@ -804,12 +802,10 @@ class OrderCore extends ObjectModel $context = Context::getContext(); $sql = 'SELECT *, ( - SELECT `name` - FROM `'._DB_PREFIX_.'order_history` oh - LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (osl.`id_order_state` = oh.`id_order_state`) - WHERE oh.`id_order` = o.`id_order` + SELECT osl.`name` + FROM `'._DB_PREFIX_.'order_state_lang` osl + WHERE osl.`id_order_state` = o.`current_state` AND osl.`id_lang` = '.(int)$context->language->id.' - ORDER BY oh.`date_add` DESC LIMIT 1 ) AS `state_name` FROM `'._DB_PREFIX_.'orders` o @@ -862,13 +858,7 @@ class OrderCore extends ObjectModel Tools::displayAsDeprecated(); $sql = 'SELECT id_order FROM '._DB_PREFIX_.'orders o - WHERE '.(int)$id_order_state.' = ( - SELECT id_order_state - FROM '._DB_PREFIX_.'order_history oh - WHERE oh.id_order = o.id_order - ORDER BY date_add DESC, id_order_history DESC - LIMIT 1 - ) + WHERE o.`current_state` = '.(int)$id_order_state.' '.Context::getContext()->shop->addSqlRestriction(false, 'o').' ORDER BY invoice_date ASC'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); @@ -1124,7 +1114,7 @@ class OrderCore extends ObjectModel public static function printPDFIcons($id_order, $tr) { $order = new Order($id_order); - $orderState = OrderHistory::getLastOrderState($id_order); + $orderState = $order->getCurrentOrderState(); if (!Validate::isLoadedObject($orderState) || !Validate::isLoadedObject($order)) die(Tools::displayError('Invalid objects')); echo ''; @@ -1233,6 +1223,9 @@ class OrderCore extends ObjectModel $this->delivery_date = $res['delivery_date']; $this->delivery_number = $res['delivery_number']; $history->addWithemail(); + + $this->current_state = $id_order_state; + $this->update(); } public function addWs($autodate = true, $nullValues = false) @@ -1702,5 +1695,16 @@ class OrderCore extends ObjectModel return $warehouse_list; } + + /** + * @since 1.5.0.4 + * @return OrderState or null if Order haven't a state + */ + public function getCurrentOrderState() + { + if ($this->current_state) + return new OrderState($this->current_state); + return null; + } } diff --git a/classes/order/OrderHistory.php b/classes/order/OrderHistory.php index cf793e987..bd0abbc5a 100644 --- a/classes/order/OrderHistory.php +++ b/classes/order/OrderHistory.php @@ -81,7 +81,7 @@ class OrderHistoryCore extends ObjectModel // sets order and states $order = new Order($id_order); $new_os = new OrderState((int)$new_order_state, $order->id_lang); - $old_os = OrderHistory::getLastOrderState((int)$id_order); + $old_os = $order->getCurrentOrderState(); $is_validated = $this->isValidated(); // executes hook @@ -209,6 +209,8 @@ class OrderHistoryCore extends ObjectModel // the order is valid if and only if the invoice is available and the order is not cancelled $order->valid = $new_os->logable; + // Update id_order_state attribute in Order + $order->current_state = $new_os->id; $order->update(); if ($new_os->invoice && !$order->invoice_number) @@ -251,9 +253,12 @@ class OrderHistoryCore extends ObjectModel * Returns the last order state * @param int $id_order * @return OrderState|bool + * @deprecated 1.5.0.4 + * @see Order->current_state */ public static function getLastOrderState($id_order) { + Tools::displayAsDeprecated(); $id_order_state = Db::getInstance()->getValue(' SELECT `id_order_state` FROM `'._DB_PREFIX_.'order_history` @@ -278,7 +283,8 @@ class OrderHistoryCore extends ObjectModel { if (!$context) $context = Context::getContext(); - $last_order_state = $this->getLastOrderState($this->id_order); + $order = new Order($this->id_order); + $last_order_state = $order->getCurrentOrderState(); if (!parent::add($autodate)) return false; @@ -298,7 +304,6 @@ class OrderHistoryCore extends ObjectModel $data = array('{lastname}' => $result['lastname'], '{firstname}' => $result['firstname'], '{id_order}' => (int)$this->id_order); if ($template_vars) $data = array_merge($data, $template_vars); - $order = new Order((int)$this->id_order); $data['{total_paid}'] = Tools::displayPrice((float)$order->total_paid, new Currency((int)$order->id_currency), false); $data['{order_name}'] = sprintf('#%06d', (int)$order->id); diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index f15b0ca35..3e5f06354 100755 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -158,7 +158,7 @@ class AdminOrdersControllerCore extends AdminController public function printPDFIcons($id_order, $tr) { $order = new Order($id_order); - $order_state = OrderHistory::getLastOrderState($id_order); + $order_state = $order->getCurrentOrderState(); if (!Validate::isLoadedObject($order_state) || !Validate::isLoadedObject($order)) die(Tools::displayError('Invalid objects')); @@ -239,7 +239,7 @@ class AdminOrdersControllerCore extends AdminController $this->errors[] = Tools::displayError('Invalid new order status'); else { - $current_order_state = OrderHistory::getLastOrderState($order->id); + $current_order_state = $order->getCurrentOrderState(); if ($current_order_state->id != $order_state->id) { // Create new OrderHistory @@ -1092,7 +1092,7 @@ class AdminOrdersControllerCore extends AdminController 'states' => OrderState::getOrderStates($this->context->language->id), 'warehouse_list' => $warehouse_list, 'sources' => ConnectionsSource::getOrderSources($order->id), - 'currentState' => OrderHistory::getLastOrderState($order->id), + 'currentState' => $order->getCurrentOrderState(), 'currency' => new Currency($order->id_currency), 'currencies' => Currency::getCurrencies(), 'previousOrder' => $order->getPreviousOrderId(), @@ -1398,7 +1398,7 @@ class AdminOrdersControllerCore extends AdminController // Create Order detail information $order_detail = new OrderDetail(); - $order_detail->createList($order, $cart, OrderHistory::getLastOrderState($order->id), $cart->getProducts(), (isset($order_invoice) ? $order_invoice->id : 0), $use_taxes, (int)Tools::getValue('add_product_warehouse')); + $order_detail->createList($order, $cart, $order->getCurrentOrderState(), $cart->getProducts(), (isset($order_invoice) ? $order_invoice->id : 0), $use_taxes, (int)Tools::getValue('add_product_warehouse')); // update totals amount of order $order->total_products += (float)$cart->getOrderTotal(false, Cart::ONLY_PRODUCTS); diff --git a/install-dev/data/db_structure.sql b/install-dev/data/db_structure.sql index 68ead6883..bff76c332 100644 --- a/install-dev/data/db_structure.sql +++ b/install-dev/data/db_structure.sql @@ -1020,6 +1020,7 @@ CREATE TABLE `PREFIX_orders` ( `id_currency` int(10) unsigned NOT NULL, `id_address_delivery` int(10) unsigned NOT NULL, `id_address_invoice` int(10) unsigned NOT NULL, + `current_state` int(10) unsigned NOT NULL, `secure_key` varchar(32) NOT NULL default '-1', `payment` varchar(255) NOT NULL, `conversion_rate` decimal(13,6) NOT NULL default 1, diff --git a/install-dev/fixtures/apple/data/customer.xml b/install-dev/fixtures/apple/data/customer.xml index 55293ca77..e99c5f93f 100644 --- a/install-dev/fixtures/apple/data/customer.xml +++ b/install-dev/fixtures/apple/data/customer.xml @@ -19,7 +19,7 @@ - + pub@prestashop.com diff --git a/install-dev/fixtures/apple/data/orders.xml b/install-dev/fixtures/apple/data/orders.xml index 7dfc66a9e..377e796b7 100644 --- a/install-dev/fixtures/apple/data/orders.xml +++ b/install-dev/fixtures/apple/data/orders.xml @@ -10,6 +10,7 @@ + @@ -40,7 +41,7 @@ - + Chèque cheque diff --git a/install-dev/upgrade/sql/1.5.0.4.sql b/install-dev/upgrade/sql/1.5.0.4.sql index 095a7d585..d7eccc813 100644 --- a/install-dev/upgrade/sql/1.5.0.4.sql +++ b/install-dev/upgrade/sql/1.5.0.4.sql @@ -46,3 +46,5 @@ ALTER TABLE `PREFIX_cart_rule_product_rule` CHANGE `id_cart_rule` `id_product_ru ALTER TABLE `PREFIX_cart_rule_product_rule` CHANGE `type` `type` ENUM('products', 'categories', 'attributes', 'manufacturers', 'suppliers') NOT NULL; ALTER TABLE `PREFIX_cart_rule` ADD `partial_use` tinyint(1) unsigned NOT NULL default 0 AFTER `priority`; + +ALTER TABLE `PREFIX_orders` ADD `current_state` int(10) unsigned NOT NULL default 0 AFTER `id_address_invoice`;