Rework on module

This commit is contained in:
Michael RICOIS 2017-06-14 15:14:07 +02:00
parent b21ec24c23
commit d4edd05e5d
10 changed files with 476 additions and 271 deletions

View File

@ -40,8 +40,9 @@ class AntadisConfigurator extends Module
return false; return false;
} }
// Install AdminAntadisConfiguratorProduct // Install AdminAntadisConfiguratorProductGroup AdminAntadisConfiguratorProductImpact
if (!$this->installTab('AdminCatalog', 'AdminAntadisConfiguratorProduct', 'Configurator Product', 0)) { if (!$this->installTab('AdminCatalog', 'AdminAntadisConfiguratorProductGroup', 'Configurator Product Group', 0) ||
!$this->installTab('AdminCatalog', 'AdminAntadisConfiguratorProductImpact', 'Configurator Product Impact', 0)) {
return false; return false;
} }

View File

@ -7,7 +7,6 @@ class ProductConfiguratorOptGroup extends ObjectModel
public $required; public $required;
public $position; public $position;
public static $definition = array( public static $definition = array(
'table' => 'product_configurator_opt_group', 'table' => 'product_configurator_opt_group',
'primary' => 'id_product_configurator_opt_group', 'primary' => 'id_product_configurator_opt_group',
@ -43,23 +42,100 @@ class ProductConfiguratorOptGroup extends ObjectModel
WHERE `id_configurator_opt_group` = '.(int)$this->id_configurator_opt_group.' AND `id_lang` = '.(int)$id_lang); WHERE `id_configurator_opt_group` = '.(int)$this->id_configurator_opt_group.' AND `id_lang` = '.(int)$id_lang);
} }
/**
* Move an attribute inside its group
* @param bool $way Up (1) or Down (0)
* @param int $position
* @return bool Update result
*/
public function updatePosition($way, $position)
{
if (!$id_product = (int)Tools::getValue('id_product')) {
$id_product = (int)$this->id_product;
}
$sql = '
SELECT a.`id_product_configurator_opt_group`, a.`position`, a.`id_product`
FROM `'._DB_PREFIX_.'product_configurator_opt_group` a
WHERE a.`id_product` = '.(int)$id_product.'
ORDER BY a.`position` ASC';
if (!$res = Db::getInstance()->executeS($sql)) {
return false;
}
foreach ($res as $attribute) {
if ((int)$attribute['id_product_configurator_opt_group'] == (int)$this->id) {
$moved_attribute = $attribute;
}
}
if (!isset($moved_attribute) || !isset($position)) {
return false;
}
// < and > statements rather than BETWEEN operator
// since BETWEEN is treated differently according to databases
$res1 = Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'product_configurator_opt_group`
SET `position`= `position` '.($way ? '- 1' : '+ 1').'
WHERE `position`
'.($way
? '> '.(int)$moved_attribute['position'].' AND `position` <= '.(int)$position
: '< '.(int)$moved_attribute['position'].' AND `position` >= '.(int)$position).'
AND `id_product`='.(int)$moved_attribute['id_product']
);
$res2 = Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'product_configurator_opt_group`
SET `position` = '.(int)$position.'
WHERE `id_product_configurator_opt_group` = '.(int)$moved_attribute['id_product_configurator_opt_group'].'
AND `id_product`='.(int)$moved_attribute['id_product']
);
return ($res1 && $res2);
}
/**
* Reorder attribute position in group $id_attribute_group.
* Call it after deleting an attribute from a group.
*
* @param int $id_attribute_group
* @param bool $use_last_attribute
* @return bool $return
*/
public function cleanPositions($id_product, $use_last = true)
{
Db::getInstance()->execute('SET @i = -1', false);
$sql = 'UPDATE `'._DB_PREFIX_.'product_configurator_opt_group` SET `position` = @i:=@i+1 WHERE';
if ($use_last) {
$sql .= ' `id_product_configurator_opt_group` != '.(int)$this->id.' AND';
}
$sql .= ' `id_product` = '.(int)$id_product.' ORDER BY `position` ASC';
$return = Db::getInstance()->execute($sql);
}
/** /**
* getHigherPosition * getHigherPosition
* *
* Get the higher position * Get the higher position from a group
* *
* @param int $id_product * @param int $id_product_configurator_opt_group
* @return int $position * @return int $position
*/ */
public static function getHigherPosition($id_product) public static function getHigherPosition($id_product_configurator_opt_group)
{ {
$sql = 'SELECT MAX(`position`) $sql = 'SELECT MAX(`position`)
FROM `'._DB_PREFIX_.'product_configurator_opt_group` FROM `'._DB_PREFIX_.'product_configurator_opt_group`
WHERE id_product = '.(int)$id_product; WHERE id_prodcut_configurator_opt_group = '.(int)$id_product_configurator_opt_group;
$position = DB::getInstance()->getValue($sql); $position = DB::getInstance()->getValue($sql);
return (is_numeric($position)) ? $position : -1; return (is_numeric($position)) ? $position : -1;
} }
} }

View File

@ -114,13 +114,10 @@ class AdminAntadisConfiguratorController extends ModuleAdminController
// Row action // Row action
$this->addRowAction('edit'); $this->addRowAction('edit');
$this->addRowAction('delete'); $this->addRowAction('delete');
self::$currentIndex = self::$currentIndex.'&id_configurator_opt_group='.(int)$id.'&viewconfigurator_opt_group'; self::$currentIndex = self::$currentIndex.'&id_configurator_opt_group='.(int)$id.'&viewconfigurator_opt_group';
$this->processFilter(); $this->processFilter();
//@todo : Re-Init all products with this option group on value change
return parent::renderList(); return parent::renderList();
} }
} }
@ -477,9 +474,13 @@ class AdminAntadisConfiguratorController extends ModuleAdminController
public function ajaxProcessUpdatePositions() public function ajaxProcessUpdatePositions()
{ {
$way = (int)Tools::getValue('way'); $way = (int)Tools::getValue('way');
$id_configurator_opt = (int)Tools::getValue('id_configurator_opt'); $id_configurator_opt = (int)Tools::getValue('id');
$id_configurator_opt_group = (int)Tools::getValue('id_configurator_opt_group');
$positions = Tools::getValue('configurator_opt'); $positions = Tools::getValue('configurator_opt');
$return = array(
'hasError' => true,
'errors' => '"Can not update values to position"',
);
if (is_array($positions)) { if (is_array($positions)) {
foreach ($positions as $position => $value) { foreach ($positions as $position => $value) {
@ -488,17 +489,25 @@ class AdminAntadisConfiguratorController extends ModuleAdminController
if ((isset($pos[1]) && isset($pos[2])) && (int)$pos[2] === $id_configurator_opt) { if ((isset($pos[1]) && isset($pos[2])) && (int)$pos[2] === $id_configurator_opt) {
if ($opt = new ConfiguratorOpt((int)$pos[2])) { if ($opt = new ConfiguratorOpt((int)$pos[2])) {
if (isset($position) && $opt->updatePosition($way, $position)) { if (isset($position) && $opt->updatePosition($way, $position)) {
echo 'ok position '.(int)$position.' for values '.(int)$pos[2].'\r\n'; echo 'ok position '.(int)$position.' for values '.(int)$pos[2]; exit;
} else { } else {
echo '{"hasError" : true, "errors" : "Can not update the '.(int)$id_configurator_opt.' values to position '.(int)$position.' "}'; $return = array(
'hasError' => true,
'errors' => '"Can not update the '.(int)$id_configurator_opt.' values to position '.(int)$position.'"',
);
} }
} else { } else {
echo '{"hasError" : true, "errors" : "The ('.(int)$id_configurator_opt.') values cannot be loaded"}'; $return = array(
'hasError' => true,
'errors' => '"The ('.(int)$id_configurator_opt.') values cannot be loaded"',
);
} }
break; break;
} }
} }
} }
echo Tools::jsonEncode($return);
} }
} }

View File

@ -1,237 +0,0 @@
<?php
class AdminAntadisConfiguratorProductController extends ModuleAdminController
{
public function __construct()
{
$this->module = 'antadisconfigurator';
$this->context = Context::getContext();
$this->table = 'product_configurator_opt_impact';
$this->className = 'ProductConfiguratorOptImpact';
$this->identifier = 'id_product_configurator_opt_impact';
// Enable bootstrap
$this->bootstrap = true;
// Call of the parent constructor method
parent::__construct();
}
/**
* Associe l'option et les valeurs au produit
*/
public function ajaxProcessAdd()
{
$id_configurator_opt_group = Tools::getValue('id_configurator_opt_group');
$id_product = Tools::getValue('id_product');
// Associer OptGroup
$result = Db::getInstance()->insert('product_configurator_opt_group', array(
'id_product' => $id_product,
'id_configurator_opt_group' => $id_configurator_opt_group,
'required' => 0,
'position' => ProductConfiguratorOptGroup::getHigherPosition($id_product) + 1,
));
if ($result) {
$id_product_configurator_opt_group = Db::getInstance()->Insert_ID();
// Get OptGroup values
$values = ConfiguratorOptGroup::getValues($id_configurator_opt_group);
// Associer OptImpact
foreach($values as $v) {
$impact = new ProductConfiguratorOptImpact();
$impact->id_product = $id_product;
$impact->id_product_configurator_opt_group = $id_product_configurator_opt_group;
$impact->id_configurator_opt = $v['id_configurator_opt'];
$impact->price = $v['price'];
$impact->save();
}
$return = array(
'result' => $result,
);
} else {
$return = array(
'hasError' => true,
'errors' => $this->l("Insert error : ".Db::getInstance()->getMsgError()),
);
}
echo Tools::jsonEncode($return);
}
/**
* Set required status
*/
public function ajaxProcessStatusProductConfiguratorOptGroup()
{
if (!$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group')) {
die(Tools::jsonEncode(array('success' => false, 'error' => 'true', 'text' => $this->l('Failed to update the required status'))));
} else {
$optGroup = new ProductConfiguratorOptGroup((int)$id_product_configurator_opt_group);
if (Validate::isLoadedObject($optGroup)) {
$optGroup->required = $optGroup->required == 1 ? 0 : 1;
$optGroup->save() ?
die(Tools::jsonEncode(array('success' => true, 'text' => $this->l('The required status has been updated successfully')))) :
die(Tools::jsonEncode(array('success' => false, 'error' => true, 'text' => $this->l('Failed to update the required status'))));
}
}
}
public function postProcess()
{
if (Tools::getIsset('deleteproduct_configurator_opt_group')) {
$this->processDelete();
} else {
parent::postProcess();
}
}
public function processUpdate()
{
$id_product = Tools::getValue('id_product');
$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group');
$this->redirect_after = $this->context->link->getAdminLink('AdminAntadisConfiguratorProduct').
'&id_product='.(int)$id_product.'&id_product_configurator_opt_group='.(int)$id_product_configurator_opt_group;
parent::processUpdate();
}
public function processDelete()
{
$id_product = Tools::getValue('id_product');
$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group');
// Supprimer les assocations group et sous éléments
$sql = 'DELETE FROM `'._DB_PREFIX_.'product_configurator_opt_impact` WHERE `id_product` = '.(int)$id_product.' AND `id_product_configurator_opt_group` = '.(int)$id_product_configurator_opt_group;
if (!$result = Db::getInstance()->execute($sql)) {
$this->errors[] = Tools::displayError('Unable to delete items.');
}
if ($result) {
$sql = 'DELETE FROM `'._DB_PREFIX_.'product_configurator_opt_group` WHERE `id_product_configurator_opt_group` = '.(int)$id_product_configurator_opt_group;
if (!Db::getInstance()->execute($sql)) {
$this->errors[] = Tools::displayError('Unable to delete group.');
}
}
$this->redirect_after = $this->context->link->getAdminLink('AdminProducts').'&id_product='.$id_product;
}
public function processPosition()
{
}
public function ajaxProcessUpdatePosition()
{
}
/**
* Display impact list
* {@inheritDoc}
* @see AdminControllerCore::renderList()
*/
public function renderList()
{
$id_product = Tools::getValue('id_product');
$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group');
$optGroup = new ProductConfiguratorOptGroup($id_product_configurator_opt_group);
// Set fields list
$this->fields_list = array(
'id_product_configurator_opt_impact' => array(
'title' => $this->l('ID'),
'align' => 'center',
'width' => 25,
'search' => false,
),
'name' => array(
'title' => $this->l('Value'),
'search' => false,
),
'price' => array(
'title' => $this->l('Price impact'),
'search' => false,
'type' => 'price',
),
);
$this->_select = 'col.`name` AS name';
$this->_join = '
LEFT JOIN `'._DB_PREFIX_.'configurator_opt_lang` col ON (col.`id_configurator_opt` = a.`id_configurator_opt` AND col.`id_lang` = '.(int)$this->context->language->id.')';
$this->_where = ' AND a.`id_product` = '.(int)$id_product.' AND a.`id_product_configurator_opt_group` = '.(int)$id_product_configurator_opt_group;
self::$currentIndex = self::$currentIndex.'&id_product='.$id_product;
$this->addRowAction('edit');
$this->toolbar_title = Product::getProductName($id_product) . ' - ' . $optGroup->getConfiguratorOptGroupName() . ' - Options Impact';
$this->toolbar_btn = array();
$this->toolbar_btn['back'] = array(
'href' => $this->context->link->getAdminLink('AdminProducts', true).'&updateproduct&id_product='.(int)$id_product,
'desc' => $this->l('Back to product', null, null, false)
);
return parent::renderList();
}
/**
* Change price impact
* {@inheritDoc}
* @see AdminControllerCore::renderForm()
*/
public function renderForm()
{
$id_product_configurator_opt_impact= Tools::getValue('id_product_configurator_opt_impact');
$optImpact = new ProductConfiguratorOptImpact($id_product_configurator_opt_impact);
$this->fields_form = array(
'legend' => array('title' => $this->l('Edit price impact')),
'input' => array(
'id_product_configurator_opt_impact' => array(
'type' => 'hidden',
'name' => 'id_product_configurator_opt_impact',
),
'id_product' => array(
'type' => 'hidden',
'name' => 'id_product',
),
'id_product_configurator_opt_group' => array(
'type' => 'hidden',
'name' => 'id_product_configurator_opt_group',
),
'id_configurator_opt' => array(
'type' => 'hidden',
'name' => 'id_configurator_opt',
),
'price' => array(
'type' => 'text',
'label' => $this->l('Price'),
'hint' => $this->l('Impact de prix de l\'option'),
'name' => 'price',
'required' => true,
),
),
'submit' => array('title' => $this->l('Save')),
);
// Override cancel
self::$currentIndex = $this->context->link->getAdminLink('AdminAntadisConfiguratorProduct', false).
'&id_product='.$optImpact->id_product.'&id_product_configurator_opt_group='.$optImpact->id_product_configurator_opt_group;
$this->fields_value = array(
'id_product_configurator_opt_impact' => $optImpact->id_product_configurator_opt_impact,
'id_product' => $optImpact->id_product,
'id_product_configurator_opt_group' => $optImpact->id_product_configurator_opt_group,
'id_configurator_opt' => $optImpact->id_configurator_opt,
'price' => $optImpact->price,
);
return parent::renderForm();
}
}

View File

@ -0,0 +1,220 @@
<?php
class AdminAntadisConfiguratorProductGroupController extends ModuleAdminController
{
public function __construct()
{
$this->module = 'antadisconfigurator';
$this->context = Context::getContext();
// Enable bootstrap
$this->bootstrap = true;
$this->table = 'product_configurator_opt_group';
$this->className = 'ProductConfiguratorOptGroup';
$this->identifier = 'id_product_configurator_opt_group';
// Call of the parent constructor method
parent::__construct();
}
public function postProcess()
{
if (Tools::getIsset('deleteproduct_configurator_opt_group')) {
$this->processDelete();
} elseif (Tools::getIsset('updateproduct_configurator_opt_group')) {
$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group');
Tools::redirectAdmin($this->context->link->getAdminLink('AdminAntadisConfiguratorProductImpact') .
'&id_product_configurator_opt_group='.(int)$id_product_configurator_opt_group);
} else {
parent::postProcess();
}
}
public function processDelete()
{
$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group');
$id_product = Tools::getValue('id_product');
if ($id_product === null) {
$this->errors[] = Tools::displayError('Error id_product is missing.');
} else {
// Delete impact
$sql = 'DELETE FROM `'._DB_PREFIX_.'product_configurator_opt_impact` WHERE `id_product_configurator_opt_group` = '.(int)$id_product_configurator_opt_group;
if (!$result = Db::getInstance()->execute($sql)) {
$this->errors[] = Tools::displayError('Unable to delete items.');
}
if ($result) {
// Delete group associated
$sql = 'DELETE FROM `'._DB_PREFIX_.'product_configurator_opt_group` WHERE `id_product_configurator_opt_group` = '.(int)$id_product_configurator_opt_group;
if (!Db::getInstance()->execute($sql)) {
$this->errors[] = Tools::displayError('Unable to delete group.');
}
// Re-order
$obj = new ProductConfiguratorOptGroup();
$obj->cleanPositions($id_product);
}
}
}
public function renderList()
{
// Get Product for reference
$id_product = (int)Tools::getValue('id_product');
// Override page title
$this->page_header_toolbar_title = 'Product Options : ' . Product::getProductName($id_product);
//Add back button to product
$this->toolbar_btn = array();
$this->toolbar_btn['back'] = array(
'href' => $this->context->link->getAdminLink('AdminProducts').'&updateproduct&id_product='.(int)$id_product,
'desc' => $this->l('Back to product', null, null, false)
);
// Position
$this->position_identifier = 'id_product_configurator_opt_group';
// Remove filters
$this->list_simple_header = true;
// List
$this->fields_list = array(
'id_product_configurator_opt_group' => array(
'title' => $this->l('ID')
),
'name' => array(
'title' => $this->l('Option Name'),
),
'required' => array(
'title' => $this->l('Required'),
'active' => 'status',
'type' => 'bool',
'ajax' => true,
),
'position' => array(
'title' => $this->l('Position'),
'position' => 'position',
'class' => 'fixed-width-md'
),
);
// Override SQL to get name
$this->_select = ' cogl.`name`';
$this->_join = 'LEFT JOIN `'._DB_PREFIX_.'configurator_opt_group_lang` cogl ON(cogl.`id_configurator_opt_group` = a.`id_configurator_opt_group`)';
$this->_where = ' AND a.`id_product` = '.(int)$id_product;
$this->_orderBy = 'position';
// Only delete action
$this->addRowAction('delete');
self::$currentIndex = self::$currentIndex.'&id_product='.(int)$id_product;
return parent::renderList();
}
/**
* Associate option and his items to product
*/
public function ajaxProcessAdd()
{
$id_configurator_opt_group = Tools::getValue('id_configurator_opt_group');
$id_product = Tools::getValue('id_product');
// Associer OptGroup
$result = Db::getInstance()->insert('product_configurator_opt_group', array(
'id_product' => $id_product,
'id_configurator_opt_group' => $id_configurator_opt_group,
'required' => 0,
'position' => ProductConfiguratorOptGroup::getHigherPosition($id_product) + 1,
));
if ($result) {
$id_product_configurator_opt_group = Db::getInstance()->Insert_ID();
// Get OptGroup values
$values = ConfiguratorOptGroup::getValues($id_configurator_opt_group);
// Associer OptImpact
foreach($values as $v) {
$impact = new ProductConfiguratorOptImpact();
$impact->id_product = $id_product;
$impact->id_product_configurator_opt_group = $id_product_configurator_opt_group;
$impact->id_configurator_opt = $v['id_configurator_opt'];
$impact->price = $v['price'];
$impact->save();
}
$return = array(
'result' => $result,
);
} else {
$return = array(
'hasError' => true,
'errors' => $this->l("Insert error : ".Db::getInstance()->getMsgError()),
);
}
echo Tools::jsonEncode($return);
}
/**
* Set required status
*/
public function ajaxProcessStatusProductConfiguratorOptGroup()
{
if (!$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group')) {
die(Tools::jsonEncode(array('success' => false, 'error' => 'true', 'text' => $this->l('Failed to update the required status'))));
} else {
$optGroup = new ProductConfiguratorOptGroup((int)$id_product_configurator_opt_group);
if (Validate::isLoadedObject($optGroup)) {
$optGroup->required = $optGroup->required == 1 ? 0 : 1;
$optGroup->save() ?
die(Tools::jsonEncode(array('success' => true, 'text' => $this->l('The required status has been updated successfully')))) :
die(Tools::jsonEncode(array('success' => false, 'error' => true, 'text' => $this->l('Failed to update the required status'))));
}
}
}
/**
* Modify position
*/
public function ajaxProcessUpdatePositions()
{
$way = (int)Tools::getValue('way');
$id = (int)Tools::getValue('id');
$positions = Tools::getValue('product_configurator_opt_group');
$return = array(
'hasError' => true,
'errors' => 'Can not update values to position',
);
if (is_array($positions)) {
foreach ($positions as $position => $value) {
$pos = explode('_', $value);
if ((isset($pos[1]) && isset($pos[2])) && (int)$pos[2] === $id) {
if ($opt = new ProductConfiguratorOptGroup((int)$pos[2])) {
if (isset($position) && $opt->updatePosition($way, $position)) {
echo 'ok position '.(int)$position.' for values '.(int)$pos[2];
exit;
} else {
$return = array(
'hasError' => true,
'errors' => 'Can not update the '.(int)$id.' values to position '.(int)$position,
);
}
} else {
$return = array(
'hasError' => true,
'errors' => 'The ('.(int)$id.') values cannot be loaded',
);
}
break;
}
}
}
die(Tools::jsonEncode($return));
}
}

View File

@ -0,0 +1,135 @@
<?php
class AdminAntadisConfiguratorProductImpactController extends ModuleAdminController
{
public function __construct()
{
$this->module = 'antadisconfigurator';
$this->context = Context::getContext();
// Enable bootstrap
$this->bootstrap = true;
$this->table = 'product_configurator_opt_impact';
$this->className = 'ProductConfiguratorOptImpact';
$this->identifier = 'id_product_configurator_opt_impact';
// Call of the parent constructor method
parent::__construct();
}
public function processUpdate()
{
$id_product = Tools::getValue('id_product');
$id_product_configurator_opt_group = Tools::getValue('id_product_configurator_opt_group');
$this->redirect_after = $this->context->link->getAdminLink('AdminAntadisConfiguratorProductImpact').
'&id_product='.(int)$id_product.'&id_product_configurator_opt_group='.(int)$id_product_configurator_opt_group;
parent::processUpdate();
}
public function renderList()
{
// Get Product for reference
$id_product_configurator_opt_group = (int)Tools::getValue('id_product_configurator_opt_group');
$objectGroup = new ProductConfiguratorOptGroup($id_product_configurator_opt_group);
$id_product = $objectGroup->id_product;
// Override page title
$this->page_header_toolbar_title = 'Product Options Impact : ' . Product::getProductName($id_product);
//Add back button to product
$this->toolbar_btn = array();
$this->toolbar_btn['back'] = array(
'href' => $this->context->link->getAdminLink('AdminProducts').'&updateproduct&id_product='.(int)$id_product,
'desc' => $this->l('Back to product', null, null, false)
);
$this->toolbar_btn['backGroup'] = array(
'href' => $this->context->link->getAdminLink('AdminAntadisConfiguratorProductGroup').'&id_product_configurator_opt_group='.(int)$id_product_configurator_opt_group,
'desc' => $this->l('Back to group', null, null, false)
);
// Remove filters
$this->list_simple_header = true;
// Set fields list
$this->fields_list = array(
'id_product_configurator_opt_impact' => array(
'title' => $this->l('ID'),
'align' => 'center',
'width' => 25,
'search' => false,
),
'name' => array(
'title' => $this->l('Value'),
'search' => false,
),
'price' => array(
'title' => $this->l('Price impact'),
'search' => false,
'type' => 'price',
),
);
$this->_select = 'col.`name` AS name';
$this->_join = 'LEFT JOIN `'._DB_PREFIX_.'configurator_opt_lang` col
ON (col.`id_configurator_opt` = a.`id_configurator_opt` AND col.`id_lang` = '.(int)$this->context->language->id.')';
$this->_where = ' AND a.`id_product` = '.(int)$id_product.' AND a.`id_product_configurator_opt_group` = '.(int)$id_product_configurator_opt_group;
return parent::renderList();
}
public function renderForm()
{
$id_product_configurator_opt_impact = Tools::getValue('id_product_configurator_opt_impact');
$optImpact = new ProductConfiguratorOptImpact($id_product_configurator_opt_impact);
// Override page title
$this->page_header_toolbar_title = 'Product Options Impact :' . Product::getProductName($optImpact->id_product);
// Override cancel
self::$currentIndex = self::$currentIndex.'&id_product='.$optImpact->id_product.'&id_product_configurator_opt_group='.$optImpact->id_product_configurator_opt_group;
$this->fields_form = array(
'legend' => array('title' => $this->l('Edit price impact')),
'input' => array(
'id_product_configurator_opt_impact' => array(
'type' => 'hidden',
'name' => 'id_product_configurator_opt_impact',
),
'id_product' => array(
'type' => 'hidden',
'name' => 'id_product',
),
'id_product_configurator_opt_group' => array(
'type' => 'hidden',
'name' => 'id_product_configurator_opt_group',
),
'id_configurator_opt' => array(
'type' => 'hidden',
'name' => 'id_configurator_opt',
),
'price' => array(
'type' => 'text',
'label' => $this->l('Price'),
'hint' => $this->l('Impact de prix de l\'option'),
'name' => 'price',
'required' => true,
),
),
'submit' => array('title' => $this->l('Save')),
);
$this->fields_value = array(
'id_product_configurator_opt_impact' => $optImpact->id_product_configurator_opt_impact,
'id_product' => $optImpact->id_product,
'id_product_configurator_opt_group' => $optImpact->id_product_configurator_opt_group,
'id_configurator_opt' => $optImpact->id_configurator_opt,
'price' => $optImpact->price,
);
return parent::renderForm();
}
}

View File

@ -41,8 +41,6 @@ class AntadisConfiguratorDisplayAdminProductsExtraController
), ),
'position' => array( 'position' => array(
'title' => $this->module->l('Position'), 'title' => $this->module->l('Position'),
'filter_key' => 'a!position',
'position' => 'position',
'class' => 'fixed-width-md' 'class' => 'fixed-width-md'
), ),
); );
@ -60,10 +58,11 @@ class AntadisConfiguratorDisplayAdminProductsExtraController
$helper->position_identifier = 'id_product_configurator_opt_group'; $helper->position_identifier = 'id_product_configurator_opt_group';
$helper->orderBy = 'position'; $helper->orderBy = 'position';
$helper->actions = array('delete'); $helper->no_link = true;
$helper->token = Tools::getAdminTokenLite('AdminAntadisConfiguratorProduct'); $helper->token = Tools::getAdminTokenLite('AdminAntadisConfiguratorProductGroup');
$helper->currentIndex = $this->context->link->getAdminLink('AdminAntadisConfiguratorProduct', false).'&id_product='.(int)$id_product; $helper->currentIndex = $this->context->link->getAdminLink('AdminAntadisConfiguratorProductGroup', false).
'&id_product='.(int)$id_product;
// Available options // Available options
$optGroupList = ConfiguratorOptGroup::getAll(); $optGroupList = ConfiguratorOptGroup::getAll();
@ -74,6 +73,7 @@ class AntadisConfiguratorDisplayAdminProductsExtraController
'OptGroupList' => $optGroupList, 'OptGroupList' => $optGroupList,
'OptGroupListFormLink' => $this->context->link->getAdminLink('AdminProducts').'&id_product='.(int)$id_product, 'OptGroupListFormLink' => $this->context->link->getAdminLink('AdminProducts').'&id_product='.(int)$id_product,
'ProductOptGroupList' => $helper->generateList($productOptGroupList, $fields_list), 'ProductOptGroupList' => $helper->generateList($productOptGroupList, $fields_list),
'ConfigureLink' => $this->context->link->getAdminLink('AdminAntadisConfiguratorProductGroup').'&id_product='.(int)$id_product,
)); ));
return $this->module->display($this->file, 'displayAdminProductsExtra.tpl'); return $this->module->display($this->file, 'displayAdminProductsExtra.tpl');

View File

@ -29,7 +29,7 @@ CREATE TABLE `ps_configurator_opt_lang` (
`id_lang` int(11) NOT NULL, `id_lang` int(11) NOT NULL,
`name` varchar(255) NOT NULL, `name` varchar(255) NOT NULL,
PRIMARY KEY (`id_configurator_opt`,`id_lang`) PRIMARY KEY (`id_configurator_opt`,`id_lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `ps_configurator_storage` ( CREATE TABLE `ps_configurator_storage` (

View File

@ -1,5 +0,0 @@
<?php
class AdminOrdersController extends AdminController
{
}

View File

@ -2,8 +2,13 @@
<div id="product-configurator-opt" class="panel product-tab"> <div id="product-configurator-opt" class="panel product-tab">
<div class="panel-heading">{l s='Add options for this product'}</div> <div class="panel-heading">{l s='Add options for this product'}</div>
<div class="panel-body"> <div class="panel-body">
<form id="product-configurator-opt-add" name="product-configurator-opt-add" class="form-inline" method="post" data-token="{$token}" action="{$OptGroupListFormLink}"> <div class="row">
<input type="hidden" name="id_product" value="{$id_product}"/> <div class="col-md-6">
<a href="{$ConfigureLink}" class="btn btn-default">{l s='Configure associated options'}</a>
</div>
<div class="col-md-6">
<form id="product-configurator-opt-add" name="product-configurator-opt-add" class="form-inline" method="post" data-token="{$token}" action="{$OptGroupListFormLink}">
<input type="hidden" name="id_product" value="{$id_product}"/>
<div class="form-group"> <div class="form-group">
<select name="id_configurator_opt_group" class="form-control"> <select name="id_configurator_opt_group" class="form-control">
<option value="">-</option> <option value="">-</option>
@ -12,8 +17,10 @@
{/foreach} {/foreach}
</select> </select>
</div> </div>
<button type="submit" class="btn btn-default pull-right">{l s="Add New option"}</button> <button type="submit" class="btn btn-default">{l s="Add New option"}</button>
</form> </form>
</div>
</div>
</div> </div>
</div> </div>
<script> <script>
@ -22,7 +29,7 @@ $('form#product-configurator-opt-add').submit(function(){
var postData = { var postData = {
//required parameters //required parameters
ajax : true, ajax : true,
controller : 'AdminAntadisConfiguratorProduct', controller : 'AdminAntadisConfiguratorProductGroup',
action : 'Add', action : 'Add',
token : $(this).attr('data-token'), token : $(this).attr('data-token'),
//additional parameters to your controller //additional parameters to your controller
@ -42,6 +49,5 @@ $('form#product-configurator-opt-add').submit(function(){
}); });
</script> </script>
{*Gestion des OptGroup*}
{$ProductOptGroupList} {$ProductOptGroupList}