diff --git a/admin-dev/ajax.php b/admin-dev/ajax.php index 10992a728..d1ceff13b 100644 --- a/admin-dev/ajax.php +++ b/admin-dev/ajax.php @@ -970,3 +970,15 @@ if (Tools::isSubmit('getParentCategoriesId') AND $id_category = Tools::getValue( die(Tools::jsonEncode($output)); } +/* Update attribute */ +if (Tools::isSubmit('ajaxUpdateTaxRule')) +{ + $id_tax_rule = Tools::getValue('id_tax_rule'); + $tax_rules = new TaxRule((int)$id_tax_rule); + $output = array(); + foreach($tax_rules as $key => $result) + $output[$key] = $result; + die(Tools::jsonEncode($output)); + +} + diff --git a/admin-dev/themes/template/helper/form/form.tpl b/admin-dev/themes/template/helper/form/form.tpl index ca9c98109..3968bc9d1 100644 --- a/admin-dev/themes/template/helper/form/form.tpl +++ b/admin-dev/themes/template/helper/form/form.tpl @@ -61,6 +61,8 @@ {rdelim}); + {block name="script"} + {/block} {/if} {if isset($toolbar) && $toolbar} @@ -70,7 +72,7 @@ {if isset($fields.title)}

{$fields.title}

{/if}
{if $form_id} - + {/if}
{foreach $fields as $key => $field} @@ -131,7 +133,11 @@ {$input.required = false} {$input.p = null} {else} - {if isset($input.options.default)} {/if} @@ -156,7 +162,6 @@ + {* if (isset($this->_includeTab) AND sizeof($this->_includeTab)) echo '

'; -*} \ No newline at end of file +*} + +{if !$no_back} +
+ {if $back} + {l s='Back'} + {else} + {l s='Back to list'} + {/if} +
+{/if} \ No newline at end of file diff --git a/admin-dev/themes/template/tax_rules/list_action_edit.tpl b/admin-dev/themes/template/tax_rules/list_action_edit.tpl new file mode 100644 index 000000000..6f1092f46 --- /dev/null +++ b/admin-dev/themes/template/tax_rules/list_action_edit.tpl @@ -0,0 +1,26 @@ +{* +* 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 +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 9197 $ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*} +{$action} \ No newline at end of file diff --git a/admin-dev/themes/template/tax_rules/list_content.tpl b/admin-dev/themes/template/tax_rules/list_content.tpl new file mode 100644 index 000000000..d027983e7 --- /dev/null +++ b/admin-dev/themes/template/tax_rules/list_content.tpl @@ -0,0 +1,126 @@ +{* +* 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 +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 9608 $ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*} + +{foreach $list AS $index => $tr} + + + {if $bulk_actions} + {assign var=bulkActionPossible value=true} + {foreach $list_skip_actions as $key => $value} + {if in_array($tr.$identifier, $value) == true} + {assign var=bulkActionPossible value=false} + {/if} + {/foreach} + {if $bulkActionPossible == true} + + {/if} + {/if} + + {foreach $fields_display AS $key => $params} + {if isset($params.prefix)}{$params.prefix}{/if} + {else} + > + {/if} + {if isset($params.active)} + {$tr.$key} + {elseif isset($params.activeVisu)} + {if $tr.$key}{l s='Enabled'}{else}{l s='Disabled'}{/if} + {elseif isset($params.position)} + {if $order_by == 'position' && $order_way != 'DESC'} + + {l s='Down'} + + + + {l s='Up'} + + {else} + {$tr.$key.position + 1} + {/if} + {elseif isset($params.image)} + {$tr.$key} + {elseif (isset($params.icon))} + {$tr[$key]} + {elseif isset($params.price)} + {$tr.$key} + {elseif isset($params.float)} + {$tr.$key} + {elseif isset($params.type) && $params.type == 'date'} + {$tr.$key} + {elseif isset($params.type) && $params.type == 'datetime'} + {$tr.$key} + {elseif isset($params.callback)} + {$tr.$key} + {elseif isset($tr.$key)} + {if $key == 'behavior'} + {if $tr.$key == 0} + {l s='This tax only'} + {elseif $tr.$key == 1} + {l s='Compute with others'} + {elseif $tr.$key == 2} + {l s='One after another'} + {/if} + {elseif $key == 'rate'} + {$tr.$key|string_format:"%.2f"}% + {else} + {$tr.$key|escape:'htmlall':'UTF-8'} + {/if} + {else} + -- + {/if} + {if isset($params.suffix)}{$params.suffix}{/if} + + {/foreach} + + {if $shop_link_type} + {if isset($tr.shop_short_name)}{$tr.shop_short_name}{else}{$tr.shop_name}{/if} + {/if} + {if $has_actions} + + {foreach $actions AS $action} + {if isset($tr.$action)} + {$tr.$action} + {/if} + {/foreach} + + {/if} + +{/foreach} + \ No newline at end of file diff --git a/admin-dev/themes/template/tax_rules_group/form_new.tpl b/admin-dev/themes/template/tax_rules_group/form_new.tpl new file mode 100644 index 000000000..8a4ac6da2 --- /dev/null +++ b/admin-dev/themes/template/tax_rules_group/form_new.tpl @@ -0,0 +1,159 @@ +{* +* 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 +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 8971 $ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*} +{extends file="../helper/form/form.tpl"} + +{block name="label"} + {if $input.type == 'select' && $input.name == 'country[]'} + + {else} + + {/if} +{/block} + +{block name="script"} + +{/block} \ No newline at end of file diff --git a/classes/AdminController.php b/classes/AdminController.php index fb7f8c63b..8a6469214 100644 --- a/classes/AdminController.php +++ b/classes/AdminController.php @@ -1198,16 +1198,19 @@ class AdminControllerCore extends Controller $helper->shopLink = $this->shopLink; $helper->shopLinkType = $this->shopLinkType; $helper->identifier = $this->identifier; + $helper->tpl_folder = $this->tpl_folder; $helper->token = $this->token; $helper->specificConfirmDelete = $this->specificConfirmDelete; $helper->imageType = $this->imageType; $helper->no_add = isset($this->no_add) ? $this->no_add : false; + $helper->simple_header = isset($this->simple_header) ? $this->simple_header : false; $helper->no_link = $this->list_no_link; $helper->colorOnBackground = $this->colorOnBackground; + $helper->no_back = isset($this->no_back) ? $this->no_back : true; // For each action, try to add the corresponding skip elements list $helper->list_skip_actions = $this->list_skip_actions; - + } /** @@ -1234,6 +1237,7 @@ class AdminControllerCore extends Controller $helper->allow_employee_form_lang = $this->allow_employee_form_lang; $helper->fields_value = $this->getFieldsValue($this->object); $helper->toolbar_btn = $this->toolbar_btn; + $helper->no_back = isset($this->no_back) ? $this->no_back : false; if ($this->tabAccess['view']) { if (Tools::getValue('back')) diff --git a/classes/HelperList.php b/classes/HelperList.php index 83f6c0b72..6bd35deef 100644 --- a/classes/HelperList.php +++ b/classes/HelperList.php @@ -55,6 +55,9 @@ class HelperListCore extends Helper protected $deleted = 0; + /** @var string Folder of controller */ + public $tpl_folder; + /** @var array $cache_lang use to cache texts in current language */ public static $cache_lang = array(); @@ -109,6 +112,12 @@ class HelperListCore extends Helper /** @var boolean ask for simple header : no filters, no paginations and no sorting */ public $simple_header = false; + /** + * @var bool + * Usage : Set the value to false if you want to simply display the back button + */ + public $no_back = true; + /** * Return an html list given the data to fill it up * @@ -388,10 +397,16 @@ class HelperListCore extends Helper $this->context->smarty->assign(array( 'href' => $this->currentIndex.'&'.$this->identifier.'='.$id.'&update'.$this->table.'&token='.($token != null ? $token : $this->token), 'action' => self::$cache_lang['Edit'], + 'id' => (int)$id )); - return $this->context->smarty->fetch(_PS_ADMIN_DIR_.'/themes/template/helper/list/list_action_edit.tpl'); + if (file_exists($this->context->smarty->template_dir[0].'/'.$this->tpl_folder.'list_action_edit.tpl')) + $tpl = $this->context->smarty->template_dir[0].'/'.$this->tpl_folder.'list_action_edit.tpl'; + else + $tpl = $this->context->smarty->template_dir[0].'/helper/list/list_action_edit.tpl'; + return $this->context->smarty->fetch($tpl); + } /** @@ -540,7 +555,9 @@ class HelperListCore extends Helper 'table_dnd' => isset($table_dnd) ? $table_dnd : null, 'name' => isset($name) ? $name : null, 'name_id' => isset($name_id) ? $name_id : null, - 'toolbar' => $this->toolbar + 'toolbar' => $this->toolbar, + 'back' => Tools::getValue('back'), + 'no_back' => $this->no_back )); return $this->context->smarty->fetch(_PS_ADMIN_DIR_.'/themes/template/'.$this->header_tpl); diff --git a/classes/tax/TaxRule.php b/classes/tax/TaxRule.php index 968c83199..32982e135 100644 --- a/classes/tax/TaxRule.php +++ b/classes/tax/TaxRule.php @@ -51,17 +51,17 @@ class TaxRuleCore extends ObjectModel public function getFields() { - $this->validateFields(); - $fields['id_tax_rules_group'] = (int)$this->id_tax_rules_group; - $fields['id_country'] = (int)$this->id_country; - $fields['id_state'] = (int)$this->id_state; - $fields['zipcode_from'] = (int)$this->zipcode_from; - $fields['zipcode_to'] = (int)$this->zipcode_to; - $fields['behavior'] = (int)$this->behavior; - $fields['id_tax'] = (int)$this->id_tax; - $fields['description'] = $this->description; + $this->validateFields(); + $fields['id_tax_rules_group'] = (int)$this->id_tax_rules_group; + $fields['id_country'] = (int)$this->id_country; + $fields['id_state'] = (int)$this->id_state; + $fields['zipcode_from'] = (int)$this->zipcode_from; + $fields['zipcode_to'] = (int)$this->zipcode_to; + $fields['behavior'] = (int)$this->behavior; + $fields['id_tax'] = (int)$this->id_tax; + $fields['description'] = $this->description; - return $fields; + return $fields; } public static function deleteByGroupId($id_group) diff --git a/classes/tax/TaxRulesGroup.php b/classes/tax/TaxRulesGroup.php index 25a3718ed..f0db4eb84 100644 --- a/classes/tax/TaxRulesGroup.php +++ b/classes/tax/TaxRulesGroup.php @@ -31,14 +31,14 @@ class TaxRulesGroupCore extends ObjectModel public $name; /** @var bool active state */ - public $active; + public $active; - protected $fieldsRequired = array('name'); - protected $fieldsSize = array('name' => 64); - protected $fieldsValidate = array('name' => 'isGenericName'); + protected $fieldsRequired = array('name'); + protected $fieldsSize = array('name' => 64); + protected $fieldsValidate = array('name' => 'isGenericName'); - protected $table = 'tax_rules_group'; - protected $identifier = 'id_tax_rules_group'; + protected $table = 'tax_rules_group'; + protected $identifier = 'id_tax_rules_group'; protected static $_taxes = array(); @@ -46,7 +46,7 @@ class TaxRulesGroupCore extends ObjectModel { $this->validateFields(); $fields['name'] = ($this->name); - $fields['active'] = (int)($this->active); + $fields['active'] = (int)$this->active; return $fields; } @@ -85,7 +85,7 @@ class TaxRulesGroupCore extends ObjectModel ); $res = array(); - foreach ($rows AS $row) + foreach ($rows as $row) $res[$row['id_tax_rules_group']] = $row['rate']; return $res; @@ -113,7 +113,7 @@ class TaxRulesGroupCore extends ObjectModel { Tools::displayAsDeprecated(); $rate = 0; - foreach (TaxRulesGroup::getTaxes($id_tax_rules_group, $id_country, $id_state, $zipcode) AS $tax) + foreach (TaxRulesGroup::getTaxes($id_tax_rules_group, $id_country, $id_state, $zipcode) as $tax) $rate += (float)$tax->rate; return $rate; diff --git a/controllers/admin/AdminTaxRulesGroupController.php b/controllers/admin/AdminTaxRulesGroupController.php new file mode 100644 index 000000000..a74662c5c --- /dev/null +++ b/controllers/admin/AdminTaxRulesGroupController.php @@ -0,0 +1,428 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 8971 $ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +class AdminTaxRulesGroupControllerCore extends AdminController +{ + public $tax_rule; + public $selected_countries = array(); + public $selected_states = array(); + public $_errors_tax_rule; + + public function __construct() + { + $this->table = 'tax_rules_group'; + $this->className = 'TaxRulesGroup'; + $this->lang = false; + + $this->context = Context::getContext(); + + $this->fieldsDisplay = array( + 'id_tax_rules_group' => array( + 'title' => $this->l('ID'), + 'width' => 25 + ), + 'name' => array( + 'title' => $this->l('Name'), + 'width' => 140 + ), + 'active' => array( + 'title' => $this->l('Enabled'), + 'width' => 25, + 'active' => 'status', + 'type' => 'bool', + 'orderby' => false + ) + ); + + parent::__construct(); + } + + public function initList() + { + $this->addRowAction('edit'); + $this->addRowAction('delete'); + + $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'))); + + return parent::initList(); + } + + public function initRulesList($id_group) + { + $this->table = 'tax_rule'; + $this->identifier = 'id_tax_rule'; + $this->lang = false; + $this->simple_header = true; + $this->toolbar_btn = null; + $this->no_back = false; + $this->list_no_link = true; + + $this->fieldsDisplay = array( + 'id_tax_rule' => array( + 'title' => $this->l('ID'), + 'width' => 25 + ), + 'country_name' => array( + 'title' => $this->l('Country'), + 'width' => 140 + ), + 'state_name' => array( + 'title' => $this->l('State'), + 'width' => 140 + ), + 'zipcode' => array( + 'title' => $this->l('ZipCodes'), + 'width' => 25, + ), + 'behavior' => array( + 'title' => $this->l('Behavior'), + 'width' => 25, + ), + 'rate' => array( + 'title' => $this->l('Tax'), + 'width' => 25, + ), + 'description' => array( + 'title' => $this->l('Description'), + 'width' => 25, + ) + ); + + $this->addRowAction('edit'); + $this->addRowAction('delete'); + + $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'))); + + $this->_select = ' + c.`name` AS country_name, + s.`name` AS state_name, + CONCAT_WS(" - ", a.`zipcode_from`, a.`zipcode_to`) AS zipcode, + t.rate'; + + $this->_join = ' + LEFT JOIN `'._DB_PREFIX_.'country_lang` c + ON (a.`id_country` = c.`id_country` AND id_lang = '.(int)$this->context->language->id.') + LEFT JOIN `'._DB_PREFIX_.'state` s + ON (a.`id_state` = s.`id_state`) + LEFT JOIN `'._DB_PREFIX_.'tax` t + ON (a.`id_tax` = t.`id_tax`)'; + $this->_where = 'AND `id_tax_rules_group` = '.(int)$id_group; + + return parent::initList(); + } + + public function initForm() + { + $this->fields_form = array( + 'legend' => array( + 'title' => $this->l('Tax Rules'), + 'image' => '../img/admin/dollar.gif' + ), + 'input' => array( + array( + 'type' => 'text', + 'label' => $this->l('Name:'), + 'name' => 'name', + 'size' => 33, + 'required' => true, + 'hint' => $this->l('Invalid characters:').' <>;=#{}' + ), + array( + 'type' => 'radio', + 'label' => $this->l('Enable:'), + 'name' => 'active', + 'required' => false, + 'class' => 't', + 'is_bool' => true, + 'values' => array( + array( + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->l('Enabled') + ), + array( + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->l('Disabled') + ) + ) + ) + ), + 'submit' => array( + 'title' => $this->l('Save and stay'), + 'class' => 'button', + 'stay' => true + ) + ); + + if (!($obj = $this->loadObject(true))) + return; + if (!isset($obj->id)) + { + $this->no_back = false; + $content = parent::initForm(); + } + else + { + $this->no_back = true; + $this->toolbar_btn['new'] = array( + 'href' => '#', + 'desc' => $this->l('Add new tax rule') + ); + $content = parent::initForm(); + $content .= $this->initRuleForm(); + + // We change the variable $ tpl_folder to avoid the overhead calling the file in list_action_edit.tpl in intList (); + $this->tpl_folder = 'tax_rules/'; + + $content .= $this->initRulesList((int)$obj->id); + } + return $content; + } + + public function initRuleForm() + { + $this->fields_form = array( + 'legend' => array( + 'title' => $this->l('New tax rule'), + 'image' => '../img/admin/dollar.gif' + ), + 'input' => array( + array( + 'type' => 'select', + 'label' => $this->l('Country:'), + 'name' => 'country[]', + 'id' => 'country', + 'multiple' => true, + 'size' => 15, + 'options' => array( + 'query' => Country::getCountries((int)$this->context->language->id), + 'id' => 'id_country', + 'name' => 'name', + 'default' => array( + 'value' => 0, + 'label' => $this->l('All') + ) + ) + ), + array( + 'type' => 'select', + 'label' => $this->l('State:'), + 'name' => 'states[]', + 'id' => 'states', + 'multiple' => true, + 'size' => 5, + 'options' => array( + 'query' => array(), + 'id' => 'id_state', + 'name' => 'name', + 'default' => array( + 'value' => 0, + 'label' => $this->l('All') + ) + ) + ), + array( + 'type' => 'hidden', + 'name' => 'action' + ), + array( + 'type' => 'hidden', + 'name' => 'id_tax_rules_group' + ), + array( + 'type' => 'text', + 'label' => $this->l('ZipCode range:'), + 'name' => 'zipcode', + 'required' => false, + 'hint' => $this->l('You can define a range (eg: 75000-75015) or a simple zipcode') + ), + array( + 'type' => 'select', + 'label' => $this->l('Behavior:'), + 'name' => 'behavior', + 'required' => false, + 'options' => array( + 'query' => array( + array( + 'id' => 0, + 'name' => $this->l('This tax only') + ), + array( + 'id' => 1, + 'name' => $this->l('Combine') + ), + array( + 'id' => 2, + 'name' => $this->l('One After Another') + ) + ), + 'id' => 'id', + 'name' => 'name' + ), + 'hint' => array( + $this->l('Define the behavior if an address matches multiple rules:'), + ''.$this->l('This Tax Only:').' '.$this->l('Will apply only this tax'), + ''.$this->l('Combine:').' '.$this->l('Combine taxes (eg: 10% + 5% => 15%)'), + ''.$this->l('One After Another:').' '.$this->l('Apply taxes one after another (eg: 100€ + 10% => 110€ + 5% => 115.5€)') + ) + ), + array( + 'type' => 'select', + 'label' => $this->l('Tax:'), + 'name' => 'id_tax', + 'required' => false, + 'options' => array( + 'query' => Tax::getTaxes((int)$this->context->language->id), + 'id' => 'id_tax', + 'name' => 'name', + 'default' => array( + 'value' => 'name', + 'label' => $this->l('No Tax') + ) + ), + 'p' => $this->l('(Total tax:').'9%)' + ), + array( + 'type' => 'text', + 'label' => $this->l('Description:'), + 'name' => 'description', + 'size' => 40, + ) + ), + 'submit' => array( + 'title' => $this->l('Save and stay'), + 'class' => 'button', + 'stay' => true + ) + ); + + if (!($obj = $this->loadObject(true))) + return; + + $this->fields_value = array( + 'action' => 'create_rule', + 'id_tax_rules_group' => $obj->id, + 'id_tax_rule' => '' + ); + + $this->getlanguages(); + $helper = new HelperForm(); + + // Check if form template has been overriden + if (file_exists($this->context->smarty->template_dir[0].'/'.$this->tpl_folder.'form_new.tpl')) + $helper->tpl = $this->tpl_folder.'form_new.tpl'; + + $helper->currentIndex = self::$currentIndex; + $helper->token = $this->token; + $helper->table = 'tax_rule'; + $helper->identifier = 'id_tax_rule'; + $helper->id = $obj->id; + $helper->languages = $this->_languages; + $helper->default_form_language = $this->default_form_language; + $helper->allow_employee_form_lang = $this->allow_employee_form_lang; + $helper->fields_value = $this->getFieldsValue($this->object); + $helper->toolbar_btn = null; + $helper->submit_action = 'create_rule'; + $helper->no_back = true; + + return $helper->generateForm($this->fields_form); + } + + public function postProcess() + { + if (Tools::isSubmit('deletetax_rule')) + { + $id_rule = (int)Tools::getValue('id_tax_rule'); + $tax_rule = new TaxRule($id_rule); + + if (Validate::isLoadedObject($tax_rule)) + { + $tax_rule->delete(); + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$tax_rule->id_tax_rules_group.'&conf=4&update'.$this->table.'&token='.$this->token); + } + } + else if (Tools::getValue('action') == 'create_rule') + { + $zipcode = Tools::getValue('zipcode'); + $id_rule = (int)Tools::getValue('id_tax_rule'); + + $this->selected_countries = Tools::getValue('country'); + $this->selected_states = Tools::getValue('states'); + + if (empty($this->selected_states) || count($this->selected_states) == 0) + $this->selected_states = array(0); + + foreach ($this->selected_countries as $id_country) + { + foreach ($this->selected_states as $id_state) + { + $tr = new TaxRule(); + + // update or creation? + if (isset($id_rule)) + $tr->id = $id_rule; + + $tr->id_tax = (int)Tools::getValue('id_tax'); + $tr->id_tax_rules_group = (int)Tools::getValue('id_tax_rules_group'); + $tr->id_country = (int)$id_country; + $tr->id_state = (int)$id_state; + list($tr->zipcode_from, $tr->zipcode_to) = $tr->breakDownZipCode($zipcode); + $tr->behavior = (int)Tools::getValue('behavior'); + $tr->description = Tools::getValue('description'); + $this->tax_rule = $tr; + $_POST['id_state'] = $tr->id_state; + $this->_errors_tax_rule = $this->validateTaxRule($tr); + if (count($this->_errors_tax_rule) == 0) + { + + if (!$tr->save()) + $this->_errors[] = Tools::displayError('An error has occured: Can\'t save the current tax rule'); + } else + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$tr->id_tax_rules_group.'&conf=4&update'.$this->table.'&token='.$this->token); + } + } + + if (count($this->_errors_tax_rule) == 0) + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$tr->id_tax_rules_group.'&conf=4&update'.$this->table.'&token='.$this->token); + + } else + parent::postProcess(); + } + + /** + * check if the tax rule could be added in the database + * @param TaxRule $tr + */ + protected function validateTaxRule(TaxRule $tr) + { + // TODO: check if the rule already exists + return $tr->validateController(); + } +} + +