if ( $count == 0 ) db_query("delete from ".TAX_RATES_ZONES_TABLE. " where classID=".(int)$classID." AND zoneID=".(int)$zoneID); else db_query( "update ".TAX_RATES_ZONES_TABLE. " set isGrouped=1 ". " where classID=".(int)$classID." AND zoneID=".(int)$zoneID); } } function taxGetZipRates( $classID, $countryID ) { $q = db_query( "select tax_zipID, classID, countryID, zip_template, value from ".TAX_ZIP_TABLE. " where classID=".(int)$classID." AND countryID=".(int)$countryID); $data = array(); while( $row=db_fetch_row($q) ) $data[] = $row; return $data; } function taxAddZipRate( $classID, $countryID, $zip_template, $rate ) { $rate = (float)$rate; db_query( "insert into ".TAX_ZIP_TABLE. " ( classID, countryID, zip_template, value ) ". " values( ".(int)$classID.", ".(int)$countryID.", '".xEscSQL($zip_template)."', ".$rate." ) "); } function taxUpdateZipRate( $tax_zipID, $zip_template, $rate ) { $rate = (float)$rate; db_query( "update ".TAX_ZIP_TABLE. " set ". " zip_template='".xEscSQL($zip_template)."', ". " value=".$rate. " where tax_zipID=".(int)$tax_zipID); } function taxDeleteZipRate( $tax_zipID ) { db_query( "delete from ".TAX_ZIP_TABLE. " where tax_zipID=".(int)$tax_zipID); } function _testTemplateZip( $zip_template, $zip ) { if ( strlen($zip_template)==strlen($zip) ) { $testResult = true; $starCounter=0; for( $i=0; $i $res, "rate" => $row["value"] ); } if ( count($testZipTemplateArray) == 0 ) return null; // define "starCounter" minimum $starCounterMinIndex = 0; for( $i=0; $i < count($testZipTemplateArray); $i++ ) if ( $testZipTemplateArray[$starCounterMinIndex]["starCounter"] > $testZipTemplateArray[$i]["starCounter"] ) $starCounterMinIndex = $i; return (float)$testZipTemplateArray[$starCounterMinIndex]["rate"]; } // ***************************************************************************** // Purpose calculate tax by addresses and productID // Inputs $productID - product ID // $shippingAddressID - shipping address ID // $billingAddress - billing address ID // Remarks // Returns function taxCalculateTax( $productID, $shippingAddressID, $billingAddressID ) { $shippingAddress = regGetAddress( $shippingAddressID ); $billingAddress = regGetAddress( $billingAddressID ); return taxCalculateTax2( $productID, $shippingAddress, $billingAddress ); } // ***************************************************************************** // Purpose calculate tax by addresses and productID // Inputs $productID - product ID // $shippingAddress - array of // "countryID" // "zoneID" // "zip" // $billingAddress - array of // "countryID" // "zoneID" // "zip" // Remarks // Returns function taxCalculateTax2( $productID, $shippingAddress, $billingAddress ) { $productID = (int) $productID; if ( trim($productID) == "" || $productID == null ) return 0; // get tax class $q = db_query("select classID from ".PRODUCTS_TABLE. " where productID=".(int)$productID); $row = db_fetch_row( $q ); $taxClassID = $row["classID"]; if ( $taxClassID == null ) return 0; return taxCalculateTaxByClass2( $taxClassID, $shippingAddress, $billingAddress ); } // ***************************************************************************** // Purpose // Inputs $taxClassID - tax class ID // $shippingAddress - array of // "countryID" // "zoneID" // "zip" // $billingAddress - array of // "countryID" // "zoneID" // "zip" // Remarks // Returns function taxCalculateTaxByClass( $taxClassID, $shippingAddressID, $billingAddressID ) { $shippingAddress = regGetAddress( $shippingAddressID ); $billingAddress = regGetAddress( $billingAddressID ); return taxCalculateTaxByClass2( $taxClassID, $shippingAddress, $billingAddress ); } // ***************************************************************************** // Purpose // Inputs $taxClassID - tax class ID // $shippingAddress - array of // "countryID" // "zoneID" // "zip" // $billingAddress - array of // "countryID" // "zoneID" // "zip" // Remarks // Returns function taxCalculateTaxByClass2( $taxClassID, $shippingAddress, $billingAddress ) { $class = taxGetTaxClassById( $taxClassID ); // get address if ( $class["address_type"] == 0 ) { $address = $shippingAddress; } else { $address = $billingAddress; } if ( $address == null ) return 0; // get tax rate $address["countryID"] = (int) $address["countryID"]; $q = db_query( "select value, isByZone from ".TAX_RATES_TABLE. " where classID=".(int)$taxClassID." AND countryID=".(int)$address["countryID"] ); if ( $row=db_fetch_row($q) ) { $value = $row["value"]; $isByZone = $row["isByZone"]; } else { $q = db_query( "select value, isByZone from ".TAX_RATES_TABLE. " where isGrouped=1 AND classID=".(int)$taxClassID); if ( $row=db_fetch_row($q) ) { $value = $row["value"]; $isByZone = $row["isByZone"]; } else return 0; } if ( $isByZone == 0 ) return $value; else { $res = _getBestZipRate( $taxClassID, $address["countryID"], $address["zip"] ); if ( !is_null($res) ) return $res; else { if ( is_null($address["zoneID"]) || trim($address["zoneID"]) == "" ) return 0; $q = db_query( "select value from ".TAX_RATES_ZONES_TABLE. " where classID=".(int)$taxClassID." AND zoneID=".(int)$address["zoneID"] ); if ( ($row=db_fetch_row($q)) ) return $row["value"]; else { $q = db_query("select value from ".TAX_RATES_ZONES_TABLE. " where classID=".(int)$taxClassID." AND isGrouped=1" ); if ( ($row=db_fetch_row($q)) ) return $row["value"]; else return 0; } } } } ?>