From 8fbd0cc43974d00a647b57ef11bf6a24ae3f1abf Mon Sep 17 00:00:00 2001 From: rGaillard Date: Mon, 16 Jul 2012 09:26:19 +0000 Subject: [PATCH] [-] Core: Fix PSCFV-2984 specific price rules are deleted on all products when you edit one git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@16434 b9a71923-0436-4b27-9f14-aed3839534dd --- classes/SpecificPriceRule.php | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/classes/SpecificPriceRule.php b/classes/SpecificPriceRule.php index 283977665..45c6ebe54 100755 --- a/classes/SpecificPriceRule.php +++ b/classes/SpecificPriceRule.php @@ -119,15 +119,18 @@ class SpecificPriceRuleCore extends ObjectModel public function apply($products = false) { - $this->resetApplication(); + $this->resetApplication($products); $products = $this->getAffectedProducts($products); foreach ($products as $product) SpecificPriceRule::applyRuleToProduct((int)$this->id, (int)$product['id_product'], (int)$product['id_product_attribute']); } - public function resetApplication() + public function resetApplication($products = false) { - return Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'specific_price WHERE id_specific_price_rule='.(int)$this->id); + $where = ''; + if ($products && count($products)) + $where .= ' AND id_product IN ('.implode(', ', array_map('intval', $products)).')'; + return Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'specific_price WHERE id_specific_price_rule='.(int)$this->id.$where); } public static function applyAllRules($products = false) @@ -178,6 +181,7 @@ class SpecificPriceRuleCore extends ObjectModel $attributes = false; $categories = false; $features = false; + $suppliers = false; $where = false; if ($conditions_group) @@ -195,7 +199,7 @@ class SpecificPriceRuleCore extends ObjectModel 'values' => array(), ), 'supplier' => array( - 'name' => 'p.id_supplier', + 'name' => 'pss.id_supplier', 'values' => array() ), 'feature' => array( @@ -216,6 +220,8 @@ class SpecificPriceRuleCore extends ObjectModel $features = true; elseif ($condition['type'] == 'attribute') $attributes = true; + elseif ($condition['type'] == 'supplier') + $suppliers = true; $fields[$condition['type']]['values'][] = $condition['value']; } @@ -249,9 +255,13 @@ class SpecificPriceRuleCore extends ObjectModel $query->select('NULL as id_product_attribute'); if ($features) - $query->leftJoin('feature_product', 'fp', 'p.id_product = fp.id_product'); + $query->leftJoin('feature_product', 'fp', 'p.id_product = fp.id_product'); if ($categories) $query->leftJoin('category_product', 'cp', 'p.id_product = cp.id_product'); + + if ($suppliers) + $query->leftJoin('product_supplier', 'pss', 'p.id_product = pss.id_product'); + if ($where) $query->where($where);