Forums / General Questions / Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Views: 8,738

Results 81 to 99 of 99
25 Feb 2014, 3:22 PM
#81
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Regarding the search function, yes it's a contentious issue at the moment... we're working with a developer now to fix the site search and make it more relevant as the regular ZC searches were completely useless for our site (no offence) :)

25 Feb 2014, 3:26 PM
#82
ajeh avatar

ajeh

Oba-san

Join Date:
Sep 2003
Location:
Ohio
Posts:
62,757
Plugin Contributions:
1

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Do not feel bad ... not my fav thing either ...

Let me know if you find it is just the categories_id that you are selecting that are causing the issue ...

Linda McGrath
If you have to think ... you haven't been zenned ...

**Did YOU buy the Zen Cart Team a cup of coffee and a donut today? Just click here to support the Zen Cart Team!!**

Are you using the latest? Perhaps you've a problem that's fixed in the latest version: [Upgrade today!]
Officially PayPal-Certified! Just click here

Try our Zen Cart Recommended Services - Hosting, Payment and more ...
Signup for our Announcements Forums to stay up to date on important changes and updates!

25 Feb 2014, 3:27 PM
#83
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

We don't have any sub-categories, only categories:

TABLE409
350 Folder Bespoke Flowers
369 Folder Hair Flowers & Headwear
6 Folder BRIDAL BOUQUETS
24 Folder Bridesmaid Flowers
357 Folder Flowergirl Flowers
19 Folder Floral Arrangements
409 Folder Ribbons
245 Folder Favours & Accessories

TABLE
23 Folder Corsages
7 Folder Buttonholes
377 Folder Loose, Artificial Flowers
355 Folder Home & Corporate Flowers

IRRELEVANT
820 Folder Wedding Flowers (MIXED PRODUCTS - contains linked products from all categories)

This is a complete list of categories.

25 Feb 2014, 3:30 PM
#84
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Actually, that's not accurate, this is the correct structure:

TABLE409(large things)
350 Folder Bespoke Flowers
6 Folder BRIDAL BOUQUETS
24 Folder Bridesmaid Flowers
357 Folder Flowergirl Flowers
19 Folder Floral Arrangements

TABLE(small things)
23 Folder Corsages
7 Folder Buttonholes
377 Folder Loose, Artificial Flowers
355 Folder Home & Corporate Flowers
409 Folder Ribbons
369 Folder Hair Flowers & Headwear
245 Folder Favours & Accessories

IRRELEVANT
820 Folder Wedding Flowers (MIXED PRODUCTS - contains linked products from all categories)

25 Feb 2014, 4:05 PM
#85
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

It's definitely got something to do with the category ID's... but it's giving me a sore head :frusty:

Can you see from the new files what's stopping it work?

TABLE

<?php
/**
 * @package shippingMethod
 * @copyright Copyright 2003-2005 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: table.php 6347 2007-05-20 19:46:59Z ajeh $
 */
/**
 * Enter description here...
 *
 */
class table extends base {
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $code;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $title;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $description;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $icon;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $enabled;
  /**
   * Enter description here...
   *
   * @return table
   */
  function table() {
    global $order, $db;

    $this->code = 'table';
    $this->title = MODULE_SHIPPING_TABLE_TEXT_TITLE;
    $this->description = MODULE_SHIPPING_TABLE_TEXT_DESCRIPTION;
    $this->sort_order = MODULE_SHIPPING_TABLE_SORT_ORDER;
    $this->icon = '';
    $this->tax_class = MODULE_SHIPPING_TABLE_TAX_CLASS;
    $this->tax_basis = MODULE_SHIPPING_TABLE_TAX_BASIS;
    // disable only when entire cart is free shipping
    if (zen_get_shipping_enabled($this->code)) {
      $this->enabled = ((MODULE_SHIPPING_TABLE_STATUS == 'True') ? true : false);
    }

// bof: only show if all Products are OUTWITH Master/Linked Categories
  if (!IS_ADMIN_FLAG) {


//-------------------------------------------------------------------------------------------------
    // check individual products_id 168, 169, 172
    $chk_products_found = 0;
    $chk_products = $_SESSION['cart']->get_products();
	$chk_catAll = $_SESSION['cart']->count_contents();
//    for ($i=0, $n=sizeof($chk_products); $i<$n; $i++) {
//      if ( in_array((int)$chk_products[$i]['id'], array(168, 169, 172)) ) {
//        $chk_products_found += $chk_products[$i]['quantity'];
//      }
//   }
//echo 'Products Individual Found: ' . $chk_products_found . '<br>';
//-------------------------------------------------------------------------------------------------


    // check Products from Linked Categories 
    $chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (350,6, 24, 357, 19)");
    while(!$chk_linked->EOF) {
      $selected_products_check .= $chk_linked->fields['products_id'];
      $chk_linked->MoveNext();
      if (!$chk_linked->EOF) {
        $selected_products_check .= ',';
      }
    }
    $selected_products = explode(',', $selected_products_check);
    // check cart contents for linked products
    $chk_products_linked = $chk_products;
    $chk_products_found_linked = 0;
    for ($i=0, $n=sizeof($chk_products_linked); $i<$n; $i++) {
      if ( in_array((int)$chk_products_linked[$i]['id'], $selected_products) ) {
        $chk_products_found_linked += $chk_products_linked[$i]['quantity'];
      }
    }
//echo 'Products Master/Linked Found: ' . $chk_products_found_linked . '<br>';

    $chk_cat_total = ($chk_products_found + $chk_products_found_linked);

    // if any Products are found and does not match ALL products in cart turn off the shipping module
    if (($chk_cat_total) == $chk_catAll) {
      $this->enabled = false;
    }
  }
// eof: only show if all Products are OUTWITH Master/Linked Categories

    if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE_ZONE > 0) ) {
      $check_flag = false;
      $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_TABLE_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
      while (!$check->EOF) {
        if ($check->fields['zone_id'] < 1) {
          $check_flag = true;
          break;
        } elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
          $check_flag = true;
          break;
        }
        $check->MoveNext();
      }

      if ($check_flag == false) {
        $this->enabled = false;
      }
    }
  }
  /**
   * Enter description here...
   *
   * @param unknown_type $method
   * @return unknown
   */
  function quote($method = '') {
    global $order, $shipping_weight, $shipping_num_boxes, $total_count;

    // shipping adjustment
    switch (MODULE_SHIPPING_TABLE_MODE) {
      case ('price'):
        $order_total = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;
        break;
      case ('weight'):
        $order_total = $shipping_weight;
        break;
      case ('item'):
        $order_total = $total_count - $_SESSION['cart']->free_shipping_items();
        break;
    }

    $order_total_amount = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;

    $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE_COST);
    $size = sizeof($table_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
      if (round($order_total,9) <= $table_cost[$i]) {
        if (strstr($table_cost[$i+1], '%')) {
          $shipping = ($table_cost[$i+1]/100) * $order_total_amount;
        } else {
          $shipping = $table_cost[$i+1];
        }
        break;
      }
    }

    if (MODULE_SHIPPING_TABLE_MODE == 'weight') {
      $shipping = $shipping * $shipping_num_boxes;
      // show boxes if weight
      switch (SHIPPING_BOX_WEIGHT_DISPLAY) {
        case (0):
        $show_box_weight = '';
        break;
        case (1):
        $show_box_weight = ' (' . $shipping_num_boxes . ' ' . TEXT_SHIPPING_BOXES . ')';
        break;
        case (2):
        $show_box_weight = ' (' . number_format($shipping_weight * $shipping_num_boxes,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
        default:
        $show_box_weight = ' (' . $shipping_num_boxes . ' x ' . number_format($shipping_weight,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
      }
    }

    $this->quotes = array('id' => $this->code,
    'module' => MODULE_SHIPPING_TABLE_TEXT_TITLE . $show_box_weight,
    'methods' => array(array('id' => $this->code,
    'title' => MODULE_SHIPPING_TABLE_TEXT_WAY,
    'cost' => $shipping + MODULE_SHIPPING_TABLE_HANDLING)));

    if ($this->tax_class > 0) {
      $this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    }

    if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title);

    return $this->quotes;
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function check() {
    global $db;
    if (!isset($this->_check)) {
      $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TABLE_STATUS'");
      $this->_check = $check_query->RecordCount();
    }
    return $this->_check;
  }
  /**
   * Enter description here...
   *
   */
  function install() {
    global $db;
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Table Method', 'MODULE_SHIPPING_TABLE_STATUS', 'True', 'Do you want to offer table rate shipping?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Shipping Table', 'MODULE_SHIPPING_TABLE_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items or count of the items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc<br />You can end the last amount as 10000:7% to charge 7% of the Order Total', '6', '0', 'zen_cfg_textarea(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Table Method', 'MODULE_SHIPPING_TABLE_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered or the total number of items orderd.', '6', '0', 'zen_cfg_select_option(array(\'weight\', \'price\', \'item\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', now())");
    $db->Execute("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_TABLE_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'zen_get_tax_class_title', 'zen_cfg_pull_down_tax_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tax Basis', 'MODULE_SHIPPING_TABLE_TAX_BASIS', 'Shipping', 'On what basis is Shipping Tax calculated. Options are<br />Shipping - Based on customers Shipping Address<br />Billing Based on customers Billing address<br />Store - Based on Store address if Billing/Shipping Zone equals Store zone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_TABLE_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_TABLE_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
  }
  /**
   * Enter description here...
   *
   */
  function remove() {
    global $db;
    $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function keys() {
    return array('MODULE_SHIPPING_TABLE_STATUS', 'MODULE_SHIPPING_TABLE_COST', 'MODULE_SHIPPING_TABLE_MODE', 'MODULE_SHIPPING_TABLE_HANDLING', 'MODULE_SHIPPING_TABLE_TAX_CLASS', 'MODULE_SHIPPING_TABLE_TAX_BASIS', 'MODULE_SHIPPING_TABLE_ZONE', 'MODULE_SHIPPING_TABLE_SORT_ORDER');
  }
}
?>
25 Feb 2014, 4:06 PM
#86
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

TABLE409:

<?php
/**
 * @package shippingMethod
 * @copyright Copyright 2003-2005 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: table.php 4184 2006-08-21 03:36:36Z ajeh $
 */
/**
 * Enter description here...
 *
 */
class table409 extends base {
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $code;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $title;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $description;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $icon;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $enabled;
  /**
   * Enter description here...
   *
   * @return table
   */
  function table409() {
    global $order, $db;

    $this->code = 'table409';
    $this->title = MODULE_SHIPPING_TABLE409_TEXT_TITLE;
    $this->description = MODULE_SHIPPING_TABLE409_TEXT_DESCRIPTION;
    $this->sort_order = MODULE_SHIPPING_TABLE409_SORT_ORDER;
    $this->icon = '';
    $this->tax_class = MODULE_SHIPPING_TABLE409_TAX_CLASS;
    $this->tax_basis = MODULE_SHIPPING_TABLE409_TAX_BASIS;
    // disable only when entire cart is free shipping
    if (zen_get_shipping_enabled($this->code)) {
      $this->enabled = ((MODULE_SHIPPING_TABLE409_STATUS == 'True') ? true : false);
    }


// bof: only show if all Products are from individual products_id and Master/Linked Categories
  if (!IS_ADMIN_FLAG) {


//-------------------------------------------------------------------------------------------------
    // check individual products_id 168, 169, 172
    $chk_products_found = 0;
    $chk_products = $_SESSION['cart']->get_products();
	$chk_catAll = $_SESSION['cart']->count_contents();
//    for ($i=0, $n=sizeof($chk_products); $i<$n; $i++) {
//      if ( in_array((int)$chk_products[$i]['id'], array(168, 169, 172)) ) {
//        $chk_products_found += $chk_products[$i]['quantity'];
//      }
//   }
//echo 'Products Individual Found: ' . $chk_products_found . '<br>';
//-------------------------------------------------------------------------------------------------


    // check Products from Linked Categories 5, 10, 22
    $chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (23,7,377,355,409,369,245)");
    while(!$chk_linked->EOF) {
      $selected_products_check .= $chk_linked->fields['products_id'];
      $chk_linked->MoveNext();
      if (!$chk_linked->EOF) {
        $selected_products_check .= ',';
      }
    }
    $selected_products = explode(',', $selected_products_check);
    // check cart contents for linked products
    $chk_products_linked = $chk_products;
    $chk_products_found_linked = 0;
    for ($i=0, $n=sizeof($chk_products_linked); $i<$n; $i++) {
      if ( in_array((int)$chk_products_linked[$i]['id'], $selected_products) ) {
        $chk_products_found_linked += $chk_products_linked[$i]['quantity'];
      }
    }
//echo 'Products Master/Linked Found: ' . $chk_products_found_linked . '<br>';

    $chk_cat_total = ($chk_products_found + $chk_products_found_linked);

    // if any Products are found and does not match ALL products in cart turn off the shipping module
    if (($chk_cat_total) != $chk_catAll) {
      $this->enabled = false;
    }
  }
// eof: only show if all Products are from individual products_id and Master/Linked Categories

    if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE409_ZONE > 0) ) {
      $check_flag = false;
      $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_TABLE409_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
      while (!$check->EOF) {
        if ($check->fields['zone_id'] < 1) {
          $check_flag = true;
          break;
        } elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
          $check_flag = true;
          break;
        }
        $check->MoveNext();
      }

      if ($check_flag == false) {
        $this->enabled = false;
      }
    }
  }
  /**
   * Enter description here...
   *
   * @param unknown_type $method
   * @return unknown
   */
  function quote($method = '') {
    global $order, $shipping_weight, $shipping_num_boxes, $total_count;

    // shipping adjustment
    switch (MODULE_SHIPPING_TABLE409_MODE) {
      case ('price'):
        $order_total = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;
        break;
      case ('weight'):
        $order_total = $shipping_weight;
        break;
      case ('item'):
        $order_total = $total_count - $_SESSION['cart']->free_shipping_items();
        break;
    }

    $table409_cost = split("[:,]" , MODULE_SHIPPING_TABLE409_COST);
    $size = sizeof($table409_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
      if (round($order_total,9) <= $table409_cost[$i]) {
        $shipping = $table409_cost[$i+1];
        break;
      }
    }

    if (MODULE_SHIPPING_TABLE409_MODE == 'weight') {
      $shipping = $shipping * $shipping_num_boxes;
      // show boxes if weight
      switch (SHIPPING_BOX_WEIGHT_DISPLAY) {
        case (0):
        $show_box_weight = '';
        break;
        case (1):
        $show_box_weight = ' (' . $shipping_num_boxes . ' ' . TEXT_SHIPPING_BOXES . ')';
        break;
        case (2):
        $show_box_weight = ' (' . number_format($shipping_weight * $shipping_num_boxes,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
        default:
        $show_box_weight = ' (' . $shipping_num_boxes . ' x ' . number_format($shipping_weight,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
      }
    }

    $this->quotes = array('id' => $this->code,
    'module' => MODULE_SHIPPING_TABLE409_TEXT_TITLE . $show_box_weight,
    'methods' => array(array('id' => $this->code,
    'title' => MODULE_SHIPPING_TABLE409_TEXT_WAY,
    'cost' => $shipping + MODULE_SHIPPING_TABLE409_HANDLING)));

    if ($this->tax_class > 0) {
      $this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    }

    if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title);

    return $this->quotes;
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function check() {
    global $db;
    if (!isset($this->_check)) {
      $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TABLE409_STATUS'");
      $this->_check = $check_query->RecordCount();
    }
    return $this->_check;
  }
  /**
   * Enter description here...
   *
   */
  function install() {
    global $db;
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Table409 Method', 'MODULE_SHIPPING_TABLE409_STATUS', 'True', 'Do you want to offer table409 rate shipping?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Shipping Table409', 'MODULE_SHIPPING_TABLE409_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items or count of the items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc', '6', '0', 'zen_cfg_textarea(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Table409 Method', 'MODULE_SHIPPING_TABLE409_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered or the total number of items orderd.', '6', '0', 'zen_cfg_select_option(array(\'weight\', \'price\', \'item\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE409_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', now())");
    $db->Execute("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_TABLE409_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'zen_get_tax_class_title', 'zen_cfg_pull_down_tax_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tax Basis', 'MODULE_SHIPPING_TABLE409_TAX_BASIS', 'Shipping', 'On what basis is Shipping Tax calculated. Options are<br />Shipping - Based on customers Shipping Address<br />Billing Based on customers Billing address<br />Store - Based on Store address if Billing/Shipping Zone equals Store zone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_TABLE409_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_TABLE409_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
  }
  /**
   * Enter description here...
   *
   */
  function remove() {
    global $db;
    $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function keys() {
    return array('MODULE_SHIPPING_TABLE409_STATUS', 'MODULE_SHIPPING_TABLE409_COST', 'MODULE_SHIPPING_TABLE409_MODE', 'MODULE_SHIPPING_TABLE409_HANDLING', 'MODULE_SHIPPING_TABLE409_TAX_CLASS', 'MODULE_SHIPPING_TABLE409_TAX_BASIS', 'MODULE_SHIPPING_TABLE409_ZONE', 'MODULE_SHIPPING_TABLE409_SORT_ORDER');
  }
}
?>
25 Feb 2014, 4:06 PM
#87
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

These are both uploaded on the DEV site now.

25 Feb 2014, 4:28 PM
#88
ajeh avatar

ajeh

Oba-san

Join Date:
Sep 2003
Location:
Ohio
Posts:
62,757
Plugin Contributions:
1

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

You said you do not have subcategories, correct?

I forget, do you use Linked Products?

I am assuming that the master_categories_id of all Products are using the ones in your list in post #84?

I am wondering if we tried to make the code too smart and need to dumb it down ... :lookaroun

Linda McGrath
If you have to think ... you haven't been zenned ...

**Did YOU buy the Zen Cart Team a cup of coffee and a donut today? Just click here to support the Zen Cart Team!!**

Are you using the latest? Perhaps you've a problem that's fixed in the latest version: [Upgrade today!]
Officially PayPal-Certified! Just click here

Try our Zen Cart Recommended Services - Hosting, Payment and more ...
Signup for our Announcements Forums to stay up to date on important changes and updates!

25 Feb 2014, 4:32 PM
#89
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Hi Linda,

We do use linked products, but not as much as we used to on the old site. That was link city!

Now we use them only rarely but we do use them, yes.

The categories in the list are all master categories, but there will be linked products inside them too. All products are in master categories though.

25 Feb 2014, 4:58 PM
#90
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

So, basically:

We have BIG items in categories 350,6, 24, 357, 19

We have SMALL items in categories 23, 7, 377, 355, 409, 369, 245

We need BIG products to use TABLE shipping

We need SMALL products to use TABLE409

We need BIG+SMALL combined to use TABLE

Maybe there's a simpler way, I don't know?

25 Feb 2014, 5:03 PM
#91
ajeh avatar

ajeh

Oba-san

Join Date:
Sep 2003
Location:
Ohio
Posts:
62,757
Plugin Contributions:
1

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

So technically, if you were to comment out your old calculating method, you could use this?

// bof: only show if all Products are from master_categories_id 23,7,377,355,409,369,245
  if (!IS_ADMIN_FLAG) {
    // check the count of a specific field
    $chk_catAll = 0;
    $chk_cats = 0;
    $chk_catAll = $_SESSION['cart']->count_contents();
    // check how many Products are in the cart for master_categories_id 409
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','23');
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','7');
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','377');
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','355');
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','409');
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','369');
    $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','245');
    // if any are found turn off the shipping module
    if ($chk_cats != $chk_catAll) {
      $this->enabled = false;
    }
  }
// eof: only show if all Products are from master_categories_id 23,7,377,355,409,369,245

Linda McGrath
If you have to think ... you haven't been zenned ...

**Did YOU buy the Zen Cart Team a cup of coffee and a donut today? Just click here to support the Zen Cart Team!!**

Are you using the latest? Perhaps you've a problem that's fixed in the latest version: [Upgrade today!]
Officially PayPal-Certified! Just click here

Try our Zen Cart Recommended Services - Hosting, Payment and more ...
Signup for our Announcements Forums to stay up to date on important changes and updates!

25 Feb 2014, 5:15 PM
#92
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

I'd like to try but which lines do I replace with the new code?

25 Feb 2014, 5:21 PM
#93
ajeh avatar

ajeh

Oba-san

Join Date:
Sep 2003
Location:
Ohio
Posts:
62,757
Plugin Contributions:
1

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

This whole section:

// bof: only show if all Products are from individual products_id and Master/Linked Categories
  if (!IS_ADMIN_FLAG) {


//-------------------------------------------------------------------------------------------------
    // check individual products_id 168, 169, 172
    $chk_products_found = 0;
    $chk_products = $_SESSION['cart']->get_products();
    $chk_catAll = $_SESSION['cart']->count_contents();
//    for ($i=0, $n=sizeof($chk_products); $i<$n; $i++) {
//      if ( in_array((int)$chk_products[$i]['id'], array(168, 169, 172)) ) {
//        $chk_products_found += $chk_products[$i]['quantity'];
//      }
//   }
//echo 'Products Individual Found: ' . $chk_products_found . '<br>';
//-------------------------------------------------------------------------------------------------


    // check Products from Linked Categories 5, 10, 22
    $chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (23,7,377,355,409,369,245)");
    while(!$chk_linked->EOF) {
      $selected_products_check .= $chk_linked->fields['products_id'];
      $chk_linked->MoveNext();
      if (!$chk_linked->EOF) {
        $selected_products_check .= ',';
      }
    }
    $selected_products = explode(',', $selected_products_check);
    // check cart contents for linked products
    $chk_products_linked = $chk_products;
    $chk_products_found_linked = 0;
    for ($i=0, $n=sizeof($chk_products_linked); $i<$n; $i++) {
      if ( in_array((int)$chk_products_linked[$i]['id'], $selected_products) ) {
        $chk_products_found_linked += $chk_products_linked[$i]['quantity'];
      }
    }
//echo 'Products Master/Linked Found: ' . $chk_products_found_linked . '<br>';

    $chk_cat_total = ($chk_products_found + $chk_products_found_linked);

    // if any Products are found and does not match ALL products in cart turn off the shipping module
    if (($chk_cat_total) != $chk_catAll) {
      $this->enabled = false;
    }
  }
// eof: only show if all Products are from individual products_id and Master/Linked Categories

Linda McGrath
If you have to think ... you haven't been zenned ...

**Did YOU buy the Zen Cart Team a cup of coffee and a donut today? Just click here to support the Zen Cart Team!!**

Are you using the latest? Perhaps you've a problem that's fixed in the latest version: [Upgrade today!]
Officially PayPal-Certified! Just click here

Try our Zen Cart Recommended Services - Hosting, Payment and more ...
Signup for our Announcements Forums to stay up to date on important changes and updates!

25 Feb 2014, 5:35 PM
#94
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Both tables are showing now, for some reason when you add SMALL items? Now it's showing both 0 and 409 tables :blink:

25 Feb 2014, 6:11 PM
#95
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Not too sure what our developer did, but he's got it working at dev.silkblooms.co.uk

Here are the changes he's made:

TABLE

<?php
/**
 * @package shippingMethod
 * @copyright Copyright 2003-2005 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: table.php 6347 2007-05-20 19:46:59Z ajeh $
 */
/**
 * Enter description here...
 *
 */
class table extends base {
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $code;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $title;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $description;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $icon;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $enabled;
  /**
   * Enter description here...
   *
   * @return table
   */
  function table() {
    global $order, $db;

    $this->code = 'table';
    $this->title = MODULE_SHIPPING_TABLE_TEXT_TITLE;
    $this->description = MODULE_SHIPPING_TABLE_TEXT_DESCRIPTION;
    $this->sort_order = MODULE_SHIPPING_TABLE_SORT_ORDER;
    $this->icon = '';
    $this->tax_class = MODULE_SHIPPING_TABLE_TAX_CLASS;
    $this->tax_basis = MODULE_SHIPPING_TABLE_TAX_BASIS;
    // disable only when entire cart is free shipping
    if (zen_get_shipping_enabled($this->code)) {
      $this->enabled = ((MODULE_SHIPPING_TABLE_STATUS == 'True') ? true : false);
    }

    if (!IS_ADMIN_FLAG) {



        $chk_catAll = 0;
        $chk_cats = 0;
        $chk_catAll = $_SESSION['cart']->count_contents();



        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','350');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','6');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','24');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','357');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','377');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','19');
//echo '$chk_cats => ',$chk_cats,'<br />';
//echo '$chk_catAll => ',$chk_catAll,'<br />';

        //if ($chk_cats != $chk_catAll) {
        if ($chk_cats <= 0) {

            $this->enabled = false;

        }

    }

// bof: only show if all Products are OUTWITH Master/Linked Categories
  if (!IS_ADMIN_FLAG && 0) {


//-------------------------------------------------------------------------------------------------
    // check individual products_id 168, 169, 172
    $chk_products_found = 0;
    $chk_products = $_SESSION['cart']->get_products();
	$chk_catAll = $_SESSION['cart']->count_contents();
//    for ($i=0, $n=sizeof($chk_products); $i<$n; $i++) {
//      if ( in_array((int)$chk_products[$i]['id'], array(168, 169, 172)) ) {
//        $chk_products_found += $chk_products[$i]['quantity'];
//      }
//   }
//echo 'Products Individual Found: ' . $chk_products_found . '<br>';
//-------------------------------------------------------------------------------------------------


    // check Products from Linked Categories 
    //$chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (409, 7, 103, 104, 105, 106, 336, 372, 361, 397, 395, 385, 401, 391, 400, 394, 384, 387, 399, 390)");
    $chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (350,6, 24, 357, 19)");
    while(!$chk_linked->EOF) {
      $selected_products_check .= $chk_linked->fields['products_id'];
      $chk_linked->MoveNext();
      if (!$chk_linked->EOF) {
        $selected_products_check .= ',';
      }
    }
    $selected_products = explode(',', $selected_products_check);
    // check cart contents for linked products
    $chk_products_linked = $chk_products;
    $chk_products_found_linked = 0;
    for ($i=0, $n=sizeof($chk_products_linked); $i<$n; $i++) {
      if ( in_array((int)$chk_products_linked[$i]['id'], $selected_products) ) {
        $chk_products_found_linked += $chk_products_linked[$i]['quantity'];
      }
    }
//echo 'Products Master/Linked Found: ' . $chk_products_found_linked . '<br>';

    $chk_cat_total = ($chk_products_found + $chk_products_found_linked);

    // if any Products are found and does not match ALL products in cart turn off the shipping module
    if (($chk_cat_total) != $chk_catAll) {
      $this->enabled = false;
    }
  }
// eof: only show if all Products are OUTWITH Master/Linked Categories

    if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE_ZONE > 0) ) {
      $check_flag = false;
      $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_TABLE_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
      while (!$check->EOF) {
        if ($check->fields['zone_id'] < 1) {
          $check_flag = true;
          break;
        } elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
          $check_flag = true;
          break;
        }
        $check->MoveNext();
      }

      if ($check_flag == false) {
        $this->enabled = false;
      }
    }
  }
  /**
   * Enter description here...
   *
   * @param unknown_type $method
   * @return unknown
   */
  function quote($method = '') {
    global $order, $shipping_weight, $shipping_num_boxes, $total_count;

    // shipping adjustment
    switch (MODULE_SHIPPING_TABLE_MODE) {
      case ('price'):
        $order_total = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;
        break;
      case ('weight'):
        $order_total = $shipping_weight;
        break;
      case ('item'):
        $order_total = $total_count - $_SESSION['cart']->free_shipping_items();
        break;
    }

    $order_total_amount = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;

    $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE_COST);
    $size = sizeof($table_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
      if (round($order_total,9) <= $table_cost[$i]) {
        if (strstr($table_cost[$i+1], '%')) {
          $shipping = ($table_cost[$i+1]/100) * $order_total_amount;
        } else {
          $shipping = $table_cost[$i+1];
        }
        break;
      }
    }

    if (MODULE_SHIPPING_TABLE_MODE == 'weight') {
      $shipping = $shipping * $shipping_num_boxes;
      // show boxes if weight
      switch (SHIPPING_BOX_WEIGHT_DISPLAY) {
        case (0):
        $show_box_weight = '';
        break;
        case (1):
        $show_box_weight = ' (' . $shipping_num_boxes . ' ' . TEXT_SHIPPING_BOXES . ')';
        break;
        case (2):
        $show_box_weight = ' (' . number_format($shipping_weight * $shipping_num_boxes,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
        default:
        $show_box_weight = ' (' . $shipping_num_boxes . ' x ' . number_format($shipping_weight,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
      }
    }

    $this->quotes = array('id' => $this->code,
    'module' => MODULE_SHIPPING_TABLE_TEXT_TITLE . $show_box_weight,
    'methods' => array(array('id' => $this->code,
    'title' => MODULE_SHIPPING_TABLE_TEXT_WAY,
    'cost' => $shipping + MODULE_SHIPPING_TABLE_HANDLING)));

    if ($this->tax_class > 0) {
      $this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    }

    if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title);

    return $this->quotes;
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function check() {
    global $db;
    if (!isset($this->_check)) {
      $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TABLE_STATUS'");
      $this->_check = $check_query->RecordCount();
    }
    return $this->_check;
  }
  /**
   * Enter description here...
   *
   */
  function install() {
    global $db;
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Table Method', 'MODULE_SHIPPING_TABLE_STATUS', 'True', 'Do you want to offer table rate shipping?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Shipping Table', 'MODULE_SHIPPING_TABLE_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items or count of the items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc<br />You can end the last amount as 10000:7% to charge 7% of the Order Total', '6', '0', 'zen_cfg_textarea(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Table Method', 'MODULE_SHIPPING_TABLE_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered or the total number of items orderd.', '6', '0', 'zen_cfg_select_option(array(\'weight\', \'price\', \'item\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', now())");
    $db->Execute("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_TABLE_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'zen_get_tax_class_title', 'zen_cfg_pull_down_tax_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tax Basis', 'MODULE_SHIPPING_TABLE_TAX_BASIS', 'Shipping', 'On what basis is Shipping Tax calculated. Options are<br />Shipping - Based on customers Shipping Address<br />Billing Based on customers Billing address<br />Store - Based on Store address if Billing/Shipping Zone equals Store zone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_TABLE_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_TABLE_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
  }
  /**
   * Enter description here...
   *
   */
  function remove() {
    global $db;
    $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function keys() {
    return array('MODULE_SHIPPING_TABLE_STATUS', 'MODULE_SHIPPING_TABLE_COST', 'MODULE_SHIPPING_TABLE_MODE', 'MODULE_SHIPPING_TABLE_HANDLING', 'MODULE_SHIPPING_TABLE_TAX_CLASS', 'MODULE_SHIPPING_TABLE_TAX_BASIS', 'MODULE_SHIPPING_TABLE_ZONE', 'MODULE_SHIPPING_TABLE_SORT_ORDER');
  }
}
?>
25 Feb 2014, 6:12 PM
#96
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

TABLE409

<?php
/**
 * @package shippingMethod
 * @copyright Copyright 2003-2005 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: table.php 4184 2006-08-21 03:36:36Z ajeh $
 */
/**
 * Enter description here...
 *
 */
class table409 extends base {
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $code;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $title;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $description;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $icon;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $enabled;
  /**
   * Enter description here...
   *
   * @return table
   */
  function table409() {
    global $order, $db;

    $this->code = 'table409';
    $this->title = MODULE_SHIPPING_TABLE409_TEXT_TITLE;
    $this->description = MODULE_SHIPPING_TABLE409_TEXT_DESCRIPTION;
    $this->sort_order = MODULE_SHIPPING_TABLE409_SORT_ORDER;
    $this->icon = '';
    $this->tax_class = MODULE_SHIPPING_TABLE409_TAX_CLASS;
    $this->tax_basis = MODULE_SHIPPING_TABLE409_TAX_BASIS;
    // disable only when entire cart is free shipping
    if (zen_get_shipping_enabled($this->code)) {
      $this->enabled = ((MODULE_SHIPPING_TABLE409_STATUS == 'True') ? true : false);
    }

    if (!IS_ADMIN_FLAG) {


        $chk_catAll = 0;
        $chk_cats = 0;
        $chk_catAll = $_SESSION['cart']->count_contents();

        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','23');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','7');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','355');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','409');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','369');
        $chk_cats += $_SESSION['cart']->in_cart_check('master_categories_id','245');


        if ($chk_cats != $chk_catAll) {
            $this->enabled = false;
        }

    }
// bof: only show if all Products are from individual products_id and Master/Linked Categories
  if (!IS_ADMIN_FLAG && 0) {


//-------------------------------------------------------------------------------------------------
    // check individual products_id 168, 169, 172
    $chk_products_found = 0;
    $chk_products = $_SESSION['cart']->get_products();
	$chk_catAll = $_SESSION['cart']->count_contents();
//    for ($i=0, $n=sizeof($chk_products); $i<$n; $i++) {
//      if ( in_array((int)$chk_products[$i]['id'], array(168, 169, 172)) ) {
//        $chk_products_found += $chk_products[$i]['quantity'];
//      }
//   }
//echo 'Products Individual Found: ' . $chk_products_found . '<br>';
//-------------------------------------------------------------------------------------------------


    // check Products from Linked Categories 5, 10, 22
    //$chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (409, 7, 103, 104, 105, 106, 336, 372, 361, 397, 395, 385, 401, 391, 400, 394, 384, 387, 399, 390)");
    $chk_linked = $db->Execute("SELECT distinct products_id FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE categories_id IN (23,7,377,355,409,369,245)");
    while(!$chk_linked->EOF) {
      $selected_products_check .= $chk_linked->fields['products_id'];
      $chk_linked->MoveNext();
      if (!$chk_linked->EOF) {
        $selected_products_check .= ',';
      }
    }
    $selected_products = explode(',', $selected_products_check);
    // check cart contents for linked products
    $chk_products_linked = $chk_products;
    $chk_products_found_linked = 0;
    for ($i=0, $n=sizeof($chk_products_linked); $i<$n; $i++) {
      if ( in_array((int)$chk_products_linked[$i]['id'], $selected_products) ) {
        $chk_products_found_linked += $chk_products_linked[$i]['quantity'];
      }
    }
//echo 'Products Master/Linked Found: ' . $chk_products_found_linked . '<br>';

    $chk_cat_total = ($chk_products_found + $chk_products_found_linked);

    // if any Products are found and does not match ALL products in cart turn off the shipping module
    if (($chk_cat_total) == $chk_catAll) {
      $this->enabled = false;
    }
  }
// eof: only show if all Products are from individual products_id and Master/Linked Categories

    if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE409_ZONE > 0) ) {
      $check_flag = false;
      $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_TABLE409_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
      while (!$check->EOF) {
        if ($check->fields['zone_id'] < 1) {
          $check_flag = true;
          break;
        } elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
          $check_flag = true;
          break;
        }
        $check->MoveNext();
      }

      if ($check_flag == false) {
        $this->enabled = false;
      }
    }
  }
  /**
   * Enter description here...
   *
   * @param unknown_type $method
   * @return unknown
   */
  function quote($method = '') {
    global $order, $shipping_weight, $shipping_num_boxes, $total_count;

    // shipping adjustment
    switch (MODULE_SHIPPING_TABLE409_MODE) {
      case ('price'):
        $order_total = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;
        break;
      case ('weight'):
        $order_total = $shipping_weight;
        break;
      case ('item'):
        $order_total = $total_count - $_SESSION['cart']->free_shipping_items();
        break;
    }

    $table409_cost = split("[:,]" , MODULE_SHIPPING_TABLE409_COST);
    $size = sizeof($table409_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
      if (round($order_total,9) <= $table409_cost[$i]) {
        $shipping = $table409_cost[$i+1];
        break;
      }
    }

    if (MODULE_SHIPPING_TABLE409_MODE == 'weight') {
      $shipping = $shipping * $shipping_num_boxes;
      // show boxes if weight
      switch (SHIPPING_BOX_WEIGHT_DISPLAY) {
        case (0):
        $show_box_weight = '';
        break;
        case (1):
        $show_box_weight = ' (' . $shipping_num_boxes . ' ' . TEXT_SHIPPING_BOXES . ')';
        break;
        case (2):
        $show_box_weight = ' (' . number_format($shipping_weight * $shipping_num_boxes,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
        default:
        $show_box_weight = ' (' . $shipping_num_boxes . ' x ' . number_format($shipping_weight,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
      }
    }

    $this->quotes = array('id' => $this->code,
    'module' => MODULE_SHIPPING_TABLE409_TEXT_TITLE . $show_box_weight,
    'methods' => array(array('id' => $this->code,
    'title' => MODULE_SHIPPING_TABLE409_TEXT_WAY,
    'cost' => $shipping + MODULE_SHIPPING_TABLE409_HANDLING)));

    if ($this->tax_class > 0) {
      $this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    }

    if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title);

    return $this->quotes;
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function check() {
    global $db;
    if (!isset($this->_check)) {
      $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TABLE409_STATUS'");
      $this->_check = $check_query->RecordCount();
    }
    return $this->_check;
  }
  /**
   * Enter description here...
   *
   */
  function install() {
    global $db;
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Table409 Method', 'MODULE_SHIPPING_TABLE409_STATUS', 'True', 'Do you want to offer table409 rate shipping?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Shipping Table409', 'MODULE_SHIPPING_TABLE409_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items or count of the items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc', '6', '0', 'zen_cfg_textarea(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Table409 Method', 'MODULE_SHIPPING_TABLE409_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered or the total number of items orderd.', '6', '0', 'zen_cfg_select_option(array(\'weight\', \'price\', \'item\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE409_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', now())");
    $db->Execute("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_TABLE409_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'zen_get_tax_class_title', 'zen_cfg_pull_down_tax_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tax Basis', 'MODULE_SHIPPING_TABLE409_TAX_BASIS', 'Shipping', 'On what basis is Shipping Tax calculated. Options are<br />Shipping - Based on customers Shipping Address<br />Billing Based on customers Billing address<br />Store - Based on Store address if Billing/Shipping Zone equals Store zone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_TABLE409_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_TABLE409_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
  }
  /**
   * Enter description here...
   *
   */
  function remove() {
    global $db;
    $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function keys() {
    return array('MODULE_SHIPPING_TABLE409_STATUS', 'MODULE_SHIPPING_TABLE409_COST', 'MODULE_SHIPPING_TABLE409_MODE', 'MODULE_SHIPPING_TABLE409_HANDLING', 'MODULE_SHIPPING_TABLE409_TAX_CLASS', 'MODULE_SHIPPING_TABLE409_TAX_BASIS', 'MODULE_SHIPPING_TABLE409_ZONE', 'MODULE_SHIPPING_TABLE409_SORT_ORDER');
  }
}
?>
26 Feb 2014, 6:31 PM
#97
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Hi Linda,

I never got a chance to thank you yesterday for helping me solve this, so I do believe I owe you a few cups of coffee! I sent you a wee donation for a few jars of Nescafe :)

26 Feb 2014, 6:51 PM
#98
ajeh avatar

ajeh

Oba-san

Join Date:
Sep 2003
Location:
Ohio
Posts:
62,757
Plugin Contributions:
1

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Thank you kindly ... we really appreciate the support ... :cool:

When I have time, I will have to look and see what the code is really doing here from what you posted yesterday as I was not thinking it would need all of that additional code to jump through hoops ... but I could be wrong ...

Linda McGrath
If you have to think ... you haven't been zenned ...

**Did YOU buy the Zen Cart Team a cup of coffee and a donut today? Just click here to support the Zen Cart Team!!**

Are you using the latest? Perhaps you've a problem that's fixed in the latest version: [Upgrade today!]
Officially PayPal-Certified! Just click here

Try our Zen Cart Recommended Services - Hosting, Payment and more ...
Signup for our Announcements Forums to stay up to date on important changes and updates!

26 Feb 2014, 7:33 PM
#99
limelites avatar

limelites

Totally Zenned

Join Date:
Jan 2009
Posts:
2,085
Plugin Contributions:
0

Re: Flat Rate Shipping - Table Rates - Duplicate for Category Specific Items?

Ajeh:

Thank you kindly ... we really appreciate the support ... :cool:

When I have time, I will have to look and see what the code is really doing here from what you posted yesterday as I was not thinking it would need all of that additional code to jump through hoops ... but I could be wrong ...

No problem, it's me who appreciates your support!

I think all the code is doing is checking if category exists in cart and either switching on the module or skipping to the other one.