/** * Save the updated tax settings. */ public function saveTaxSettingsAction() { $hasErrors = false; $stringSettings = array( 'taxLabel' ); foreach($stringSettings as $key => $setting) { if(empty($_POST[$setting])) { flashMessage(getLang('InvalidTaxSetting'.ucfirst($setting)), MSG_ERROR); $hasErrors = true; } } $enumSettings = array( 'taxEnteredWithPrices' => array( TAX_PRICES_ENTERED_INCLUSIVE, TAX_PRICES_ENTERED_EXCLUSIVE ), 'taxCalculationBasedOn' => array( TAX_BASED_ON_BILLING_ADDRESS, TAX_BASED_ON_SHIPPING_ADDRESS, TAX_BASED_ON_STORE_ADDRESS ), 'taxDefaultTaxDisplayCatalog' => array( TAX_PRICES_DISPLAY_INCLUSIVE, TAX_PRICES_DISPLAY_EXCLUSIVE, TAX_PRICES_DISPLAY_BOTH ), 'taxDefaultTaxDisplayProducts' => array( TAX_PRICES_DISPLAY_INCLUSIVE, TAX_PRICES_DISPLAY_EXCLUSIVE, TAX_PRICES_DISPLAY_BOTH ), 'taxDefaultTaxDisplayCart' => array( TAX_PRICES_DISPLAY_INCLUSIVE, TAX_PRICES_DISPLAY_EXCLUSIVE, ), 'taxDefaultTaxDisplayOrders' => array( TAX_PRICES_DISPLAY_INCLUSIVE, TAX_PRICES_DISPLAY_EXCLUSIVE, ), 'taxChargesOnOrdersBreakdown' => array( TAX_BREAKDOWN_SUMMARY, TAX_BREAKDOWN_RATE, ), 'taxChargesInCartBreakdown' => array( TAX_BREAKDOWN_SUMMARY, TAX_BREAKDOWN_RATE, ), ); foreach($enumSettings as $setting => $options) { if(!isset($_POST[$setting]) || !in_array($_POST[$setting], $options)) { flashMessage(getLang('InvalidTaxSetting'.ucfirst($setting)), MSG_ERROR); $hasErrors = true; } } if(empty($_POST['taxDefaultCountry']) || !getCountryById($_POST['taxDefaultCountry'])) { flashMessage(getLang('InvalidTaxSettingTaxDefaultCountry'), MSG_ERROR); $hasErrors = true; } if(!empty($_POST['taxDefaultState']) && !getStateById($_POST['taxDefaultState'])) { flashMessage(getLang('InvalidTaxSettingTaxDefaultState'), MSG_ERROR); $hasErrors = true; } if($hasErrors) { $this->handleToDo('viewTaxSettings'); return; } $allSettings = array_merge($stringSettings, array_keys($enumSettings)); $allSettings[] = 'taxDefaultCountry'; $allSettings[] = 'taxDefaultState'; $allSettings[] = 'taxDefaultZipCode'; $allSettings[] = 'taxShippingTaxClass'; $allSettings[] = 'taxGiftWrappingTaxClass'; foreach($allSettings as $setting) { if(isset($_POST[$setting])) { $GLOBALS['ISC_NEW_CFG'][$setting] = $_POST[$setting]; } } // Determine if the product tax pricing needs to be rebuilt based // on which tax settings have changed. $rebuildSettings = array( 'taxEnteredWithPrices', 'taxDefaultCountry', 'taxDefaultState', 'taxDefaultZipCode', ); $requiresPriceRebuild = false; foreach($rebuildSettings as $setting) { if(isset($GLOBALS['ISC_NEW_CFG']) && getConfig($setting) != $GLOBALS['ISC_NEW_CFG'][$setting]) { $requiresPriceRebuild = true; break; } } // Mark it as requiring a price rebuild if($requiresPriceRebuild) { $this->markProductPricingRequiresRebuild(); } $messages = array(); if(!getClass('ISC_ADMIN_SETTINGS')->commitSettings($messages)) { flashMessage(getLang('TaxSettingsNotSaved'), MSG_ERROR); $this->viewTaxSettingsAction(); return; } // Rebuild the default customer groups/tax cache $GLOBALS['ISC_CLASS_DATA_STORE']->UpdateDefaultTaxZones(); // We've just configured tax - mark it as so. if(!in_array('taxSettings', getConfig('GettingStartedCompleted'))) { getClass('ISC_ADMIN_ENGINE')->markGettingStartedComplete('taxSettings'); } $this->log->logAdminAction(); flashMessage(getLang('TaxSettingsSaved'), MSG_SUCCESS, 'index.php?ToDo=viewTaxSettings' ); }
public function convertOldTaxRatesToNewTaxRates() { // Already done this. Don't do it again. if($this->columnExists('[|PREFIX|]tax_rates', 'tax_zone_id')) { return true; } $query = "TRUNCATE [|PREFIX|]tax_rates_new"; if(!$GLOBALS['ISC_CLASS_DB']->query($query)) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } $query = " SELECT * FROM [|PREFIX|]tax_rates "; $result = $GLOBALS['ISC_CLASS_DB']->query($query); if(!$result) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } while($rate = $GLOBALS['ISC_CLASS_DB']->fetch($result)) { $states = explode(',', trim($rate['taxratestates'], ',')); if(!$rate['taxratecountry']) { // All countries - this is the default zone $taxZoneId = 1; } else { if(in_array(0, $states) || empty($states)) { $type = 'country'; // All states in country } else { $type = 'state'; } $newTaxZone = array( 'name' => $rate['taxratename'], 'type' => $type, 'enabled' => $rate['taxratestatus'], ); $taxZoneId = $GLOBALS['ISC_CLASS_DB']->insertQuery('tax_zones', $newTaxZone); if(!$taxZoneId) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } // Insert locations if($type == 'country') { $newLocation = array( 'tax_zone_id' => $taxZoneId, 'type' => 'country', 'value_id' => $rate['taxratecountry'], 'value' => getCountryById($rate['taxratecountry']), ); if(!$GLOBALS['ISC_CLASS_DB']->insertQuery('tax_zone_locations', $newLocation)) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } } else if($type == 'state') { foreach($states as $state) { $newLocation = array( 'tax_zone_id' => $taxZoneId, 'type' => 'state', 'value_id' => $state, 'value' => getStateById($state), 'country_id' => $rate['taxratecountry'] ); if(!$GLOBALS['ISC_CLASS_DB']->insertQuery('tax_zone_locations', $newLocation)) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } } } } $newTaxRate = array( 'tax_zone_id' => $taxZoneId, 'name' => $rate['taxratename'], 'default_rate' => $rate['taxratepercent'], ); $taxRateId = $GLOBALS['ISC_CLASS_DB']->insertQuery('tax_rates_new', $newTaxRate); if(!$taxRateId) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } // Insert the tax class rates $shippingRate = 0; if($rate['taxratebasedon'] == 'subtotal_and_shipping') { $shippingRate = $rate['taxratepercent']; } // Non-taxable $newTaxClassRate = array( 'tax_rate_id' => $taxRateId, 'tax_class_id' => 1, 'rate' => 0 ); if(!$GLOBALS['ISC_CLASS_DB']->insertQuery('tax_rate_class_rates', $newTaxClassRate)) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } // Shipping $newTaxClassRate = array( 'tax_rate_id' => $taxRateId, 'tax_class_id' => 2, 'rate' => $shippingRate ); if(!$GLOBALS['ISC_CLASS_DB']->insertQuery('tax_rate_class_rates', $newTaxClassRate)) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } // Wrapping $newTaxClassRate = array( 'tax_rate_id' => $taxRateId, 'tax_class_id' => 3, 'rate' => $rate['taxratepercent'] ); if(!$GLOBALS['ISC_CLASS_DB']->insertQuery('tax_rate_class_rates', $newTaxClassRate)) { $this->setError($GLOBALS['ISC_CLASS_DB']->getErrorMsg()); return false; } } return true; }