From ff2bd93be52c20c4d702debdd637cfa89b51f5b7 Mon Sep 17 00:00:00 2001 From: vChabot Date: Thu, 7 Jun 2012 14:20:53 +0000 Subject: [PATCH] [-] BO : BugFix : #PSCFV-2630 : Combination and multishop association issue with shared stock through group shop --- .../controllers/products/combinations.tpl | 9 +++++- classes/Product.php | 30 +++++++++++++++++++ .../AdminAttributeGeneratorController.php | 4 +-- controllers/admin/AdminProductsController.php | 4 ++- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/admin-dev/themes/default/template/controllers/products/combinations.tpl b/admin-dev/themes/default/template/controllers/products/combinations.tpl index d831774e7..b4b58ff63 100644 --- a/admin-dev/themes/default/template/controllers/products/combinations.tpl +++ b/admin-dev/themes/default/template/controllers/products/combinations.tpl @@ -50,7 +50,14 @@
{l s='or use the'}  combinations_generator{l s='Product combinations generator'} {l s='in order to create automatically a set of combinations'} - + {if $combination_exists} +
+ +
+ {/if} {if isset($display_multishop_checkboxes) && $display_multishop_checkboxes}
{include file="controllers/products/multishop/check_fields.tpl" product_tab="Combinations"} diff --git a/classes/Product.php b/classes/Product.php index 0b2d4b6a2..0b18aa795 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -1087,6 +1087,16 @@ class ProductCore extends ObjectModel { $obj->default_on = $default_value; $default_value = 0; + // if we add a combination for this shop and this product does not use the combination feature in other shop, + // we clone the default combination in every shop linked to this product + if (!$this->hasAttributesInOtherShops()) + { + $id_shop_list_array = Product::getShopsByProduct($this->id); + $id_shop_list = array(); + foreach ($id_shop_list_array as $array_shop) + $id_shop_list[] = $array_shop['id_shop']; + $obj->id_shop_list = $id_shop_list; + } } $obj->add(); $return[] = $obj->id; @@ -1280,6 +1290,15 @@ class ProductCore extends ObjectModel $combination->default_on = (int)$default; $combination->minimal_quantity = (int)$minimal_quantity; + // if we add a combination for this shop and this product does not use the combination feature in other shop, + // we clone the default combination in every shop linked to this product + if ($default && !$this->hasAttributesInOtherShops()) + { + $id_shop_list_array = Product::getShopsByProduct($this->id); + foreach ($id_shop_list_array as $array_shop) + $id_shop_list[] = $array_shop['id_shop']; + } + if (count($id_shop_list)) $combination->id_shop_list = $id_shop_list; @@ -4867,5 +4886,16 @@ class ProductCore extends ObjectModel return Product::PTYPE_SIMPLE; } + + public function hasAttributesInOtherShops() + { + return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' + SELECT COUNT(*) + FROM `'._DB_PREFIX_.'product_attribute` pa + LEFT JOIN `'._DB_PREFIX_.'product_attribute_shop` pas + ON (pa.`id_product_attribute` = pas.`id_product_attribute`) + WHERE pa.`id_product` = '.(int)$this->id + ); + } } diff --git a/controllers/admin/AdminAttributeGeneratorController.php b/controllers/admin/AdminAttributeGeneratorController.php index cd5a1eb38..667a310f7 100644 --- a/controllers/admin/AdminAttributeGeneratorController.php +++ b/controllers/admin/AdminAttributeGeneratorController.php @@ -78,7 +78,7 @@ class AdminAttributeGeneratorControllerCore extends AdminController public function initProcess() { - if (isset($_POST['generate'])) + if (Tools::isSubmit('generate')) { if ($this->tabAccess['edit'] === '1') $this->action = 'generate'; @@ -101,7 +101,7 @@ class AdminAttributeGeneratorControllerCore extends AdminController $this->errors[] = Tools::displayError('Please choose at least 1 attribute.'); else { - $tab = array_values($_POST['options']); + $tab = array_values(Tools::getValue('options')); if (count($tab) && Validate::isLoadedObject($this->product)) { AdminAttributeGeneratorController::setAttributesImpacts($this->product->id, $tab); diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index b589a1a41..8cc87dd2f 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -641,6 +641,7 @@ class AdminProductsControllerCore extends AdminController Tools::getValue('attribute_weight') * Tools::getValue('attribute_weight_impact'), Tools::getValue('attribute_unity') * Tools::getValue('attribute_unit_impact'), Tools::getValue('attribute_ecotax'), + 0, Tools::getValue('id_image_attr'), Tools::getValue('attribute_reference'), null, @@ -3380,7 +3381,8 @@ class AdminProductsControllerCore extends AdminController 'list' => $this->renderListAttributes($product, $currency), 'product' => $product, 'id_category' => $product->getDefaultCategory(), - 'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator') + 'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator'), + 'combination_exists' => (Shop::isFeatureActive() && (Shop::getContextShopGroup()->share_stock) && count(AttributeGroup::getAttributesGroups($this->context->language->id)) > 0) )); } }