From 68f5c88b5f7b86cfaa2700d1342fb6deddec188e Mon Sep 17 00:00:00 2001 From: bMancone Date: Mon, 20 Feb 2012 15:37:04 +0000 Subject: [PATCH] // Improvement #PSFV-550 --- classes/Combination.php | 59 +++++++++++++------- controllers/admin/AdminImportController.php | 61 ++++++++++++++------- 2 files changed, 81 insertions(+), 39 deletions(-) diff --git a/classes/Combination.php b/classes/Combination.php index 9524ec2e2..e1c85df96 100644 --- a/classes/Combination.php +++ b/classes/Combination.php @@ -103,23 +103,25 @@ class CombinationCore extends ObjectModel return false; return true; } - + public function setAttributes($ids_attribute) { if ($this->deleteAssociations()) { - $sqlValues = array(); + $sql_values = array(); foreach ($ids_attribute as $value) - $sqlValues[] = '('.(int)$value.', '.(int)$this->id.')'; + $sql_values[] = '('.(int)$value.', '.(int)$this->id.')'; + $result = Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'product_attribute_combination` (`id_attribute`, `id_product_attribute`) - VALUES '.implode(',', $sqlValues) + VALUES '.implode(',', $sql_values) ); + return $result; } return false; } - + public function setWsProductOptionValues($values) { $ids_attributes = array(); @@ -130,33 +132,38 @@ class CombinationCore extends ObjectModel public function getWsProductOptionValues() { - $result = Db::getInstance()->executeS('SELECT id_attribute AS id from `'._DB_PREFIX_.'product_attribute_combination` WHERE id_product_attribute = '.(int)$this->id); + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' + SELECT id_attribute AS id + FROM `'._DB_PREFIX_.'product_attribute_combination` + WHERE id_product_attribute = '.(int)$this->id); + return $result; } public function getWsImages() { - return Db::getInstance()->executeS(' - SELECT `id_image` as id - FROM `'._DB_PREFIX_.'product_attribute_image` - WHERE `id_product_attribute` = '.(int)($this->id).' + return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' + SELECT `id_image` as id + FROM `'._DB_PREFIX_.'product_attribute_image` + WHERE `id_product_attribute` = '.(int)$this->id.' '); } - + public function setImages($ids_image) { if (Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'product_attribute_image` - WHERE `id_product_attribute` = '.(int)($this->id)) === false) + WHERE `id_product_attribute` = '.(int)$this->id) === false) return false; - $sqlValues = array(); + + $sql_values = array(); foreach ($ids_image as $value) - $sqlValues[] = '('.(int)$this->id.', '.(int)$value.')'; + $sql_values[] = '('.(int)$this->id.', '.(int)$value.')'; Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'product_attribute_image` (`id_product_attribute`, `id_image`) - VALUES '.implode(',', $sqlValues) + VALUES '.implode(',', $sql_values) ); return true; } @@ -165,13 +172,14 @@ class CombinationCore extends ObjectModel { return $this->setImages($values); } - + public function getAttributesName($id_lang) { - return Db::getInstance()->executeS('SELECT al.* - FROM '._DB_PREFIX_.'product_attribute_combination pac - JOIN '._DB_PREFIX_.'attribute_lang al ON (pac.id_attribute = al.id_attribute AND al.id_lang='.(int)$id_lang.') - WHERE pac.id_product_attribute='.(int)$this->id); + return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' + SELECT al.* + FROM '._DB_PREFIX_.'product_attribute_combination pac + JOIN '._DB_PREFIX_.'attribute_lang al ON (pac.id_attribute = al.id_attribute AND al.id_lang='.(int)$id_lang.') + WHERE pac.id_product_attribute='.(int)$this->id); } /** @@ -195,4 +203,15 @@ class CombinationCore extends ObjectModel { return parent::isCurrentlyUsed('product_attribute'); } + + public static function getIdByReference($id_product, $reference) + { + $query = new DbQuery(); + $query->select('pa.id_product_attribute'); + $query->from('product_attribute', 'pa'); + $query->where('pa.reference LIKE \'%'.pSQL($reference).'%\''); + $query->where('pa.id_product = '.(int)$id_product); + + return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query); + } } diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index c7fc38fe7..3bd5b3ad1 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -1320,19 +1320,43 @@ class AdminImportControllerCore extends AdminController ); } - $id_product_attribute = $product->addAttribute( - (float)$info['price'], - (float)$info['weight'], - 0, - (float)$info['ecotax'], - $id_image, - strval($info['reference']), - strval($info['ean13']), - (int)$info['default_on'], - 0, - strval($info['upc']), - (int)$info['quantity'] - ); + $id_product_attribute = Combination::getIdByReference($product->id, strval($info['reference'])); + + if ($id_product_attribute > 0) + { + $product->updateAttribute( + $id_product_attribute, + (float)$info['wholesale_price'], + (float)$info['price'], + (float)$info['weight'], + 0, + (float)$info['ecotax'], + $id_image, + strval($info['reference']), + strval($info['ean13']), + (int)$info['default_on'], + 0, + strval($info['upc']), + (int)$info['quantity'], + 0 + ); + } + else + { + $id_product_attribute = $product->addAttribute( + (float)$info['price'], + (float)$info['weight'], + 0, + (float)$info['ecotax'], + $id_image, + strval($info['reference']), + strval($info['ean13']), + (int)$info['default_on'], + 0, + strval($info['upc']), + (int)$info['quantity'] + ); + } $id_attribute_group = 0; $group = ''; @@ -1395,9 +1419,9 @@ class AdminImportControllerCore extends AdminController if (isset($groups_attributes[$key])) { + $group = $groups_attributes[$key]['group']; if (!isset($attributes[$group.'_'.$attribute]) && count($groups_attributes[$key]) == 2) { - $group = $groups_attributes[$key]['group']; $id_attribute_group = $groups_attributes[$key]['id']; $obj = new Attribute(); // sets the proper id (corresponding to the right key) @@ -1413,13 +1437,12 @@ class AdminImportControllerCore extends AdminController else $this->errors[] = ($field_error !== true ? $field_error : '').($lang_field_error !== true ? $lang_field_error : ''); + Db::getInstance()->execute(' + INSERT INTO '._DB_PREFIX_.'product_attribute_combination (id_attribute, id_product_attribute) + VALUES ('.(int)$attributes[$group.'_'.$attribute].','.(int)$id_product_attribute.') + '); } - Db::getInstance()->execute(' - INSERT INTO '._DB_PREFIX_.'product_attribute_combination (id_attribute, id_product_attribute) - VALUES ('.(int)$attributes[$group.'_'.$attribute].','.(int)$id_product_attribute.') - '); - // after insertion, we clean attribute position and group attribute position $obj = new Attribute(); $obj->cleanPositions((int)$id_attribute_group, false);