From 9d5f8b3fdade8cc29b7218f8a10758a063e0ebf2 Mon Sep 17 00:00:00 2001 From: vAugagneur Date: Tue, 15 May 2012 09:39:47 +0000 Subject: [PATCH] [-] BO : fixed bug #PSCFV-521 - range fix --- classes/range/Range.php | 9 ++++---- .../admin/AdminRangePriceController.php | 22 +++++++++++-------- .../admin/AdminRangeWeightController.php | 20 +++++++++++------ 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/classes/range/Range.php b/classes/range/Range.php index 81bb28b9a..80696101b 100644 --- a/classes/range/Range.php +++ b/classes/range/Range.php @@ -65,15 +65,16 @@ class RangeCore extends ObjectModel AND `delimiter1` = '.(float)$delimiter1.' AND `delimiter2`='.(float)$delimiter2); } - public static function isOverlapping($id_carrier, $delimiter1, $delimiter2) + public static function isOverlapping($id_carrier, $delimiter1, $delimiter2, $id_rang = null) { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT count(*) FROM `'._DB_PREFIX_.static::$range_table.'` WHERE `id_carrier` = '.(int)$id_carrier.' - AND ((`delimiter1` > '.(float)$delimiter1.' AND `delimiter1` <= '.(float)$delimiter2.') - OR (`delimiter2` > '.(float)$delimiter1.' AND `delimiter2` <= '.(float)$delimiter2.') + AND ((`delimiter1` >= '.(float)$delimiter1.' AND `delimiter1` < '.(float)$delimiter2.') + OR (`delimiter2` > '.(float)$delimiter1.' AND `delimiter2` < '.(float)$delimiter2.') OR ('.(float)$delimiter1.' > `delimiter1` AND '.(float)$delimiter1.' < `delimiter2`) OR ('.(float)$delimiter2.' < `delimiter1` AND '.(float)$delimiter2.' > `delimiter2`) - )'); + ) + '.(!is_null($id_rang) ? ' AND `'.pSQL(static::$range_identifier).'` != '.(int)$id_rang : '')); } } \ No newline at end of file diff --git a/controllers/admin/AdminRangePriceController.php b/controllers/admin/AdminRangePriceController.php index ba46030e7..a57add52d 100644 --- a/controllers/admin/AdminRangePriceController.php +++ b/controllers/admin/AdminRangePriceController.php @@ -119,17 +119,21 @@ class AdminRangePriceControllerCore extends AdminController public function postProcess() { - $id = (int)Tools::getValue('id_'.$this->table); - - if (Tools::getValue('submitAdd'.$this->table) && Tools::getValue('delimiter1') >= Tools::getValue('delimiter2')) - $this->errors[] = Tools::displayError('Invalid range'); - else if (!$id && RangePrice::rangeExist((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'))) - $this->errors[] = Tools::displayError('Range already exists'); - else if (!$id && RangePrice::isOverlapping((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'))) - $this->errors[] = Tools::displayError('Ranges are overlapping'); + $id = (int)Tools::getValue('id_'.$this->table); + if (Tools::getValue('submitAdd'.$this->table)) + { + if (Tools::getValue('delimiter1') >= Tools::getValue('delimiter2')) + $this->errors[] = Tools::displayError('Invalid range'); + else if (!$id && RangePrice::rangeExist((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'))) + $this->errors[] = Tools::displayError('Range already exists'); + else if (RangePrice::isOverlapping((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'), ($id ? (int)$id : null))) + $this->errors[] = Tools::displayError('Ranges are overlapping'); + else if (!count($this->errors)) + parent::postProcess(); + } else parent::postProcess(); - } + } } diff --git a/controllers/admin/AdminRangeWeightController.php b/controllers/admin/AdminRangeWeightController.php index 6243b8a22..18c14378c 100644 --- a/controllers/admin/AdminRangeWeightController.php +++ b/controllers/admin/AdminRangeWeightController.php @@ -115,13 +115,19 @@ class AdminRangeWeightControllerCore extends AdminController public function postProcess() { - $id = (int)Tools::getValue('id_'.$this->table); - if ($this->action == 'save' && Tools::getValue('delimiter1') >= Tools::getValue('delimiter2')) - $this->errors[] = Tools::displayError('Invalid range'); - else if (!$id && RangeWeight::rangeExist((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'))) - $this->errors[] = Tools::displayError('Range already exists'); - else if (!$id && RangeWeight::isOverlapping((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'))) - $this->errors[] = Tools::displayError('Ranges are overlapping'); + $id = (int)Tools::getValue('id_'.$this->table); + + if (Tools::getValue('submitAdd'.$this->table)) + { + if (Tools::getValue('delimiter1') >= Tools::getValue('delimiter2')) + $this->errors[] = Tools::displayError('Invalid range'); + else if (!$id && RangeWeight::rangeExist((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'))) + $this->errors[] = Tools::displayError('Range already exists'); + else if (RangeWeight::isOverlapping((int)Tools::getValue('id_carrier'), (float)Tools::getValue('delimiter1'), (float)Tools::getValue('delimiter2'), ($id ? (int)$id : null))) + $this->errors[] = Tools::displayError('Ranges are overlapping'); + else if (!count($this->errors)) + parent::postProcess(); + } else parent::postProcess(); }