[ Index ]

PHP Cross Reference of osCMax 2.0.4

title

Body

[close]

/includes/modules/shipping/ -> zones.php (source)

   1  <?php
   2  /*

   3  $Id: zones.php 3 2006-05-27 04:59:07Z user $

   4  

   5    osCMax Power E-Commerce

   6    http://oscdox.com

   7  

   8    Copyright 2006 osCMax

   9  

  10    Released under the GNU General Public License

  11  

  12    USAGE

  13    By default, the module comes with support for 1 zone.  This can be

  14    easily changed by editing the line below in the zones constructor 

  15    that defines $this->num_zones.

  16  

  17    Next, you will want to activate the module by going to the Admin screen,

  18    clicking on Modules, then clicking on Shipping.  A list of all shipping

  19    modules should appear.  Click on the green dot next to the one labeled 

  20    zones.php.  A list of settings will appear to the right.  Click on the

  21    Edit button. 

  22  

  23    PLEASE NOTE THAT YOU WILL LOSE YOUR CURRENT SHIPPING RATES AND OTHER 

  24    SETTINGS IF YOU TURN OFF THIS SHIPPING METHOD.  Make sure you keep a 

  25    backup of your shipping settings somewhere at all times.

  26  

  27    If you want an additional handling charge applied to orders that use this

  28    method, set the Handling Fee field.

  29  

  30    Next, you will need to define which countries are in each zone.  Determining

  31    this might take some time and effort.  You should group a set of countries

  32    that has similar shipping charges for the same weight.  For instance, when

  33    shipping from the US, the countries of Japan, Australia, New Zealand, and 

  34    Singapore have similar shipping rates.  As an example, one of my customers

  35    is using this set of zones:

  36      1: USA

  37      2: Canada

  38      3: Austria, Belgium, Great Britain, France, Germany, Greenland, Iceland,

  39         Ireland, Italy, Norway, Holland/Netherlands, Denmark, Poland, Spain,

  40         Sweden, Switzerland, Finland, Portugal, Israel, Greece

  41      4: Japan, Australia, New Zealand, Singapore

  42      5: Taiwan, China, Hong Kong

  43  

  44    When you enter these country lists, enter them into the Zone X Countries

  45    fields, where "X" is the number of the zone.  They should be entered as

  46    two character ISO country codes in all capital letters.  They should be

  47    separated by commas with no spaces or other punctuation. For example:

  48      1: US

  49      2: CA

  50      3: AT,BE,GB,FR,DE,GL,IS,IE,IT,NO,NL,DK,PL,ES,SE,CH,FI,PT,IL,GR

  51      4: JP,AU,NZ,SG

  52      5: TW,CN,HK

  53  

  54    Now you need to set up the shipping rate tables for each zone.  Again,

  55    some time and effort will go into setting the appropriate rates.  You

  56    will define a set of weight ranges and the shipping price for each

  57    range.  For instance, you might want an order than weighs more than 0

  58    and less than or equal to 3 to cost 5.50 to ship to a certain zone.  

  59    This would be defined by this:  3:5.5

  60  

  61    You should combine a bunch of these rates together in a comma delimited

  62    list and enter them into the "Zone X Shipping Table" fields where "X" 

  63    is the zone number.  For example, this might be used for Zone 1:

  64      1:3.5,2:3.95,3:5.2,4:6.45,5:7.7,6:10.4,7:11.85, 8:13.3,9:14.75,10:16.2,11:17.65,

  65      12:19.1,13:20.55,14:22,15:23.45

  66  

  67    The above example includes weights over 0 and up to 15.  Note that

  68    units are not specified in this explanation since they should be

  69    specific to your locale.

  70  

  71    CAVEATS

  72    At this time, it does not deal with weights that are above the highest amount

  73    defined.  This will probably be the next area to be improved with the

  74    module.  For now, you could have one last very high range with a very

  75    high shipping rate to discourage orders of that magnitude.  For 

  76    instance:  999:1000

  77  

  78    If you want to be able to ship to any country in the world, you will 

  79    need to enter every country code into the Country fields. For most

  80    shops, you will not want to enter every country.  This is often 

  81    because of too much fraud from certain places. If a country is not

  82    listed, then the module will add a $0.00 shipping charge and will

  83    indicate that shipping is not available to that destination.  

  84    PLEASE NOTE THAT THE ORDER CAN STILL BE COMPLETED AND PROCESSED!

  85  

  86    It appears that the osC shipping system automatically rounds the 

  87    shipping weight up to the nearest whole unit.  This makes it more

  88    difficult to design precise shipping tables.  If you want to, you 

  89    can hack the shipping.php file to get rid of the rounding.

  90  

  91    Lastly, there is a limit of 255 characters on each of the Zone

  92    Shipping Tables and Zone Countries. 

  93  

  94  */
  95  
  96    class zones {
  97      var $code, $title, $description, $enabled, $num_zones;
  98  
  99  // class constructor

 100      function zones() {
 101        $this->code = 'zones';
 102        $this->title = MODULE_SHIPPING_ZONES_TEXT_TITLE;
 103        $this->description = MODULE_SHIPPING_ZONES_TEXT_DESCRIPTION;
 104        $this->sort_order = MODULE_SHIPPING_ZONES_SORT_ORDER;
 105        $this->icon = '';
 106        $this->tax_class = MODULE_SHIPPING_ZONES_TAX_CLASS;
 107        $this->enabled = ((MODULE_SHIPPING_ZONES_STATUS == 'True') ? true : false);
 108  
 109        // CUSTOMIZE THIS SETTING FOR THE NUMBER OF ZONES NEEDED

 110        $this->num_zones = 1;
 111      }
 112  
 113  // class methods

 114      function quote($method = '') {
 115        global $order, $shipping_weight, $shipping_num_boxes;
 116  
 117        $dest_country = $order->delivery['country']['iso_code_2'];
 118        $dest_zone = 0;
 119        $error = false;
 120  
 121        for ($i=1; $i<=$this->num_zones; $i++) {
 122          $countries_table = constant('MODULE_SHIPPING_ZONES_COUNTRIES_' . $i);
 123          $country_zones = split("[,]", $countries_table);
 124          if (in_array($dest_country, $country_zones)) {
 125            $dest_zone = $i;
 126            break;
 127          }
 128        }
 129  
 130        if ($dest_zone == 0) {
 131          $error = true;
 132        } else {
 133          $shipping = -1;
 134          $zones_cost = constant('MODULE_SHIPPING_ZONES_COST_' . $dest_zone);
 135  
 136          $zones_table = split("[:,]" , $zones_cost);
 137          $size = sizeof($zones_table);
 138          for ($i=0; $i<$size; $i+=2) {
 139            if ($shipping_weight <= $zones_table[$i]) {
 140              $shipping = $zones_table[$i+1];
 141              $shipping_method = MODULE_SHIPPING_ZONES_TEXT_WAY . ' ' . $dest_country . ' : ' . $shipping_weight . ' ' . MODULE_SHIPPING_ZONES_TEXT_UNITS;
 142              break;
 143            }
 144          }
 145  
 146          if ($shipping == -1) {
 147            $shipping_cost = 0;
 148            $shipping_method = MODULE_SHIPPING_ZONES_UNDEFINED_RATE;
 149          } else {
 150            $shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_ZONES_HANDLING_' . $dest_zone);
 151          }
 152        }
 153  
 154        $this->quotes = array('id' => $this->code,
 155                              'module' => MODULE_SHIPPING_ZONES_TEXT_TITLE,
 156                              'methods' => array(array('id' => $this->code,
 157                                                       'title' => $shipping_method,
 158                                                       'cost' => $shipping_cost)));
 159  
 160        if ($this->tax_class > 0) {
 161          $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
 162        }
 163  
 164        if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title);
 165  
 166        if ($error == true) $this->quotes['error'] = MODULE_SHIPPING_ZONES_INVALID_ZONE;
 167  
 168        return $this->quotes;
 169      }
 170  
 171      function check() {
 172        if (!isset($this->_check)) {
 173          $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_ZONES_STATUS'");
 174          $this->_check = tep_db_num_rows($check_query);
 175        }
 176        return $this->_check;
 177      }
 178  
 179      function install() {
 180        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Zones Method', 'MODULE_SHIPPING_ZONES_STATUS', 'True', 'Do you want to offer zone rate shipping?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
 181        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_ZONES_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
 182        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_ZONES_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
 183        for ($i = 1; $i <= $this->num_zones; $i++) {
 184          $default_countries = '';
 185          if ($i == 1) {
 186            $default_countries = 'US,CA';
 187          }
 188          tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $i ." Countries', 'MODULE_SHIPPING_ZONES_COUNTRIES_" . $i ."', '" . $default_countries . "', 'Comma separated list of two character ISO country codes that are part of Zone " . $i . ".', '6', '0', now())");
 189          tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $i ." Shipping Table', 'MODULE_SHIPPING_ZONES_COST_" . $i ."', '3:8.50,7:10.50,99:20.00', 'Shipping rates to Zone " . $i . " destinations based on a group of maximum order weights. Example: 3:8.50,7:10.50,... Weights less than or equal to 3 would cost 8.50 for Zone " . $i . " destinations.', '6', '0', now())");
 190          tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $i ." Handling Fee', 'MODULE_SHIPPING_ZONES_HANDLING_" . $i."', '0', 'Handling Fee for this shipping zone', '6', '0', now())");
 191        }
 192      }
 193  
 194      function remove() {
 195        tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
 196      }
 197  
 198      function keys() {
 199        $keys = array('MODULE_SHIPPING_ZONES_STATUS', 'MODULE_SHIPPING_ZONES_TAX_CLASS', 'MODULE_SHIPPING_ZONES_SORT_ORDER');
 200  
 201        for ($i=1; $i<=$this->num_zones; $i++) {
 202          $keys[] = 'MODULE_SHIPPING_ZONES_COUNTRIES_' . $i;
 203          $keys[] = 'MODULE_SHIPPING_ZONES_COST_' . $i;
 204          $keys[] = 'MODULE_SHIPPING_ZONES_HANDLING_' . $i;
 205        }
 206  
 207        return $keys;
 208      }
 209    }
 210  ?>


Generated: Fri Jan 1 13:43:16 2010 Cross-referenced by PHPXref 0.7