* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ function generate_tax_rules() { $res = true; $taxes = Db::getInstance()->executeS('SELECT * from `' . _DB_PREFIX_ . 'tax` WHERE active = 1'); // if no tax found, nothing to do, return true if (!is_array($taxes)) { return true; } foreach ($taxes as $tax) { $id_tax = $tax['id_tax']; $row = [ 'active' => 1, 'id_tax_rules_group' => $id_tax, 'name' => 'Rule ' . $tax['rate'] . '%', ]; $res &= Db::getInstance()->insert('tax_rules_group', $row); $id_tax_rules_group = Db::getInstance()->Insert_ID(); $countries = Db::getInstance()->executeS( ' SELECT * FROM `' . _DB_PREFIX_ . 'country` c LEFT JOIN `' . _DB_PREFIX_ . 'zone` z ON (c.`id_zone` = z.`id_zone`) LEFT JOIN `' . _DB_PREFIX_ . 'tax_zone` tz ON (tz.`id_zone` = z.`id_zone`) WHERE `id_tax` = ' . (int) $id_tax ); if ($countries) { foreach ($countries as $country) { $res &= Db::getInstance()->execute('INSERT INTO `' . _DB_PREFIX_ . 'tax_rule` (`id_tax_rules_group`, `id_country`, `id_state`, `state_behavior`, `id_tax`) VALUES (' . $id_tax_rules_group . ', ' . (int) $country['id_country'] . ', 0, 0, ' . (int) $id_tax . ')'); } } $states = Db::getInstance()->executeS(' SELECT * FROM `' . _DB_PREFIX_ . 'states` s LEFT JOIN `' . _DB_PREFIX_ . 'tax_state` ts ON (ts.`id_state` = s.`id_state`) WHERE `id_tax` = ' . (int) $id_tax); if ($states) { foreach ($states as $state) { if (!in_array($state['tax_behavior'], [PS_PRODUCT_TAX, PS_STATE_TAX, PS_BOTH_TAX])) { $tax_behavior = PS_PRODUCT_TAX; } else { $tax_behavior = $state['tax_behavior']; } $res &= Db::getInstance()->execute(' INSERT INTO `' . _DB_PREFIX_ . 'tax_rule` (`id_tax_rules_group`, `id_country`, `id_state`, `state_behavior`, `id_tax`) VALUES ( ' . $id_tax_rules_group . ', ' . (int) $state['id_country'] . ', ' . (int) $state['id_state'] . ', ' . (int) $tax_behavior . ', ' . (int) $id_tax . ')'); } } $res &= Db::getInstance()->execute( ' UPDATE `' . _DB_PREFIX_ . 'product` SET `id_tax_rules_group` = ' . $id_tax_rules_group . ' WHERE `id_tax` = ' . (int) $id_tax ); $res &= Db::getInstance()->execute( ' UPDATE `' . _DB_PREFIX_ . 'carrier` SET `id_tax_rules_group` = ' . $id_tax_rules_group . ' WHERE `id_tax` = ' . (int) $id_tax ); $socolissimo_overcost_tax = Db::getInstance()->getValue('SELECT value FROM `' . _DB_PREFIX_ . 'configuration` WHERE name="SOCOLISSIMO_OVERCOST_TAX"'); if ($socolissimo_overcost_tax == $id_tax) { $res &= Db::getInstance()->getValue('UPDATE `' . _DB_PREFIX_ . 'configuration` set value="' . $id_tax_rules_group . '" WHERE name="SOCOLISSIMO_OVERCOST_TAX"'); } } return $res; }