[*] BO : #PSFV-94 - added AdminAttributeGeneratorController
This commit is contained in:
@@ -1,319 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
@ini_set('max_execution_time', 3600);
|
||||
include_once(_PS_ADMIN_DIR_.'/../classes/AdminTab.php');
|
||||
|
||||
class AdminAttributeGenerator extends AdminTab
|
||||
{
|
||||
private $combinations = array();
|
||||
private $product;
|
||||
|
||||
private function addAttribute($arr, $price = 0, $weight = 0)
|
||||
{
|
||||
foreach ($arr AS $attr)
|
||||
{
|
||||
$price += (float)($_POST['price_impact_'.(int)($attr)]);
|
||||
$weight += (float)($_POST['weight_impact'][(int)($attr)]);
|
||||
}
|
||||
if ($this->product->id)
|
||||
{
|
||||
return (array(
|
||||
'id_product' => (int)($this->product->id),
|
||||
'price' => (float)($price),
|
||||
'weight' => (float)($weight),
|
||||
'ecotax' => 0,
|
||||
'quantity' => (int)($_POST['quantity']),
|
||||
'reference' => pSQL($_POST['reference']),
|
||||
'default_on' => 0));
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
static private function createCombinations($list)
|
||||
{
|
||||
if (sizeof($list) <= 1)
|
||||
return sizeof($list) ? array_map(create_function('$v', 'return (array($v));'), $list[0]) : $list;
|
||||
$res = array();
|
||||
$first = array_pop($list);
|
||||
foreach ($first AS $attribute)
|
||||
{
|
||||
$tab = self::createCombinations($list);
|
||||
foreach ($tab AS $toAdd)
|
||||
$res[] = is_array($toAdd) ? array_merge($toAdd, array($attribute)) : array($toAdd, $attribute);
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function postProcess()
|
||||
{
|
||||
$this->product = new Product((int)(Tools::getValue('id_product')));
|
||||
|
||||
if (isset($_POST['generate']))
|
||||
{
|
||||
if (!is_array(Tools::getValue('options')))
|
||||
$this->_errors[] = Tools::displayError('Please choose at least 1 attribute.');
|
||||
else
|
||||
{
|
||||
$tab = array_values($_POST['options']);
|
||||
if (sizeof($tab) AND Validate::isLoadedObject($this->product))
|
||||
{
|
||||
self::setAttributesImpacts($this->product->id, $tab);
|
||||
$this->combinations = array_values(self::createCombinations($tab));
|
||||
$values = array_values(array_map(array($this, 'addAttribute'), $this->combinations));
|
||||
$this->product->deleteProductAttributes();
|
||||
$res = $this->product->addProductAttributeMultiple($values);
|
||||
$this->product->addAttributeCombinationMultiple($res, $this->combinations);
|
||||
$this->product->updateQuantityProductWithAttributeQuantity();
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('Unable to initialize parameters, combination is missing or object cannot be loaded.');
|
||||
}
|
||||
}
|
||||
elseif (isset($_POST['back']))
|
||||
Tools::redirectAdmin(self::$currentIndex.'&id_product='.(int)(Tools::getValue('id_product')).'&id_category='.(int)(Tools::getValue('id_category')).'&addproduct'.'&tabs=3&token='.Tools::getValue('token'));
|
||||
parent::postProcess();
|
||||
}
|
||||
|
||||
private static function displayAndReturnAttributeJs()
|
||||
{
|
||||
$attributes = Attribute::getAttributes(Context::getContext()->language->id, true);
|
||||
$attributeJs = array();
|
||||
foreach ($attributes AS $k => $attribute)
|
||||
$attributeJs[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name'];
|
||||
echo '
|
||||
<script type="text/javascript">
|
||||
var attrs = new Array();
|
||||
attrs[0] = new Array(0, \'---\');';
|
||||
foreach ($attributeJs AS $idgrp => $group)
|
||||
{
|
||||
echo '
|
||||
attrs['.$idgrp.'] = new Array(0, \'---\' ';
|
||||
foreach ($group AS $idattr => $attrname)
|
||||
echo ', '.$idattr.', \''.addslashes(($attrname)).'\'';
|
||||
echo ');';
|
||||
}
|
||||
echo '
|
||||
</script>';
|
||||
return $attributeJs;
|
||||
}
|
||||
|
||||
private function displayGroupSelect($attributeJs, $attributesGroups)
|
||||
{
|
||||
echo ' <div>
|
||||
<select multiple name="attributes[]" id="attribute_group" style="width: 200px; height: 350px; margin-bottom: 10px;">';
|
||||
|
||||
foreach ($attributesGroups AS $k => $attributeGroup)
|
||||
{
|
||||
$idGroup = (int)$attributeGroup['id_attribute_group'];
|
||||
if (isset($attributeJs[$idGroup]))
|
||||
{
|
||||
echo ' <optgroup name="'.$idGroup.'" id="'.$idGroup.'" label="'.htmlspecialchars(stripslashes($attributeGroup['name'])).'">';
|
||||
foreach ($attributeJs[$idGroup] AS $k => $v)
|
||||
echo ' <option name="'.$k.'" id="attr_'.$k.'" value="'.htmlspecialchars($v, ENT_QUOTES).'" title="'.htmlspecialchars($v, ENT_QUOTES).'"">'.$v.'</option>';
|
||||
echo ' </optgroup>';
|
||||
}
|
||||
}
|
||||
echo ' </select>
|
||||
</div>';
|
||||
}
|
||||
|
||||
private static function setAttributesImpacts($id_product, $tab)
|
||||
{
|
||||
$attributes = array();
|
||||
foreach ($tab AS $group)
|
||||
foreach ($group AS $attribute)
|
||||
$attributes[] = '('.(int)($id_product).', '.(int)($attribute).', '.(float)($_POST['price_impact_'.(int)($attribute)]).', '.(float)($_POST['weight_impact'][(int)($attribute)]).')';
|
||||
return Db::getInstance()->execute(
|
||||
'INSERT INTO `'._DB_PREFIX_.'attribute_impact` (`id_product`, `id_attribute`, `price`, `weight`)
|
||||
VALUES '.implode(',', $attributes).'
|
||||
ON DUPLICATE KEY UPDATE `price`=VALUES(price), `weight`=VALUES(weight)'
|
||||
);
|
||||
}
|
||||
|
||||
private static function getAttributesImpacts($id_product)
|
||||
{
|
||||
$tab = array();
|
||||
$result = Db::getInstance()->executeS(
|
||||
'SELECT ai.`id_attribute`, ai.`price`, ai.`weight`
|
||||
FROM `'._DB_PREFIX_.'attribute_impact` ai
|
||||
WHERE ai.`id_product` = '.(int)($id_product));
|
||||
if (!$result)
|
||||
return array();
|
||||
foreach ($result AS $impact)
|
||||
{
|
||||
$tab[$impact['id_attribute']]['price'] = (float)($impact['price']);
|
||||
$tab[$impact['id_attribute']]['weight'] = (float)($impact['weight']);
|
||||
}
|
||||
return $tab;
|
||||
}
|
||||
|
||||
private function displayGroupeTable($attributeJs, $attributesGroups)
|
||||
{
|
||||
|
||||
$combinationsGroups = $this->product->getAttributesGroups($this->context->language->id);
|
||||
$attributes = array();
|
||||
$impacts = self::getAttributesImpacts($this->product->id);
|
||||
foreach ($combinationsGroups AS &$combination)
|
||||
{
|
||||
$target = &$attributes[$combination['id_attribute_group']][$combination['id_attribute']];
|
||||
$target = $combination;
|
||||
if (isset($impacts[$combination['id_attribute']]))
|
||||
{
|
||||
$target['price'] = $impacts[$combination['id_attribute']]['price'];
|
||||
$target['weight'] = $impacts[$combination['id_attribute']]['weight'];
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($attributesGroups AS $k => $attributeGroup)
|
||||
{
|
||||
$idGroup = $attributeGroup['id_attribute_group'];
|
||||
if (isset($attributeJs[$idGroup]))
|
||||
{
|
||||
echo '
|
||||
<br class="clear"/>
|
||||
<table class="table" cellpadding="0" cellspacing="0" align="left" style="margin-bottom: 10px; display: none;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="tab_h1" style="width: 150px">'.htmlspecialchars(stripslashes($attributeGroup['name'])).'</th>
|
||||
<th id="tab_h2" style="width: 350px" colspan="2">'.$this->l('Price impact').' ('.$this->context->currency->sign.')'.'</th>
|
||||
<th style="width: 150px">'.$this->l('Weight impact').' ('.Configuration::get('PS_WEIGHT_UNIT').')'.'</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="table_'.$idGroup.'" name="result_table">
|
||||
</tbody>
|
||||
</table>';
|
||||
if (isset($attributes[$idGroup]))
|
||||
foreach ($attributes[$idGroup] AS $k => $attribute)
|
||||
echo '<script type="text/javascript">$(\'#table_'.$idGroup.'\').append(create_attribute_row('.$k.', '.$idGroup.', \''.addslashes($attribute['attribute_name']).'\', '.$attribute['price'].', '.$attribute['weight'].'));toggle(getE(\'table_\' + '.$idGroup.').parentNode, true);</script>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function displayForm($isMainTab = true)
|
||||
{
|
||||
if (!Combination::isFeatureActive())
|
||||
{
|
||||
$this->displayWarning($this->l('This feature has been disabled, you can active this feature at this page:').' <a href="index.php?tab=AdminPerformance&token='.Tools::getAdminTokenLite('AdminPerformance').'#featuresDetachables">'.$this->l('Performances').'</a>');
|
||||
return;
|
||||
}
|
||||
|
||||
parent::displayForm();
|
||||
|
||||
$jsAttributes = self::displayAndReturnAttributeJs();
|
||||
$attributesGroups = AttributeGroup::getAttributesGroups($this->context->language->id);
|
||||
$this->product = new Product((int)(Tools::getValue('id_product')));
|
||||
|
||||
// JS Init
|
||||
echo
|
||||
'<script type="text/javascript">
|
||||
i18n_tax_exc = "'.$this->l('Tax Excl.:').'";
|
||||
i18n_tax_inc = "'.$this->l('Tax Incl.:').'";
|
||||
|
||||
var product_tax = "'.$this->product->getTaxesRate().'";
|
||||
|
||||
function calcPrice(element, element_has_tax)
|
||||
{
|
||||
name = element.attr("name");
|
||||
var element_price = element.val().replace(/,/g, ".");
|
||||
var other_element_price = "0";
|
||||
|
||||
if (!isNaN(element_price) && element_price > 0)
|
||||
{
|
||||
if (element_has_tax)
|
||||
other_element_price = parseFloat(element_price / ((product_tax / 100) + 1));
|
||||
else
|
||||
other_element_price = ps_round(parseFloat(element_price * ((product_tax / 100) + 1)), 2);
|
||||
}
|
||||
|
||||
$("#related_to_"+name).val(other_element_price);
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function()
|
||||
{
|
||||
$(".price_impact").each(function()
|
||||
{
|
||||
calcPrice($(this), false);
|
||||
});
|
||||
});
|
||||
</script>';
|
||||
|
||||
|
||||
|
||||
if (isset($_POST['generate']) AND !sizeof($this->_errors))
|
||||
echo '
|
||||
<div class="module_confirmation conf confirm">
|
||||
<img src="../img/admin/ok.gif" alt="" title="" style="margin-right:5px; float:left;" />
|
||||
'.sizeof($this->combinations).' '.$this->l('product(s) successfully created.').'
|
||||
</div>';
|
||||
echo '
|
||||
<script type="text/javascript" src="../js/attributesBack.js"></script>
|
||||
<form enctype="multipart/form-data" method="post" id="generator" action="'.self::$currentIndex.'&&id_product='.(int)(Tools::getValue('id_product')).'&id_category='.(int)(Tools::getValue('id_category')).'&attributegenerator&token='.Tools::getValue('token').'">
|
||||
<fieldset style="margin-bottom: 35px;"><legend><img src="../img/admin/asterisk.gif" />'.$this->l('Attributes generator').'</legend>'.
|
||||
$this->l('Add or modify attributes for product:').' <b>'.$this->product->name[$this->context->language->id].'</b>
|
||||
<br /><br />
|
||||
';
|
||||
echo '
|
||||
<div style="padding-top:10px; float: left; width: 570px;">
|
||||
<div style="float:left;">
|
||||
<label>'.$this->l('Quantity').'</label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="20" name="quantity" value="0"/>
|
||||
</div>
|
||||
<label>'.$this->l('Reference').'</label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="20" name="reference" value="'.$this->product->reference.'"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="float:left; text-align:center; margin-left:20px;">
|
||||
<input type="submit" class="button" style="margin-bottom:5px;" name="generate" value="'.$this->l('Generate').'" /><br />
|
||||
<input type="submit" class="button" name="back" value="'.$this->l('Back to product').'" />
|
||||
</div>
|
||||
<br style="clear:both;" />
|
||||
<div style="margin-top: 15px;">';
|
||||
self::displayGroupeTable($jsAttributes, $attributesGroups);
|
||||
echo '
|
||||
</div>
|
||||
</div>
|
||||
<div style="float: left; margin-left: 60px;">
|
||||
';
|
||||
self::displayGroupSelect($jsAttributes, $attributesGroups);
|
||||
echo '
|
||||
<div>
|
||||
<p style="text-align: center;">
|
||||
<input class="button" type="button" style="margin: 0 0 10px 20px;" value="'.$this->l('Add').'" class="button" onclick="add_attr_multiple();" />
|
||||
<input class="button" type="button" style="margin: 0 0 10px 20px;" value="'.$this->l('Delete').'" class="button" onclick="del_attr_multiple();" /><br />
|
||||
<input type="submit" class="button" name="back" value="'.$this->l('Back to product').'" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</fieldset>
|
||||
</form>';
|
||||
}
|
||||
}
|
||||
@@ -156,6 +156,7 @@ a.module_toggle_all{color: #268CCD;}
|
||||
.toolbarBox .process-icon-save { background-image: url(process-icon-save.png);}
|
||||
.toolbarBox .process-icon-save-and-stay { background-image: url(process-icon-save-and-stay.png);}
|
||||
.toolbarBox .process-icon-edit { background-image: url(process-icon-edit.png);}
|
||||
.toolbarBox .process-icon-back { background-image: url(process-icon-back.png);}
|
||||
|
||||
/*leadin*/
|
||||
.leadin { padding:10px;}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,146 @@
|
||||
{*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Academic Free License (AFL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/afl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*}
|
||||
|
||||
<script type="text/javascript">
|
||||
i18n_tax_exc = "{l s='Tax Excl.:'}";
|
||||
i18n_tax_inc = "{l s='Tax Incl.:'}";
|
||||
|
||||
var product_tax = "{$tax_rates}";
|
||||
function calcPrice(element, element_has_tax)
|
||||
{
|
||||
name = element.attr("name");
|
||||
var element_price = element.val().replace(/,/g, ".");
|
||||
var other_element_price = "0";
|
||||
|
||||
if (!isNaN(element_price) && element_price > 0)
|
||||
{
|
||||
if (element_has_tax)
|
||||
other_element_price = parseFloat(element_price / ((product_tax / 100) + 1));
|
||||
else
|
||||
other_element_price = ps_round(parseFloat(element_price * ((product_tax / 100) + 1)), 2);
|
||||
}
|
||||
|
||||
$("#related_to_"+name).val(other_element_price);
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function()
|
||||
{
|
||||
$(".price_impact").each(function()
|
||||
{
|
||||
calcPrice($(this), false);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="toolbarBox">
|
||||
{include file="toolbar.tpl" toolbar_btn=$toolbar_btn}
|
||||
<div class="pageTitle">
|
||||
<h3>
|
||||
<span id="current_obj" style="font-weight: normal;">{$title|default:' '}</span>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $generate}
|
||||
<div class="module_confirmation conf confirm">
|
||||
<img src="../img/admin/ok.gif" alt="" title="" style="margin-right:5px; float:left;" />
|
||||
{$combinations_size} {l s='product(s) successfully created.'}
|
||||
</div>
|
||||
{/if}
|
||||
<script type="text/javascript" src="../js/attributesBack.js"></script>
|
||||
<form enctype="multipart/form-data" method="post" id="generator" action="{$url_generator}">
|
||||
<fieldset style="margin-bottom: 35px;">
|
||||
<legend><img src="../img/admin/asterisk.gif" />{l s='Attributes generator'}</legend>
|
||||
{l s='Add or modify attributes for product:'} <b>{$product_name}</b>
|
||||
<br /><br />
|
||||
<div style="padding-top:10px; float: left; width: 570px;">
|
||||
<div style="float:left;">
|
||||
<label>{l s='Quantity'}</label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="20" name="quantity" value="0"/>
|
||||
</div>
|
||||
<label>{l s='Reference'}</label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="20" name="reference" value="{$product_reference}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="float:left; text-align:center; margin-left:20px;">
|
||||
<input type="submit" class="button" style="margin-bottom:5px;" name="generate" value="{l s='Generate'}" /><br />
|
||||
</div>
|
||||
<br style="clear:both;" />
|
||||
<div style="margin-top: 15px;">
|
||||
{foreach $attribute_groups as $k => $attribute_group}
|
||||
{if isset($attribute_js[$attribute_group['id_attribute_group']])}
|
||||
<br class="clear"/>
|
||||
<table class="table" cellpadding="0" cellspacing="0" align="left" style="margin-bottom: 10px; display: none;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="tab_h1" style="width: 150px">{$attribute_group['name']|escape:'htmlall':'UTF-8'}</th>
|
||||
<th id="tab_h2" style="width: 350px" colspan="2">{l s='Price impact'} {$currency_sign}</th>
|
||||
<th style="width: 150px">{l s='Weight impact'} ({$weight_unit})</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="table_{$attribute_group['id_attribute_group']}" name="result_table">
|
||||
</tbody>
|
||||
</table>
|
||||
{if isset($attributes[$attribute_group['id_attribute_group']])}
|
||||
{foreach $attributes[$attribute_group['id_attribute_group']] AS $k => $attribute}
|
||||
<script type="text/javascript">
|
||||
$('#table_{$attribute_group['id_attribute_group']}').append(create_attribute_row({$k}, {$attribute_group['id_attribute_group']}, '{$attribute['attribute_name']|addslashes}', {$attribute['price']}, {$attribute['weight']}));
|
||||
toggle(getE('table_' + {$attribute_group['id_attribute_group']}).parentNode, true);
|
||||
</script>
|
||||
{/foreach}
|
||||
{/if}
|
||||
{/if}
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
<div style="float: left; margin-left: 60px;">
|
||||
<div>
|
||||
<select multiple name="attributes[]" id="attribute_group" style="width: 200px; height: 350px; margin-bottom: 10px;">';
|
||||
{$attribute_groups|@var_dump}
|
||||
{foreach $attribute_groups as $k => $attribute_group}
|
||||
{if isset($attribute_js[$attribute_group['id_attribute_group']])}
|
||||
<optgroup name="{$attribute_group['id_attribute_group']}" id="{$attribute_group['id_attribute_group']}" label="{$attribute_group['name']|escape:'htmlall':'UTF-8'}">';
|
||||
{foreach $attribute_js[$attribute_group['id_attribute_group']] as $k => $v}
|
||||
<option name="{$k}" id="attr_{$k}" value="{$v|escape:'quotes':'UTF-8'}" title="{$v|escape:'quotes':'UTF-8'}">{$v|escape:'quotes':'UTF-8'}</option>
|
||||
{/foreach}
|
||||
</optgroup>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<p style="text-align: center;">
|
||||
<input class="button" type="button" style="margin: 0 0 10px 20px;" value="{l s='Add'}" class="button" onclick="add_attr_multiple();" />
|
||||
<input class="button" type="button" style="margin: 0 0 10px 20px;" value="{l s='Delete'}" class="button" onclick="del_attr_multiple();" /><br />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</fieldset>
|
||||
</form>
|
||||
@@ -49,7 +49,7 @@
|
||||
<table cellpadding="5">
|
||||
<tr>
|
||||
<td colspan="2"><b>{l s='Add or modify combinations for this product'}</b> {l s='or go to'}
|
||||
<a href="index.php?tab=AdminProducts&id_product={$id_product}&id_category={$id_category}&attributegenerator&token={$token}" onclick="return confirm('{l s='Are you sure you want to delete entered product information?'}');"><img src="../img/admin/appearance.gif" alt="combinations_generator" class="middle" title="{l s='Product combinations generator'}" /> {l s='Product combinations generator'}</a>
|
||||
<a href="index.php?tab=AdminAttributeGenerator&id_product={$id_product}&attributegenerator&token={$token_generator}" onclick="return confirm('{l s='Are you sure you want to delete entered product information?'}');"><img src="../img/admin/appearance.gif" alt="combinations_generator" class="middle" title="{l s='Product combinations generator'}" /> {l s='Product combinations generator'}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
+1
-1
@@ -893,7 +893,7 @@ class ProductCore extends ObjectModel
|
||||
|
||||
/**
|
||||
* addProductAttribute is deprecated
|
||||
* @deprecated
|
||||
* @deprecated
|
||||
*/
|
||||
public function addProductAttribute($price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = NULL, $upc = NULL)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
@ini_set('max_execution_time', 3600);
|
||||
|
||||
class AdminAttributeGeneratorControllerCore extends AdminController
|
||||
{
|
||||
private $combinations = array();
|
||||
private $product;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->table = 'product_attribute';
|
||||
$this->className = 'Product';
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
private function addAttribute($arr, $price = 0, $weight = 0)
|
||||
{
|
||||
foreach ($arr AS $attr)
|
||||
{
|
||||
$price += (float)($_POST['price_impact_'.(int)($attr)]);
|
||||
$weight += (float)($_POST['weight_impact'][(int)($attr)]);
|
||||
}
|
||||
if ($this->product->id)
|
||||
{
|
||||
return (array(
|
||||
'id_product' => (int)($this->product->id),
|
||||
'price' => (float)($price),
|
||||
'weight' => (float)($weight),
|
||||
'ecotax' => 0,
|
||||
'quantity' => (int)($_POST['quantity']),
|
||||
'reference' => pSQL($_POST['reference']),
|
||||
'default_on' => 0,
|
||||
'available_date' => '0000-00-00'));
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
static private function createCombinations($list)
|
||||
{
|
||||
if (sizeof($list) <= 1)
|
||||
return sizeof($list) ? array_map(create_function('$v', 'return (array($v));'), $list[0]) : $list;
|
||||
$res = array();
|
||||
$first = array_pop($list);
|
||||
foreach ($first AS $attribute)
|
||||
{
|
||||
$tab = self::createCombinations($list);
|
||||
foreach ($tab AS $toAdd)
|
||||
$res[] = is_array($toAdd) ? array_merge($toAdd, array($attribute)) : array($toAdd, $attribute);
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function postProcess()
|
||||
{
|
||||
$this->product = new Product((int)(Tools::getValue('id_product')));
|
||||
|
||||
if (isset($_POST['generate']))
|
||||
{
|
||||
if (!is_array(Tools::getValue('options')))
|
||||
$this->_errors[] = Tools::displayError('Please choose at least 1 attribute.');
|
||||
else
|
||||
{
|
||||
$tab = array_values($_POST['options']);
|
||||
if (sizeof($tab) AND Validate::isLoadedObject($this->product))
|
||||
{
|
||||
self::setAttributesImpacts($this->product->id, $tab);
|
||||
$this->combinations = array_values(self::createCombinations($tab));
|
||||
$values = array_values(array_map(array($this, 'addAttribute'), $this->combinations));
|
||||
$this->product->deleteProductAttributes();
|
||||
$res = $this->product->addProductAttributeMultiple($values);
|
||||
$this->product->addAttributeCombinationMultiple($res, $this->combinations);
|
||||
$this->product->updateQuantityProductWithAttributeQuantity();
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('Unable to initialize parameters, combination is missing or object cannot be loaded.');
|
||||
}
|
||||
}
|
||||
elseif (isset($_POST['back']))
|
||||
Tools::redirectAdmin(self::$currentIndex.'&id_product='.(int)(Tools::getValue('id_product')).'&addproduct'.'&tabs=3&token='.Tools::getValue('token'));
|
||||
parent::postProcess();
|
||||
}
|
||||
|
||||
private static function displayAndReturnAttributeJs()
|
||||
{
|
||||
$attributes = Attribute::getAttributes(Context::getContext()->language->id, true);
|
||||
$attributeJs = array();
|
||||
foreach ($attributes AS $k => $attribute)
|
||||
$attributeJs[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name'];
|
||||
echo '
|
||||
<script type="text/javascript">
|
||||
var attrs = new Array();
|
||||
attrs[0] = new Array(0, \'---\');';
|
||||
foreach ($attributeJs AS $idgrp => $group)
|
||||
{
|
||||
echo '
|
||||
attrs['.$idgrp.'] = new Array(0, \'---\' ';
|
||||
foreach ($group AS $idattr => $attrname)
|
||||
echo ', '.$idattr.', \''.addslashes(($attrname)).'\'';
|
||||
echo ');';
|
||||
}
|
||||
echo '
|
||||
</script>';
|
||||
return $attributeJs;
|
||||
}
|
||||
|
||||
private static function setAttributesImpacts($id_product, $tab)
|
||||
{
|
||||
$attributes = array();
|
||||
foreach ($tab AS $group)
|
||||
foreach ($group AS $attribute)
|
||||
$attributes[] = '('.(int)($id_product).', '.(int)($attribute).', '.(float)($_POST['price_impact_'.(int)($attribute)]).', '.(float)($_POST['weight_impact'][(int)($attribute)]).')';
|
||||
|
||||
return Db::getInstance()->execute(
|
||||
'INSERT INTO `'._DB_PREFIX_.'attribute_impact` (`id_product`, `id_attribute`, `price`, `weight`)
|
||||
VALUES '.implode(',', $attributes).'
|
||||
ON DUPLICATE KEY UPDATE `price`=VALUES(price), `weight`=VALUES(weight)'
|
||||
);
|
||||
}
|
||||
|
||||
private static function getAttributesImpacts($id_product)
|
||||
{
|
||||
$tab = array();
|
||||
$result = Db::getInstance()->executeS(
|
||||
'SELECT ai.`id_attribute`, ai.`price`, ai.`weight`
|
||||
FROM `'._DB_PREFIX_.'attribute_impact` ai
|
||||
WHERE ai.`id_product` = '.(int)($id_product));
|
||||
if (!$result)
|
||||
return array();
|
||||
foreach ($result AS $impact)
|
||||
{
|
||||
$tab[$impact['id_attribute']]['price'] = (float)($impact['price']);
|
||||
$tab[$impact['id_attribute']]['weight'] = (float)($impact['weight']);
|
||||
}
|
||||
return $tab;
|
||||
}
|
||||
|
||||
public function initGroupTable()
|
||||
{
|
||||
$combinationsGroups = $this->product->getAttributesGroups($this->context->language->id);
|
||||
$attributes = array();
|
||||
$impacts = self::getAttributesImpacts($this->product->id);
|
||||
foreach ($combinationsGroups as &$combination)
|
||||
{
|
||||
$target = &$attributes[$combination['id_attribute_group']][$combination['id_attribute']];
|
||||
$target = $combination;
|
||||
if (isset($impacts[$combination['id_attribute']]))
|
||||
{
|
||||
$target['price'] = $impacts[$combination['id_attribute']]['price'];
|
||||
$target['weight'] = $impacts[$combination['id_attribute']]['weight'];
|
||||
}
|
||||
}
|
||||
$this->context->smarty->assign(array(
|
||||
'currency_sign' => $this->context->currency->sign,
|
||||
'weight_unit' => Configuration::get('PS_WEIGHT_UNIT'),
|
||||
'attributes' => $attributes,
|
||||
));
|
||||
}
|
||||
|
||||
public function initToolbar()
|
||||
{
|
||||
$this->toolbar_btn['back'] = array(
|
||||
'href' => $this->context->link->getAdminLink('AdminProducts').'&id_product='.(int)Tools::getValue('id_product'),
|
||||
'desc' => $this->l('Back to product')
|
||||
);
|
||||
}
|
||||
|
||||
public function initContent()
|
||||
{
|
||||
if (!Combination::isFeatureActive())
|
||||
{
|
||||
$this->displayWarning($this->l('This feature has been disabled, you can active this feature at this page:').' <a href="index.php?tab=AdminPerformance&token='.Tools::getAdminTokenLite('AdminPerformance').'#featuresDetachables">'.$this->l('Performances').'</a>');
|
||||
return;
|
||||
}
|
||||
|
||||
// Init toolbar
|
||||
$this->initToolbarTitle();
|
||||
$this->initToolbar();
|
||||
|
||||
$this->initGroupTable();
|
||||
|
||||
$js_attributes = self::displayAndReturnAttributeJs();
|
||||
$attribute_groups = AttributeGroup::getAttributesGroups($this->context->language->id);
|
||||
$this->product = new Product((int)(Tools::getValue('id_product')));
|
||||
|
||||
$this->context->smarty->assign(array(
|
||||
'tax_rates' => $this->product->getTaxesRate(),
|
||||
'generate' => isset($_POST['generate']) AND !sizeof($this->_errors),
|
||||
'combinations_size' => count($this->combinations),
|
||||
'product_name' => $this->product->name[$this->context->language->id],
|
||||
'product_reference' => $this->product->reference,
|
||||
'url_generator' => self::$currentIndex.'&id_product='.(int)(Tools::getValue('id_product')).'&attributegenerator&token='.Tools::getValue('token'),
|
||||
'attribute_groups' => $attribute_groups,
|
||||
'attribute_js' => $js_attributes,
|
||||
'toolbar_btn' => $this->toolbar_btn,
|
||||
'title' => $this->toolbar_title,
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -1913,7 +1913,7 @@ switch ($this->action)
|
||||
$countries = Country::getCountries($this->context->language->id);
|
||||
$groups = Group::getGroups($this->context->language->id);
|
||||
$currencies = Currency::getCurrencies();
|
||||
$currency =
|
||||
$currency =
|
||||
$attributes = $obj->getAttributesGroups((int)$this->context->language->id);
|
||||
$combinations = array();
|
||||
foreach($attributes as $attribute)
|
||||
@@ -1922,7 +1922,7 @@ switch ($this->action)
|
||||
if (!isset($combinations[$attribute['id_product_attribute']]['attributes']))
|
||||
$combinations[$attribute['id_product_attribute']]['attributes'] = '';
|
||||
$combinations[$attribute['id_product_attribute']]['attributes'] .= $attribute['attribute_name'].' - ';
|
||||
|
||||
|
||||
$combinations[$attribute['id_product_attribute']]['price'] = Tools::displayPrice(Tools::convertPrice(Product::getPriceStatic((int)$obj->id, false, $attribute['id_product_attribute']), $this->context->currency), $this->context->currency);
|
||||
}
|
||||
foreach ($combinations as &$combination)
|
||||
@@ -3481,9 +3481,7 @@ $product->supplier_name = Supplier::getNameById($product->id_supplier);
|
||||
<th>'.$this->l('Weight').'</th>
|
||||
<th>'.$this->l('Reference').'</th>
|
||||
<th>'.$this->l('EAN13').'</th>
|
||||
<th>'.$this->l('UPC').'</th>
|
||||
<th class="center">'.$this->l('Quantity').'</th>';
|
||||
|
||||
<th>'.$this->l('UPC').'</th>';
|
||||
|
||||
if ($id_product_download && !empty($productDownload->display_filename))
|
||||
{
|
||||
@@ -3517,7 +3515,6 @@ $product->supplier_name = Supplier::getNameById($product->id_supplier);
|
||||
$combArray[$combinaison['id_product_attribute']]['minimal_quantity'] = $combinaison['minimal_quantity'];
|
||||
$combArray[$combinaison['id_product_attribute']]['available_date'] = strftime($combinaison['available_date']);
|
||||
$combArray[$combinaison['id_product_attribute']]['location'] = $combinaison['location'];
|
||||
$combArray[$combinaison['id_product_attribute']]['quantity'] = $combinaison['quantity'];
|
||||
$combArray[$combinaison['id_product_attribute']]['id_image'] = isset($combinationImages[$combinaison['id_product_attribute']][0]['id_image']) ? $combinationImages[$combinaison['id_product_attribute']][0]['id_image'] : 0;
|
||||
$combArray[$combinaison['id_product_attribute']]['default_on'] = $combinaison['default_on'];
|
||||
$combArray[$combinaison['id_product_attribute']]['ecotax'] = $combinaison['ecotax'];
|
||||
@@ -3568,8 +3565,7 @@ $product->supplier_name = Supplier::getNameById($product->id_supplier);
|
||||
<td class="right">'.$product_attribute['weight'].Configuration::get('PS_WEIGHT_UNIT').'</td>
|
||||
<td class="right">'.$product_attribute['reference'].'</td>
|
||||
<td class="right">'.$product_attribute['ean13'].'</td>
|
||||
<td class="right">'.$product_attribute['upc'].'</td>
|
||||
<td class="center">'.$product_attribute['quantity'].'</td>';
|
||||
<td class="right">'.$product_attribute['upc'].'</td>';
|
||||
|
||||
if ($id_product_download && !empty($product->productDownload->display_filename))
|
||||
{
|
||||
@@ -3590,7 +3586,7 @@ $product->supplier_name = Supplier::getNameById($product->id_supplier);
|
||||
<a style="cursor: pointer;">
|
||||
<img src="../img/admin/edit.gif" alt="'.$this->l('Modify this combination').'"
|
||||
onclick="javascript:fillCombinaison(\''.$product_attribute['wholesale_price'].'\', \''.$product_attribute['price'].'\', \''.$product_attribute['weight'].'\', \''.$product_attribute['unit_impact'].'\', \''.$product_attribute['reference'].'\', \''.$product_attribute['supplier_reference'].'\', \''.$product_attribute['ean13'].'\',
|
||||
\''.$product_attribute['quantity'].'\', \''.($attrImage ? $attrImage->id : 0).'\', Array('.$jsList.'), \''.$id_product_attribute.'\', \''.$product_attribute['default_on'].'\', \''.$product_attribute['ecotax'].'\', \''.$product_attribute['location'].'\', \''.$product_attribute['upc'].'\', \''.$product_attribute['minimal_quantity'].'\', \''.$available_date.'\',
|
||||
\''.($attrImage ? $attrImage->id : 0).'\', Array('.$jsList.'), \''.$id_product_attribute.'\', \''.$product_attribute['default_on'].'\', \''.$product_attribute['ecotax'].'\', \''.$product_attribute['location'].'\', \''.$product_attribute['upc'].'\', \''.$product_attribute['minimal_quantity'].'\', \''.$available_date.'\',
|
||||
\''.$product->productDownload->display_filename.'\', \''.$filename.'\', \''.$product->productDownload->nb_downloadable.'\', \''.$available_date_attribute.'\', \''.$product->productDownload->nb_days_accessible.'\', \''.$product->productDownload->is_shareable.'\'); calcImpactPriceTI();" /></a>
|
||||
'.(!$product_attribute['default_on'] ? '<a href="'.self::$currentIndex.'&defaultProductAttribute&id_product_attribute='.$id_product_attribute.'&id_product='.$product->id.'&'.(Tools::isSubmit('id_category') ? 'id_category='.(int)(Tools::getValue('id_category')).'&' : '&').'token='.Tools::getAdminToken('AdminProducts'.(int)(Tab::getIdFromClassName('AdminProducts')).$this->context->employee->id).'">
|
||||
<img src="../img/admin/asterisk.gif" alt="'.$this->l('Make this the default combination').'" title="'.$this->l('Make this combination the default one').'"></a>' : '').'
|
||||
@@ -3628,9 +3624,12 @@ $product->supplier_name = Supplier::getNameById($product->id_supplier);
|
||||
$this->content .= $content;
|
||||
// @todo
|
||||
$smarty->assign('up_filename', strval(Tools::getValue('virtual_product_filename_attribute')));
|
||||
$this->context->smarty->assign('content', $content);
|
||||
$this->context->smarty->assign('product', $product);
|
||||
$this->context->smarty->assign('id_category', $product->id_category_default);
|
||||
$this->context->smarty->assign(array(
|
||||
'content' => $content,
|
||||
'product' => $product,
|
||||
'id_category' => $product->id_category_default,
|
||||
'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator')
|
||||
));
|
||||
$this->content = $this->context->smarty->fetch('products/combinations.tpl');
|
||||
}
|
||||
|
||||
|
||||
@@ -360,8 +360,8 @@ INSERT INTO `PREFIX_category_lang` (`id_category`, `id_lang`, `name`, `descripti
|
||||
(1, 1, 'Home', '', 'home', NULL, NULL, NULL),(1, 2, 'Accueil', '', 'home', NULL, NULL, NULL),(1, 3, 'Inicio', '', 'home', NULL, NULL, NULL),(1, 4, 'Start', '', 'home', NULL, NULL, NULL),(1, 5, 'Home page', '', 'home', NULL, NULL, NULL);
|
||||
|
||||
INSERT INTO `PREFIX_order_state` (`id_order_state`, `invoice`, `send_email`, `color`, `unremovable`, `logable`, `delivery`, `shipped`) VALUES
|
||||
(1, 0, 1, 'lightblue', 1, 0, 0, 0),(2, 1, 1, '#DDEEFF', 1, 1, 0, 0),(3, 1, 1, '#FFDD99', 1, 1, 1, 0),(4, 1, 1, '#EEDDFF', 1, 1, 1, 1),(5, 1, 0, '#DDFFAA', 1, 1, 1, 1),
|
||||
(6, 0, 1, '#DADADA', 1, 0, 0, 0),(7, 1, 1, '#FFFFBB', 1, 0, 0, 0),(8, 0, 1, '#FFDFDF', 1, 0, 0, 0),(9, 1, 1, '#FFD3D3', 1, 0, 0, 0),(10, 0, 1, 'lightblue', 1, 0, 0, 0),(11, 0, 0, 'lightblue', 1, 0, 0, 0),(12, 1, 0, '#DDEEFF', 1, 1, 0, 0);
|
||||
(1, 0, 1, 'RoyalBlue', 1, 0, 0, 0),(2, 1, 1, 'LimeGreen', 1, 1, 0, 0),(3, 1, 1, 'DarkOrange', 1, 1, 1, 0),(4, 1, 1, 'BlueViolet', 1, 1, 1, 1),(5, 1, 0, 'Crimson', 1, 1, 1, 1),
|
||||
(6, 0, 1, '#999999', 1, 0, 0, 0),(7, 1, 1, 'Orange', 1, 0, 0, 0),(8, 0, 1, 'DarkOrange', 1, 0, 0, 0),(9, 1, 1, 'HotPink', 1, 0, 0, 0),(10, 0, 1, 'RoyalBlue', 1, 0, 0, 0),(11, 0, 0, 'RoyalBlue', 1, 0, 0, 0),(12, 1, 0, 'LimeGreen', 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `PREFIX_order_state_lang` (`id_order_state`, `id_lang`, `name`, `template`) VALUES
|
||||
(1, 1, 'Awaiting cheque payment', 'cheque'),
|
||||
@@ -949,7 +949,8 @@ INSERT INTO `PREFIX_tab` (`id_tab`, `class_name`, `id_parent`, `position`) VALUE
|
||||
(97, 'AdminStockManagement', 95, 2),
|
||||
(98, 'AdminStockInstantState', 95, 4),
|
||||
(99, 'AdminStockCover', 95, 5),
|
||||
(100, 'AdminSupplierOrders', 95, 6);
|
||||
(100, 'AdminSupplierOrders', 95, 6),
|
||||
(101, 'AdminAttributeGenerator', -1, 0);
|
||||
|
||||
INSERT INTO `PREFIX_access` (`id_profile`, `id_tab`, `view`, `add`, `edit`, `delete`) (SELECT 1, id_tab, 1, 1, 1, 1 FROM `PREFIX_tab`);
|
||||
|
||||
@@ -974,7 +975,8 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(1, 97, 'Stock Management'),
|
||||
(1, 98, 'Stock instant state'),
|
||||
(1, 99, 'Stock cover'),
|
||||
(1, 100, 'Supplier orders');
|
||||
(1, 100, 'Supplier orders'),
|
||||
(1, 101, 'Combinations generator');
|
||||
|
||||
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(2, 1, 'Catalogue'),(2, 2, 'Clients'),(2, 3, 'Commandes'),(2, 4, 'Paiement'),(2, 5, 'Transport'),
|
||||
@@ -997,7 +999,8 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(2, 97, 'Gestion du stock'),
|
||||
(2, 98, 'Etat instantané du stock'),
|
||||
(2, 99, 'Couverture de stock'),
|
||||
(2, 100, 'Commandes fournisseurs');
|
||||
(2, 100, 'Commandes fournisseurs'),
|
||||
(2, 101, 'Générateur de combinaisons');
|
||||
|
||||
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(3, 1, 'Catálogo'),(3, 2, 'Clientes'),(3, 3, 'Pedidos'),(3, 4, 'Pago'),(3, 5, 'Transporte'),
|
||||
@@ -1019,7 +1022,8 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(3, 97, 'Stock Management'),
|
||||
(3, 98, 'Stock instant state'),
|
||||
(3, 99, 'Stock cover'),
|
||||
(3, 100, 'Supplier orders');
|
||||
(3, 100, 'Supplier orders'),
|
||||
(3, 101, 'Combinations generator');
|
||||
|
||||
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(4, 1, 'Katalog'),(4, 2, 'Kunden'),(4, 3, 'Bestellungen'),(4, 4, 'Zahlung'),
|
||||
@@ -1042,7 +1046,8 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(4, 97, 'Stock Management'),
|
||||
(4, 98, 'Stock instant state'),
|
||||
(4, 99, 'Stock cover'),
|
||||
(4, 100, 'Supplier orders');
|
||||
(4, 100, 'Supplier orders'),
|
||||
(4, 101, 'Combinations generator');
|
||||
|
||||
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(5, 1, 'Catalogo'),(5, 2, 'Clienti'),(5, 3, 'Ordini'),(5, 4, 'Pagamento'),
|
||||
@@ -1065,7 +1070,8 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(5, 97, 'Stock Management'),
|
||||
(5, 98, 'Stock instant state'),
|
||||
(5, 99, 'Stock cover'),
|
||||
(5, 100, 'Supplier orders');
|
||||
(5, 100, 'Supplier orders'),
|
||||
(5, 101, 'Combinations generator');
|
||||
|
||||
INSERT IGNORE INTO `PREFIX_tab_lang` (`id_tab`, `id_lang`, `name`)
|
||||
(SELECT `id_tab`, id_lang, (SELECT tl.`name`
|
||||
@@ -1085,7 +1091,7 @@ INSERT INTO `PREFIX_quick_access_lang` (`id_quick_access`, `id_lang`, `name`) VA
|
||||
(4, 1, 'New product'),(4, 2, 'Nouveau produit'),(4, 3, 'Nuevo producto'),(4, 4, 'Neues Produkt'),(4, 5, 'Nuovo prodotto'),
|
||||
(5, 1, 'New voucher'),(5, 2, 'Nouveau bon de réduction'),(5, 3, 'Nuevo cupón'),(5, 4, 'Neuer Ermäßigungsgutschein'),(5, 5, 'Nuovo buono sconto');
|
||||
|
||||
INSERT INTO `PREFIX_order_return_state` (`id_order_return_state`, `color`) VALUES (1, '#ADD8E6'),(2, '#EEDDFF'),(3, '#DDFFAA'),(4, '#FFD3D3'),(5, '#FFFFBB');
|
||||
INSERT INTO `PREFIX_order_return_state` (`id_order_return_state`, `color`) VALUES (1, '#ADD8E6'),(2, 'BlueViolet'),(3, 'Crimson'),(4, 'HotPink'),(5, 'Orange');
|
||||
|
||||
INSERT INTO `PREFIX_order_return_state_lang` (`id_order_return_state`, `id_lang`, `name`) VALUES
|
||||
(1, 1, 'Waiting for confirmation'),(2, 1, 'Waiting for package'),(3, 1, 'Package received'),(4, 1, 'Return denied'),(5, 1, 'Return completed'),
|
||||
|
||||
@@ -471,3 +471,5 @@ UPDATE `PREFIX_hook` SET `name` = 'actionTaxManager' WHERE `name` = 'taxManager'
|
||||
ALTER TABLE `PREFIX_specific_price` ADD `id_product_attribute` INT UNSIGNED NOT NULL AFTER `id_product`;
|
||||
ALTER TABLE `PREFIX_specific_price` DROP INDEX `id_product`;
|
||||
ALTER TABLE `PREFIX_specific_price` ADD INDEX `id_product` (`id_product`, `id_product_attribute`, `id_shop`, `id_currency`, `id_country`, `id_group`, `from_quantity`, `from`, `to`);
|
||||
|
||||
/* PHP:add_new_tab(AdminAttributeGenerator, fr:Générateur de combinaisons|es:Combinations generator|en:Combinations generator|de:Combinations generator|it:Combinations generator, 1); */;
|
||||
Reference in New Issue
Block a user