Вход Регистрация
Файл: core/functions/tax_function.php
Строк: 497
<?php
#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright (c) by ADGroup
# http://shopcms.ru
#####################################

        // *****************************************************************************
        // Purpose        get tax class by class ID
        // Inputs   $classID
        // Remarks
        // Returns
        //                                "classID"                        tax class ID
        //                                "name"                                tax class name
        //                                "address_type"
        //                                                                        0 - shipping address
        //                                                                        1 - billing address
        
function taxGetTaxClassById$classID )
        {
                
$q db_query("select classID, name, address_type from ".TAX_CLASSES_TABLE.
                        
" where classID=".(int)$classID);
                if ( 
$row db_fetch_row($q) ) return $row;
        }


        function 
taxGetTaxClasses()
        {
                
$q db_query("select classID, name, address_type from ".TAX_CLASSES_TABLE );
                
$res = array();
                while( 
$row db_fetch_row($q) ) $res[]=$row;
                return 
$res;
        }


        function 
taxAddTaxClass$name$address_type )
        {
                if ( 
trim($name) == "" ) return;
                
db_query("insert into ".TAX_CLASSES_TABLE.
                        
"( name, address_type ) ".
                        
" values( '".xToText($name),"', ".(int)$address_type."  ) " );
        }

        function 
taxUpdateTaxClass$classID$name$address_type )
        {
                
db_query"update ".TAX_CLASSES_TABLE.
                        
" set name='".xToText($name)."', address_type=".(int)$address_type.
                        
" where classID=".(int)$classID);
        }

        function 
taxDeleteTaxClass$classID )
        {
                
db_query("update ".PRODUCTS_TABLE." set classID=NULL where classID=".(int)$classID);
                
db_query("delete from ".TAX_CLASSES_TABLE." where classID=".(int)$classID);
        }


        function 
taxGetRates$classID )
        {
                
$q=db_query("select classID, countryID, value, isByZone from ".
                                
TAX_RATES_TABLE." where classID=".(int)$classID." AND isGrouped=0" );
                
$res = array();
                while( 
$row=db_fetch_row($q) )
                {
                        
$q1 db_query("select country_name from ".COUNTRIES_TABLE.
                                
" where countryID=".(int)$row["countryID"] );
                        
$country db_fetch_row($q1);
                        
$row["country"] = $country["country_name"];
                        
$res[]=$row;
                }

                
$q=db_query("select classID, countryID, value, isByZone from ".
                                
TAX_RATES_TABLE." where classID=".(int)$classID." AND isGrouped=1" );
                if ( 
$row=db_fetch_row($q) )
                {
                        
$row["countryID"]        = 0;
                        
$row["isByZone"]        = 0;
                        
$res[]                         = $row;
                }
                return 
$res;
        }

        function 
taxGetCountriesByClassID_ToSetRate$classID )
        {
                
$res = array();
                
$q db_query("select countryID, country_name from ".COUNTRIES_TABLE.
                                
" order by country_name " );
                while( 
$country=db_fetch_row($q) )
                {
                        
$q1 db_query("select * from ".TAX_RATES_TABLE.
                                
" where countryID=".(int)$country["countryID"].
                                
" AND classID=".(int)$classID);
                        if ( !(
$row=db_fetch_row($q1)) )
                                
$res[] = $country;
                }
                return 
$res;
        }

        function 
taxAddRate$classID$countryID$isByZone$value )
        {
                if ( 
$countryID == )
                {
                        
$q db_query("select countryID from ".COUNTRIES_TABLE );
                        while( 
$country=db_fetch_row($q) )
                        {
                                
$q1 db_query("select * from ".TAX_RATES_TABLE.
                                        
" where countryID=".(int)$country["countryID"].
                                        
" AND classID=".(int)$classID);
                                 if ( !
$row=db_fetch_row($q1) )
                                {
                                        
db_query("insert into ".TAX_RATES_TABLE.
                                                
" ( classID, countryID, value, ".
                                                
"         isByZone, isGrouped ) ".
                                                
" values( ".(int)$classID.", ".(int)$country["countryID"].
                                                        
", ".(float)$value.", 0, 1 )" );
                                }
                        }
                }
                else
                        
db_query("insert into ".TAX_RATES_TABLE.
                                
" ( classID, countryID, value, isByZone, isGrouped ) ".
                                
" values( ".(int)$classID.", ".(int)$countryID.", ".(float)$value.", ".(int)$isByZone.", 0 )" );
        }

        function 
taxUpdateRate$classID$countryID$isByZone$value )
        {
                 if ( 
$countryID == )
                {
                        
db_query("update ".TAX_RATES_TABLE.
                                
" set isByZone=0, value=".(float)$value.
                                
" where classID=".(int)$classID." AND isGrouped=1" );
                }
                else
                {
                        
db_query("update ".TAX_RATES_TABLE.
                                
" set isByZone=".(int)$isByZone.", value=".(float)$value.
                                
" where classID=".(int)$classID." AND countryID=".(int)$countryID.
                                
" AND isGrouped=0" );
                }
        }

        function 
taxSetIsByZoneAttribute$classID$countryID$isByZone )
        {
                if ( 
$countryID != )
                {
                        
db_query"update ".TAX_RATES_TABLE.
                                          
" set isByZone=".(int)$isByZone.
                                          
" where classID=".(int)$classID." AND countryID=".(int)$countryID);
                }
        }


        function 
_deleteRate$classID$countryID )
        {
                
$q db_query("select zoneID from ".ZONES_TABLE.
                                
" where countryID=".(int)$countryID);
                while( 
$zone=db_fetch_row($q) )
                        
db_query("delete from ".TAX_RATES_ZONES_TABLE.
                                
" where classID=".(int)$classID." AND zoneID=".(int)$zone["zoneID"]);
                
db_query("delete from ".TAX_ZIP_TABLE.
                                
" where classID=".(int)$classID." AND countryID=".(int)$countryID);
                
db_query("delete from ".TAX_RATES_TABLE.
                                
" where classID=".(int)$classID." AND countryID=".(int)$countryID);
        }


        function 
taxDeleteRate$classID$countryID )
        {
                
$res = array();
                if ( 
$countryID==)
                {
                        
$q=db_query("select countryID from ".TAX_RATES_TABLE.
                                
" where classID=".(int)$classID." AND isGrouped=1");
                        while(
$row=db_fetch_row($q))
                                
$res[] = $row["countryID"];
                }
                else
                        
$res[]=$countryID;

                
$q_count db_query("select count(*) from ".TAX_RATES_TABLE.
                                
" where classID=".(int)$classID." AND isGrouped=1");
                
$count db_fetch_row$q_count );
                
$count $count[0];

                if ( 
$count!=&& count($res)==)
                {
                        
db_query("update ".TAX_RATES_TABLE.
                                
" set isGrouped=1 ".
                                
" where classID=".(int)$classID." AND isGrouped=0 AND ".
                                                
"countryID=".(int)$res[0] );
                }
                else
                {
                        foreach( 
$res as $key => $val )
                                
_deleteRate($classID$val);
                }
        }


        function 
taxGetCountSetZone$classID$countryID )
        {
                
$res = array();
                
$zones = array();
                 
$q db_query("select zoneID, zone_name from ".ZONES_TABLE.
                                
" where countryID=".(int)$countryID);
                while( 
$row=db_fetch_row($q) ) $zones[] = $row;
                
$count 0;

                foreach( 
$zones as $zone )
                {
                        
$q1=db_query("select classID, zoneID, value from ".
                                
TAX_RATES_ZONES_TABLE.
                                
" where classID=".(int)$classID." AND zoneID=".(int)$zone["zoneID"] );
                        if ( 
$resItem=db_fetch_row($q1) ) $count ++;
                }
                return 
$count;
        }


        function 
taxGetCountZones$countryID )
        {
                
$q db_query("select count(*) from ".ZONES_TABLE.
                        
" where countryID=".(int)$countryID );
                
$row db_fetch_row($q);
                return 
$row[0];
        }


        function 
taxGetZoneRates$classID$countryID )
        {
                
$res = array();
                
$zones = array();
                 
$q db_query("select zoneID, zone_name from ".ZONES_TABLE.
                                
" where countryID=".(int)$countryID);
                while( 
$row=db_fetch_row($q) )
                        
$zones[] = $row;

                foreach( 
$zones as $zone )
                {
                        
$q1=db_query("select classID, zoneID, value from ".
                                
TAX_RATES_ZONES_TABLE.
                                
" where classID=".(int)$classID." AND zoneID=".(int)$zone["zoneID"].
                                
" AND isGrouped=0"  );
                        if ( 
$resItem=db_fetch_row($q1) )
                        {
                                
$resItem["zone_name"] = $zone["zone_name"];
                                
$resItem["countryID"] = $countryID;
                                
$res[] = $resItem;
                        }
                }


                
$q1=db_query("select classID, zoneID, value from ".
                        
TAX_RATES_ZONES_TABLE." where classID=".(int)$classID." AND isGrouped=1" );
                if ( 
$resItem=db_fetch_row($q1) )
                {
                        
$resItem["zone_name"]         = "";
                        
$resItem["zoneID"]                 = 0;
                        
$resItem["countryID"]        = $countryID;
                        
$res[] = $resItem;
                }

                return 
$res;
        }

        function 
taxGetZoneByClassIDCountryID_ToSetRate$classID$countryID )
        {
                
$res = array();
                
$q db_query("select zoneID, zone_name from ".ZONES_TABLE.
                                
" where countryID=".(int)$countryID);
                while( 
$zone=db_fetch_row($q) )
                {
                        
$q1 db_query("select * from ".TAX_RATES_ZONES_TABLE.
                                
" where zoneID=".(int)$zone["zoneID"].
                                
" AND classID=".(int)$classID);
                        if ( !(
$row=db_fetch_row($q1)) ) $res[] = $zone;
                }
                return 
$res;
        }

        function 
taxAddZoneRate$classID$countryID$zoneID$value )
        {
                if ( 
$zoneID == )
                {
                        
$q db_query("select zoneID, zone_name from ".ZONES_TABLE.
                                
" where countryID=".(int)$countryID);
                        while( 
$zone=db_fetch_row($q) )
                        {
                                
$q1 db_query("select * from ".TAX_RATES_ZONES_TABLE.
                                                
" where zoneID=".(int)$zone["zoneID"].
                                                
" AND classID=".(int)$classID);
                                if ( !(
$row=db_fetch_row($q1)) )
                                {
                                        
db_query("insert into ".TAX_RATES_ZONES_TABLE.
                                                 
"( classID, zoneID, value, isGrouped ) ".
                                                 
"values( ".(int)$classID.", ".(int)$zone["zoneID"].", ".(float)$value.", 1 ) " );
                                }
                        }
                }
                else
                        
db_query"insert into ".TAX_RATES_ZONES_TABLE.
                                  
" ( classID, zoneID, value, isGrouped ) ".
                                  
" values( ".(int)$classID.", ".(int)$zoneID.", ".(float)$value.", 0 ) " );
        }


        function 
taxUpdateZoneRate$classID$zoneID$value )
        {
                if ( 
$zoneID == )
                        
db_query"update ".TAX_RATES_ZONES_TABLE.
                                
" set value=".(float)$value.
                                
" where classID=".(int)$classID." AND isGrouped=1" );
                else
                        
db_query"update ".TAX_RATES_ZONES_TABLE.
                                
" set value=".(float)$value.
                                
" where classID=".(int)$classID." AND zoneID=".(int)$zoneID.
                                
" AND isGrouped=0" );
        }

        function 
taxDeleteZoneRate$classID$zoneID )
        {
                if ( 
$zoneID==)
                        
db_query("delete from ".TAX_RATES_ZONES_TABLE.
                                
" where classID=".(int)$classID." AND isGrouped=1");
                else
                {
                        
$q_count db_query("select count(*) from ".TAX_RATES_ZONES_TABLE.
                                
" where classID=".(int)$classID." AND isGrouped=1");
                        
$count db_fetch_row$q_count );
                        
$count $count[0];

                        if ( 
$count == )
                                
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<strlen($zip); $i++ )
                        {
                                if ( (
$zip[$i]==$zip_template[$i]) ||
                                                        
$zip_template[$i]=='*' )
                                {
                                        if ( 
$zip_template[$i]=='*' )
                                                
$starCounter++;
                                        continue;
                                }
                                else
                                {
                                        
$testResult false;
                                        break;
                                }
                        }
                        if ( 
$testResult )
                                return 
$starCounter;
                        else
                                return 
false;
                }
                else
                        return 
false;
        }


        function 
_getBestZipRate$classID$countryID$zip )
        {
                
$q=db_query"select tax_zipID, zip_template, value from ".
                                
TAX_ZIP_TABLE." where classID=".(int)$classID." AND countryID=".(int)$countryID);
                
$testZipTemplateArray = array();
                while( 
$row=db_fetch_row($q) )
                {
                        
$res _testTemplateZip$row["zip_template"], $zip );
                        if ( !
is_bool($res) )
                                
$testZipTemplateArray[] = array(
                                                        
"starCounter" => $res,
                                                        
"rate" => $row["value"] );
                }

                if ( 
count($testZipTemplateArray) == )
                        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"] == )
                {
                        
$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 == )
                        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;
                                }
                        }
                }
        }

?>
Онлайн: 0
Реклама