[-] BO: Forbid to add a pack into a pack

This commit is contained in:
Rémi Gaillard committed 2013-02-06 20:10:59 +01:00
1 parent 5e98812e19
commit 76c80680a2
4 files changed
+12 -9

No files matched your search

+4 -1
View File
@@ -51,13 +51,16 @@ else
// Excluding downloadable products from packs because download from pack is not supported // Excluding downloadable products from packs because download from pack is not supported
$excludeVirtuals = (bool)Tools::getValue('excludeVirtuals', false); $excludeVirtuals = (bool)Tools::getValue('excludeVirtuals', false);
$exclude_packs = (bool)Tools::getValue('exclude_packs', false);
$sql = 'SELECT p.`id_product`, `reference`, pl.name $sql = 'SELECT p.`id_product`, `reference`, pl.name
FROM `'._DB_PREFIX_.'product` p FROM `'._DB_PREFIX_.'product` p
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.id_product = p.id_product AND pl.id_lang = '.(int)Context::getContext()->language->id.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.id_product = p.id_product AND pl.id_lang = '.(int)Context::getContext()->language->id.Shop::addSqlRestrictionOnLang('pl').')
WHERE (pl.name LIKE \'%'.pSQL($query).'%\' OR p.reference LIKE \'%'.pSQL($query).'%\')'. WHERE (pl.name LIKE \'%'.pSQL($query).'%\' OR p.reference LIKE \'%'.pSQL($query).'%\')'.
(!empty($excludeIds) ? ' AND p.id_product NOT IN ('.$excludeIds.') ' : ' '). (!empty($excludeIds) ? ' AND p.id_product NOT IN ('.$excludeIds.') ' : ' ').
($excludeVirtuals ? 'AND p.id_product NOT IN (SELECT pd.id_product FROM `'._DB_PREFIX_.'product_download` pd WHERE (pd.id_product = p.id_product))' : ''); ($excludeVirtuals ? 'AND p.id_product NOT IN (SELECT pd.id_product FROM `'._DB_PREFIX_.'product_download` pd WHERE (pd.id_product = p.id_product))' : '').
($exclude_packs ? 'AND (p.cache_is_pack IS NULL OR p.cache_is_pack = 0)' : '');
$items = Db::getInstance()->executeS($sql); $items = Db::getInstance()->executeS($sql);
if ($items) if ($items)
@@ -97,9 +97,9 @@
<label class="text">{$bullet_common_field} {l s='Type:'}</label> <label class="text">{$bullet_common_field} {l s='Type:'}</label>
<input type="radio" name="type_product" id="simple_product" value="{Product::PTYPE_SIMPLE}" {if $product_type == Product::PTYPE_SIMPLE}checked="checked"{/if} /> <input type="radio" name="type_product" id="simple_product" value="{Product::PTYPE_SIMPLE}" {if $product_type == Product::PTYPE_SIMPLE}checked="checked"{/if} />
<label class="radioCheck" for="simple_product">{l s='Product'}</label> <label class="radioCheck" for="simple_product">{l s='Product'}</label>
<input type="radio" name="type_product" id="pack_product" value="{Product::PTYPE_PACK}" {if $product_type == Product::PTYPE_PACK}checked="checked"{/if} /> <input type="radio" name="type_product" {if $is_in_pack}disabled="disabled"{/if} id="pack_product" value="{Product::PTYPE_PACK}" {if $product_type == Product::PTYPE_PACK}checked="checked"{/if} />
<label class="radioCheck" for="pack_product">{l s='Pack'}</label> <label class="radioCheck" for="pack_product">{l s='Pack'}</label>
<input type="radio" name="type_product" id="virtual_product" value="{Product::PTYPE_VIRTUAL}" {if $product_type == Product::PTYPE_VIRTUAL}checked="checked"{/if} /> <input type="radio" name="type_product" id="virtual_product" {if $is_in_pack}disabled="disabled"{/if} value="{Product::PTYPE_VIRTUAL}" {if $product_type == Product::PTYPE_VIRTUAL}checked="checked"{/if} />
<label class="radioCheck" for="virtual_product">{l s='Virtual Product (services, booking or downloadable products)'}</label> <label class="radioCheck" for="virtual_product">{l s='Virtual Product (services, booking or downloadable products)'}</label>
</div> </div>
@@ -3379,6 +3379,7 @@ class AdminProductsControllerCore extends AdminController
$product->tags = Tag::getProductTags($product->id); $product->tags = Tag::getProductTags($product->id);
$data->assign('product_type', (int)Tools::getValue('type_product', $product->getType())); $data->assign('product_type', (int)Tools::getValue('type_product', $product->getType()));
$data->assign('is_in_pack', (int)Pack::isPacked($product->id));
$check_product_association_ajax = false; $check_product_association_ajax = false;
if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_ALL) if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_ALL)
@@ -4115,10 +4116,6 @@ class AdminProductsControllerCore extends AdminController
$this->tpl_form_vars['custom_form'] = Hook::exec('displayAdminProductsExtra', array(), (int)$id_module); $this->tpl_form_vars['custom_form'] = Hook::exec('displayAdminProductsExtra', array(), (int)$id_module);
} }
/** /**
* delete all items in pack, then check if type_product value is 2. * delete all items in pack, then check if type_product value is 2.
* if yes, add the pack items from input "inputPackItems" * if yes, add the pack items from input "inputPackItems"
@@ -4143,7 +4140,9 @@ class AdminProductsControllerCore extends AdminController
list($qty, $item_id) = explode('x', $line); list($qty, $item_id) = explode('x', $line);
if ($qty > 0 && isset($item_id)) if ($qty > 0 && isset($item_id))
{ {
if (!Pack::addItem((int)$product->id, (int)$item_id, (int)$qty)) if (Pack::isPack((int)$item_id))
$this->errors[] = Tools::displayError('You can\'t add product packs into a pack');
elseif (!Pack::addItem((int)$product->id, (int)$item_id, (int)$qty))
$this->errors[] = Tools::displayError('An error occurred while adding products to the pack.'); $this->errors[] = Tools::displayError('An error occurred while adding products to the pack.');
} }
} }
+2 -1
View File
@@ -991,7 +991,8 @@ product_tabs['Pack'] = new function(){
}, },
extraParams: { extraParams: {
excludeIds : getSelectedIds(), excludeIds : getSelectedIds(),
excludeVirtuals : 1 excludeVirtuals : 1,
exclude_packs: 1
} }
}).result(function(event, item){ }).result(function(event, item){
$('#curPackItemId').val(item[1]); $('#curPackItemId').val(item[1]);