* @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 7300 $ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class AdminTaxRulesGroup extends AdminTab { public $tax_rule; public $_errors_tax_rule; public function __construct() { global $cookie; $this->table = 'tax_rules_group'; $this->className = 'TaxRulesGroup'; $this->edit = true; $this->delete = true; $this->ajax = false; $this->fieldsDisplay = array( 'id_tax_rules_group' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), 'name' => array('title' => $this->l('Name'), 'width' => 140), 'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false)); parent::__construct(); } /** * retrieve a tax rule via ajax * @return tax rule in json format */ public function ajaxProcessGetTaxRule() { $id_rule = (int)Tools::getValue('id_tax_rule'); if ($tax_rule = TaxRule::retrieveById($id_rule)) die(Tools::jsonEncode($tax_rule)); else die('error'); } public function ajaxPreProcess() {} public function postProcess() { $action = Tools::getValue('action'); if ($action == 'delete_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 ($action == 'create_rule') { $zipcode = Tools::getValue('zipcode'); $id_rule = (int)Tools::getValue('id_tax_rule'); $tr = new TaxRule(); // update or creation? if (isset($id_rule)) $tr->id = $id_rule; $tr->id_tax = (int)Tools::getValue('tax'); $tr->id_tax_rules_group = (int)Tools::getValue('id_tax_rules_group'); $tr->id_country = (int)Tools::getValue('country'); $tr->id_state = (int)Tools::getValue('states'); list($tr->zipcode_from, $tr->zipcode_to) = $tr->breakDownZipCode($zipcode); $tr->behavior = (int)Tools::getValue('behavior'); $tr->description = Tools::getValue('description'); $this->_errors_tax_rule = $this->validateTaxRule($tr); if (sizeof($this->_errors_tax_rule) == 0) { if (!$tr->save()) die('error'); } $this->tax_rule = $tr; 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(); } protected function displayJS() { global $cookie; $javascript = << function populateStates(id_country, id_state) { $.ajax({ url: "ajax.php", cache: false, data: "ajaxStates=1&id_country="+id_country+"&id_state="+id_state, success: function(html){ if (html == "false") { $("#state-label").hide(); $("#state-select").hide(); } else { $("#state-label").show(); $("#state-select").show(); $("#states").html(html); } } }); } function loadTaxRule(id_tax_rule) { $.ajax({ url: "ajax-tab.php", cache: false, dataType: "json", data: "action=get_tax_rule&id_tax_rule="+id_tax_rule+"&tab=AdminTaxRulesGroup&token=$this->token", success: function(data){ $('#rule_form').show(); $('#id_tax_rule').val(data.id_tax_rule); $('#country').val(data.id_country); $('#state').val(data.id_state); zipcode = 0; if (data.zipcode_from != 0) { zipcode = data.zipcode_from; if (data.zipcode_to != 0) zipcode = zipcode +"-"+data.zipcode_to } $('#zipcode').val(zipcode); $('#behavior').val(data.behavior); $('#tax').val(data.id_tax); $('#description').val(data.description); populateStates(data.id_country, data.id_state); }, error: function(data) { } }); } function initForm() { $('#id_tax_rule').val(''); $('#country').val(0); $('#state').val(0); $('#zipcode').val(0); $('#behavior').val(0); $('#tax').val(0); $('#description').val(''); populateStates(0,0); } EOT; echo $javascript; } public function displayTaxRulesErrors() { if ($nbErrors = count($this->_errors_tax_rule) AND $this->_includeContainer) { echo '
X'; if (count($this->_errors_tax_rule) == 1) echo $this->_errors_tax_rule[0]; else { echo $nbErrors.' '.$this->l('errors').'
    '; foreach ($this->_errors_tax_rule AS $error) echo '
  1. '.$error.'
  2. '; echo '
'; } echo '
'; } } public function display() { if ((Tools::getValue('submitAdd'.$this->table) AND sizeof($this->_errors_tax_rule)) OR isset($_GET['add'.$this->table])) { if ($this->tabAccess['add'] === '1') $this->displayForm(); else echo $this->l('You do not have permission to add here'); } else parent::display(); } /** * displays the tax rules group form */ protected function displayRuleGroupForm() { global $cookie, $currentIndex; parent::displayForm(); if (!($obj = $this->loadObject(true))) return; // if the user come from the product page $param_product = Tools::getValue('id_product') ? '&id_product='.Tools::getValue('id_product') : ''; echo '
'.($obj->id ? '' : '').'
'.$this->l('Tax Rules').' '; echo '
* '.$this->l('Invalid characters:').' <>;=#{} 

'; echo '
getFieldValue($obj, 'active') ? 'checked="checked" ' : '').'/> getFieldValue($obj, 'active') ? 'checked="checked" ' : '').'/>
'; } /** * Display the tax rule form * * @param int $id_rule_group */ protected function displayRuleForm($id_rule_group) { global $cookie, $currentIndex; if (Validate::isLoadedObject($this->tax_rule)) die(Tools::displayError('Unable to load the tax rule!')); $country_select = Helper::selectInput(Country::getCountries((int)$cookie->id_lang), array('id' => 'country', 'name' => 'country', 'onclick' => 'populateStates($(this).val(), \'\')'), array('key' => 'id_country', 'value' => 'name')); $tax_select = Helper::selectInput(Tax::getTaxes((int)$cookie->id_lang), array('id' => 'tax', 'name' => 'tax'), array('key' => 'id_tax', 'value' => 'name', 'empty' => $this->l('No Tax'))); $behavior_select = Helper::selectInput(array(0 => $this->l('This tax only'), 1 => $this->l('Combine'), 2 => $this->l('One After Another') ), array('id' => 'behavior', 'name' => 'behavior')); echo ' '.$this->l('Add a new tax rule').'


'; } /** * display the list of rules * * @param int $id_rule_group */ protected function displayRulesList($id_rule_group) { echo ' '.$this->displayTaxRules((int)$id_rule_group).'
'.$this->l('Country').' '.$this->l('State').' '.$this->l('ZipCodes').' '.$this->l('Behavior').' '.$this->l('Tax').' '.$this->l('Description').' '.$this->l('Actions').'
'; } /** * display the tax rules list table body * * @param int $id_rule_group */ protected function displayTaxRules($id_rule_group) { global $currentIndex, $cookie; $html = ''; $tax_rules = TaxRule::getTaxRulesByGroupId((int)$cookie->id_lang, (int)$id_rule_group); if (sizeof($tax_rules) == 0) { $html .= ' '.$this->l('No rules defined').' '; } else { foreach ($tax_rules as $tax_rule) { // format fields for display $state_name = ($tax_rule['state_name'] == '' ? '*' : $tax_rule['state_name']); $zipcodes = '*'; if (isset($tax_rule['zipcode_from']) && $tax_rule['zipcode_from'] != 0) { $zipcodes = $tax_rule['zipcode_from']; if (isset($tax_rule['zipcode_to']) && $tax_rule['zipcode_to'] != 0 && $tax_rule['zipcode_to'] != $tax_rule['zipcode_from']) { $zipcodes .= '-'.$tax_rule['zipcode_to']; } } $tax = ((float)$tax_rule['rate'] == 0 ? '-' : (float)$tax_rule['rate'].'%'); $behavior = ($tax_rule['behavior'] == 0 ? $this->l('This tax only') : $this->l('Compute with others')); // render fields $html .= ' '.Tools::htmlentitiesUTF8($tax_rule['country_name']).' '.Tools::htmlentitiesUTF8($state_name).' '.Tools::htmlentitiesUTF8($zipcodes).' '.Tools::htmlentitiesUTF8($behavior).' '.Tools::htmlentitiesUTF8($tax).' '.Tools::htmlentitiesUTF8($tax_rule['description']).' '.$this->l('Edit').' '.$this->l('Delete').' '; } } return $html; } /** * @param boolean $firstCall */ public function displayForm($firstCall = true) { if (!($obj = $this->loadObject(true))) return; parent::displayForm(); $this->displayRuleGroupForm(); $this->displayJS(); // display tax rules only if the group has already been created if ($obj->id) { echo '
'; $this->displayTaxRulesErrors(); $this->displayRuleForm($obj->id); $this->displayRulesList($obj->id); } } }