Changeset 861591
- Timestamp:
- 02/20/2014 12:56:17 PM (12 years ago)
- Location:
- baggage-freight/trunk
- Files:
-
- 2 edited
-
class-wc-baggagefreight.php (modified) (5 diffs)
-
store-owner.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
baggage-freight/trunk/class-wc-baggagefreight.php
r857221 r861591 1 1 <?php 2 2 3 4 5 3 6 7 add_action('plugins_loaded', 'init_baggage_shipping', 0); 8 4 //add_action('plugins_loaded', 'init_baggage_shipping', 0); 9 5 10 11 6 7 12 8 13 9 function init_baggage_shipping() { 14 10 15 16 17 11 if ( ! class_exists( 'WC_Shipping_Method' ) ) return; 18 19 12 class WC_BF_Shipping extends WC_Shipping_Method { 20 13 21 22 23 14 /** 24 25 15 * __construct function. 26 27 16 * 28 29 17 * @access public 30 31 18 * @return void 32 33 19 */ 34 35 20 function __construct() { 36 37 21 $this->id = 'bf_shipping'; 38 39 22 $this->method_title = __('Baggage Freight Shipping', 'woocommerce'); 40 41 23 $this->init(); 42 43 24 } 44 25 45 46 47 26 /** 48 49 27 * init function. 50 51 28 * 52 53 29 * @access public 54 55 30 * @return void 56 57 31 */ 58 59 32 function init() { 60 61 33 // Load the form fields. 62 63 34 $this->init_form_fields(); 64 35 65 66 67 36 // Load the settings. 68 69 37 $this->init_settings(); 70 38 71 72 73 39 // Define user set variables 74 75 40 /* $this->enabled = $this->settings['enabled']; 76 77 41 $this->title = $this->settings['title']; 78 79 42 $this->min_amount = $this->settings['min_amount']; 80 81 43 $this->availability = $this->settings['availability']; 82 83 44 $this->countries = $this->settings['countries']; 84 85 45 $this->requires_coupon = $this->settings['requires_coupon']; 86 87 46 */ 88 89 90 47 91 48 $this->title = $this->get_option( 'title' ); 92 93 49 $this->type = $this->get_option( 'type' ); 94 95 50 $this->fee = $this->get_option( 'fee' ); 96 97 51 $this->type = $this->get_option( 'type' ); 98 99 52 $this->codes = $this->get_option( 'codes' ); 100 101 53 $this->availability = $this->get_option( 'availability' ); 102 103 54 $this->countries = $this->get_option( 'countries' ); 104 105 55 // Actions 106 107 56 add_action('woocommerce_update_options_shipping_'.$this->id, array(&$this, 'process_admin_options')); 108 109 57 } 110 58 111 59 112 113 114 115 60 /** 116 117 61 * Initialise Gateway Settings Form Fields 118 119 62 * 120 121 63 * @access public 122 123 64 * @return void 124 125 65 */ 126 127 66 function init_form_fields() { 128 129 67 global $woocommerce; 130 68 131 132 133 69 $this->form_fields = array( 134 135 70 'enabled' => array( 136 137 71 'title' => __( 'Enable/Disable', 'woocommerce' ), 138 139 72 'type' => 'checkbox', 140 141 73 'label' => __( 'Enable Baggage Freight Shipping', 'woocommerce' ), 142 143 74 'default' => 'yes' 144 145 75 ), 146 147 76 'title' => array( 148 149 77 'title' => __( 'Method Title', 'woocommerce' ), 150 151 78 'type' => 'text', 152 153 79 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ), 154 155 80 'default' => __( 'Baggage Freight Shipping', 'woocommerce' ) 156 157 81 ), 158 159 82 160 161 83 'availability' => array( 162 163 84 'title' => __( 'Method availability', 'woocommerce' ), 164 165 85 'type' => 'select', 166 167 86 'default' => 'all', 168 169 87 'class' => 'availability', 170 171 88 'options' => array( 172 173 89 'all' => __('All allowed countries', 'woocommerce'), 174 175 90 'specific' => __('Specific Countries', 'woocommerce') 176 177 91 ) 178 179 92 ), 180 181 93 'countries' => array( 182 183 94 'title' => __( 'Specific Countries', 'woocommerce' ), 184 185 95 'type' => 'multiselect', 186 187 96 'class' => 'chosen_select', 188 189 97 'css' => 'width: 450px;', 190 191 98 'default' => '', 192 193 99 'options' => $woocommerce->countries->countries 194 195 100 ) 196 197 101 ); 198 102 199 200 201 103 } 202 104 203 105 204 205 206 207 106 /** 208 209 107 * Admin Panel Options 210 211 108 * - Options for bits like 'title' and availability on a country-by-country basis 212 213 109 * 214 215 110 * @since 1.0.0 216 217 111 * @access public 218 219 112 * @return void 220 221 113 */ 222 223 114 public function admin_options() { 224 115 225 226 227 116 ?> 228 229 117 <h3><?php _e('Baggage Freight Shipping', 'woocommerce'); ?></h3> 230 231 118 <p><?php _e('Baggage Freight Shipping ', 'woocommerce'); ?></p> 232 233 119 <table class="form-table"> 234 235 120 <?php 236 237 121 $this->generate_settings_html(); 238 239 122 ?> 240 241 123 </table> 242 243 124 <?php 244 245 246 125 247 126 } 248 127 249 128 250 251 252 253 129 254 255 130 function is_available( $package ) { 256 257 131 global $woocommerce; 258 132 259 260 261 133 if ( $this->enabled == "no" ) return false; 262 134 263 264 265 135 $ship_to_countries = ''; 266 136 267 268 269 137 if ( $this->availability == 'specific' ) { 270 271 138 $ship_to_countries = $this->countries; 272 273 139 } else { 274 275 140 if ( get_option('woocommerce_allowed_countries') == 'specific' ) 276 277 141 $ship_to_countries = get_option('woocommerce_specific_allowed_countries'); 278 279 } 280 281 142 } 282 143 283 144 if ( is_array( $ship_to_countries ) ) 284 285 145 if ( ! in_array( $package['destination']['country'], $ship_to_countries ) ) 286 287 146 return false; 288 147 289 290 291 148 // Enabled logic 292 293 149 $is_available = true; 294 150 295 296 297 151 if ( $this->requires_coupon == "yes" ) { 298 152 299 300 301 153 if ( $woocommerce->cart->applied_coupons ) { 302 303 154 foreach ($woocommerce->cart->applied_coupons as $code) { 304 305 155 $coupon = new WC_Coupon( $code ); 306 156 307 308 309 157 if ( $coupon->enable_free_shipping() ) 310 311 158 return true; 312 313 159 } 314 315 160 } 316 161 317 318 319 162 // No coupon found, as it stands, free shipping is disabled 320 321 163 $is_available = false; 322 164 323 324 325 } 326 327 165 } 328 166 329 167 if ( isset( $woocommerce->cart->cart_contents_total ) && ! empty( $this->min_amount ) ) { 330 168 331 332 333 169 if ( $woocommerce->cart->prices_include_tax ) 334 335 170 $total = $woocommerce->cart->tax_total + $woocommerce->cart->cart_contents_total; 336 337 171 else 338 339 172 $total = $woocommerce->cart->cart_contents_total; 340 173 341 342 343 174 if ( $this->min_amount > $total ) 344 345 175 $is_available = false; 346 347 176 else 348 349 177 $is_available = true; 350 178 351 352 353 } 354 355 179 } 356 180 357 181 return apply_filters( 'woocommerce_shipping_' . $this->id . '_is_available', $is_available ); 358 359 182 } 360 183 361 184 362 363 364 365 185 /** 366 367 186 * calculate_shipping function. 368 369 187 * 370 371 188 * @access public 372 373 189 * @return array 374 375 190 */ 376 377 191 function calculate_shipping($package = array() ) 378 379 { 380 381 192 { 382 193 383 194 global $woocommerce; 384 385 195 global $wpdb; 386 387 196 $prefix = $wpdb->prefix; 388 389 197 $sql = "select * from baggage_storeowner"; 390 391 198 $res = mysql_query($sql); 392 393 199 $row = mysql_fetch_assoc($res); 394 395 396 397 398 399 400 200 201 202 401 203 $sql_setting = "select * from baggage_settings"; 402 403 204 $res_setting = mysql_query($sql_setting); 404 405 406 205 407 206 if(mysql_num_rows($res_setting)) 408 409 { 410 207 { 411 208 $row_setting = mysql_fetch_assoc($res_setting); 412 413 209 $package_type = $row_setting["package_type"]; 414 415 210 $hfee = floatval($row_setting["hfee"]); 416 417 } 418 211 } 419 212 else 420 421 { 422 423 $package_type = "0"; 424 213 { 214 $package_type = "1"; 425 215 $hfee = "0.00"; 426 427 }428 429 430 216 } 217 218 $Email = trim($row["Email"]); 219 $Password = trim($row["Password"]); 220 431 221 $sql_dimension = "select * from baggage_dimensions"; 432 433 222 $res_dimension = mysql_query($sql_dimension); 434 435 223 if(mysql_num_rows($res_dimension)) 436 437 { 438 224 { 439 225 $row_dimension = mysql_fetch_assoc($res_dimension); 440 441 226 $d_Height = $row_dimension["height"]; 442 443 227 $d_width = $row_dimension["width"]; 444 445 228 $d_length = $row_dimension["length"]; 446 447 } 448 229 } 449 230 else 450 451 { 452 231 { 453 232 $d_Height = "10"; 454 455 233 $d_width = "10"; 456 457 234 $d_length = "10"; 458 459 } 460 461 462 463 464 $Email = trim($row["Email"]); 465 $Password = trim($row["Password"]); 466 467 235 } 236 237 238 468 239 $CollectCountry = $row["CollectCountry"]; 469 470 240 $strUrl = "http://www.baggagefreight.com.au/api/getCountryName.aspx?countryid=".$CollectCountry; 471 472 241 $cCountry = trim(file_get_contents($strUrl)); 473 474 242 $cCity = trim($row["CollectCity"]); 475 476 243 $cState = trim($row["CollectState"]); 477 478 244 $cPin = trim($row["CollectZip"]); 479 480 481 245 482 246 $Weight = ""; 483 484 247 $Length = ""; 485 486 248 $Width = ""; 487 488 249 $Height = ""; 489 490 250 $Unit = ""; 491 492 251 $Desc = ""; 493 494 495 496 497 252 253 498 254 $packedsku = ''; 499 500 255 $totweight = 0; 501 502 256 $j=1; 503 504 257 $k=0; 505 506 258 $packeditem = NULL; 507 508 509 510 511 259 260 512 261 $Amount =$woocommerce->cart->subtotal; 513 514 515 516 517 262 263 518 264 $loop = 0; 519 520 521 265 522 266 foreach ( $woocommerce->cart->get_cart() as $itms ) 523 524 { 525 267 { 526 268 $product_id = $itms["product_id"]; 527 528 269 $quantity = $itms["quantity"]; 529 530 531 532 533 270 271 534 272 $post_data = get_post($product_id); 535 536 273 $product_title = $post_data->post_title; 537 538 539 274 540 275 $sql_SKU = "select meta_value from ".$prefix."postmeta where post_id=".$product_id." and meta_key='_sku'"; 541 542 276 $res_Sku = mysql_query($sql_SKU); 543 544 277 $row_sku = mysql_fetch_assoc($res_Sku); 545 546 278 $sku = $row_sku["meta_value"]; 547 548 549 279 550 280 $strDestCountry = get_post_meta($product_id, '_shipping_country', true); 551 552 553 554 555 281 282 556 283 if($package_type=="1") 557 558 284 { 559 560 285 $W = get_post_meta($product_id, '_weight', true); 561 562 286 $L = get_post_meta($product_id, '_length', true); 563 564 287 $Wi = get_post_meta($product_id, '_width', true); 565 566 288 $H = get_post_meta($product_id, '_height', true); 567 568 289 } 569 570 290 else 571 572 291 { 573 574 292 $sql = "select * from baggage_excel where SKU='$sku'"; 575 576 293 $res = mysql_query($sql); 577 578 294 $row = mysql_fetch_assoc($res); 579 580 295 581 582 296 $W = $row["Weight"]; 583 584 297 $L = $row["Length"]; 585 586 298 $Wi = $row["Width"]; 587 588 299 $H = $row["Height"]; 589 590 300 } 591 592 593 594 595 301 302 596 303 if($L == "") 597 598 304 { 599 600 305 $L = $d_length; 601 602 306 } 603 604 605 307 606 308 if($Wi == "") 607 608 309 { 609 610 310 $Wi = $d_width; 611 612 311 } 613 614 615 312 616 313 if($H == "") 617 618 314 { 619 620 315 $H = $d_height; 621 622 316 } 623 624 625 626 $row_packtype = mysql_fetch_array(mysql_query("select * from baggage_product_pack where SKU='$sku'")); 627 628 629 630 631 632 if($row_packtype['packType']==1) 633 634 { 635 636 637 638 $packeditem[$loop] = array( 639 640 "sku" => $sku, 641 642 "l" => $L, 643 644 "w" => $Wi, 645 646 "h" => $H, 647 648 "weight" => $W, 649 650 "type" =>$row_packtype['packType'], 651 652 "qty" =>$quantity, 653 654 ); 655 656 657 658 $loop++; 659 660 661 662 } 663 664 else 665 666 { 667 317 318 319 668 320 for($i=1;$i<=$quantity;$i++) 669 670 321 { 671 672 322 $Weight = $Weight.$W.","; 673 674 323 $Length = $Length.$L.","; 675 676 324 $Width = $Width.$Wi.","; 677 678 325 $Height = $Height.$H.","; 679 680 326 $Unit = $Unit."cm,"; 681 682 327 $strDescription = $sku; 683 684 328 if(strlen($strDescription) > 30) 685 686 329 { 687 688 330 $strDescription = substr($strDescription, 0, 29); 689 690 331 } 691 692 332 693 694 333 $strDescription = str_replace(",","",$strDescription); 695 696 334 697 698 335 $Desc = $Desc.$strDescription.","; 699 700 336 701 702 337 } 703 704 } 705 706 707 708 709 710 } 711 712 713 714 715 716 /*********************** Start Calculation for packed***********************/ 717 718 719 720 if(count($packeditem)>0) 721 722 { 723 724 /*for($p=0; $p<count($product);$p++) 725 726 { 727 728 if($product[$p]['type']==1){ $packeditem[] = $product[$p];} 729 730 if($product[$p]['type']==0){$unpackeditem[] = $product[$p];} 731 732 }*/ 733 734 735 736 for($pkd=0; $pkd<count($packeditem);$pkd++) 737 738 { 739 740 if($packeditem[$pkd]["qty"]>1) {$packedsku .= $j.".".$packeditem[$pkd]["sku"]."(".$packeditem[$pkd]["qty"]."items) ";} 741 742 else{ $packedsku .= $j.".".$packeditem[$pkd]["sku"]." "; } 743 744 745 746 $totweight = $totweight+($packeditem[$pkd]["weight"]*$packeditem[$pkd]["qty"]); 747 748 749 750 for($q=1; $q<=$packeditem[$pkd]['qty'];$q++) 751 752 { 753 754 $numbers = array($packeditem[$pkd]['l'],$packeditem[$pkd]['w'],$packeditem[$pkd]['h']); 755 756 rsort($numbers); 757 758 759 760 foreach ($numbers as $key => $val) 761 762 { $sortdimension[$k][$key] = $val; } 763 764 $k++; 765 766 } 767 768 $j++; 769 770 } 771 772 773 774 775 776 for($sort = 0; $sort<count($sortdimension); $sort++) 777 778 { 779 780 $alllength[] = $sortdimension[$sort][0]; 781 782 $allwidth[] = $sortdimension[$sort][1]; 783 784 $allheight[] = $sortdimension[$sort][2]; 785 786 } 787 788 789 790 $tot_height = 0; 791 792 for($i = 0; $i<count($allheight); $i++) 793 794 { 795 796 $tot_height = $tot_height+$allheight[$i] ; 797 798 } 799 800 801 802 $item["packed"]["sku"] = $packedsku; 803 804 $item["packed"]["l"] = max($alllength); 805 806 $item["packed"]["w"] = max($allwidth); 807 808 $item["packed"]["h"] = $tot_height; 809 810 $item["packed"]["weight"] = $totweight; 811 812 $item["packed"]["unit"] = "cm"; 813 814 815 816 } 817 818 819 820 821 822 /*********************** End Calculation for packed***********************/ 823 824 825 338 339 340 341 } 342 343 344 826 345 $Weight = $Weight.$item["packed"]["weight"].","; 827 828 346 $Length = $Length.$item["packed"]["l"].","; 829 830 347 $Width = $Width.$item["packed"]["w"].","; 831 832 348 $Height = $Height.$item["packed"]["h"].","; 833 834 349 $Unit = $Unit.$item["packed"]["unit"].","; 835 836 350 $Desc = $Desc.$item["packed"]["sku"].","; 837 838 839 351 352 $Weight = substr($Weight, 0, -1); 353 $Length = substr($Length, 0, -1); 354 $Width = substr($Width, 0, -1); 355 $Height = substr($Height, 0, -1); 356 $Unit = substr($Unit, 0, -1); 357 $Desc = substr($Desc, 0, -1); 358 840 359 $Weight = substr($Weight, 0, -1); 841 360 if($Weight[strlen($Weight)-1]==",") … … 868 387 $Desc = substr($Desc, 0, -1); 869 388 } 870 871 872 873 874 389 390 875 391 $dCountry = trim($package["destination"]["country"]); 876 877 392 $dState = trim($package["destination"]["state"]); 878 879 393 $dPin = trim($package["destination"]["postcode"]); 880 881 394 $dCity = trim($package["destination"]["city"]); 882 883 884 395 885 396 $address = trim($package["destination"]["address"]); 886 887 397 $address_2 = trim($package["destination"]["address_2"]); 888 889 890 398 891 399 $objC = new WC_Countries(); 892 893 400 $dCountry = trim($objC->countries[$dCountry]); 894 895 896 897 898 899 900 401 402 403 901 404 if($dPin!="") 902 903 405 { 904 905 906 907 406 $data = array( 908 407 … … 911 410 'Password' => $Password, 912 411 412 'Tech' => 'Wordpress', 413 913 414 'cCountry' => $cCountry, 914 415 … … 941 442 'Amount' => $Amount 942 443 943 ); 444 ); 445 446 447 448 449 944 450 451 $ch = curl_init('http://www.baggagefreight.com.au/api/apiminrate.aspx'); 452 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 453 curl_setopt($ch, CURLOPT_POST, 1); 454 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 455 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 456 $result = curl_exec($ch); 945 457 946 947 458 948 459 949 950 $ch = curl_init('http://www.baggagefreight.com.au/api/apiminrate.aspx');951 952 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");953 954 curl_setopt($ch, CURLOPT_POST, 1);955 956 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);957 958 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);959 960 $result = curl_exec($ch);961 962 963 964 965 966 967 968 460 969 970 461 if($result) 971 972 462 { 973 974 463 975 976 464 $arrBFIShipping = explode(":",$result); 977 978 465 $ship_cost = floatval($arrBFIShipping[0]); 979 980 466 $_SESSION["bf_strBookingAmount"] = $ship_cost; 981 982 467 $carrier = $arrBFIShipping[1]; 983 984 468 $_SESSION["bf_strCarrier"] = $carrier; 985 986 469 $service = $arrBFIShipping[2]; 987 988 470 $_SESSION["bf_strService"] = $service; 989 990 471 $transit = $arrBFIShipping[4]; 991 992 472 993 994 473 $warranty = floatval($arrBFIShipping[5]); 995 996 474 997 998 475 $arrTransit = explode(" ",$transit); 999 1000 476 $transitTime = $arrTransit[0]; 1001 1002 477 $_SESSION["bf_strTransitTime"] = $transitTime; 1003 1004 478 $_SESSION["bf_warranty"] = $warranty; 1005 1006 479 1007 1008 480 1009 1010 481 if(floatval($ship_cost)>0) 1011 1012 482 { 1013 1014 1015 483 1016 484 $_SESSION["bf_Weight"] = $Weight; 1017 1018 485 $_SESSION["bf_Length"] = $Length; 1019 1020 486 $_SESSION["bf_Width"] = $Width; 1021 1022 487 $_SESSION["bf_Height"] = $Height; 1023 1024 488 $_SESSION["bf_strDescription"] = $Desc; 1025 1026 489 $_SESSION["bf_Unit"] = $Unit; 1027 1028 1029 490 1030 491 $_SESSION["bf_booking"] = "1"; 1031 1032 492 $_SESSION["bf_strTotalBookingRate"] = $Amount; 1033 1034 1035 1036 1037 493 494 1038 495 $args= array( 1039 1040 496 'id' => $this->id, 1041 1042 497 'label' => $service." (Without Transit Warranty)", 1043 1044 498 'cost' => $ship_cost 1045 1046 499 ); 1047 1048 1049 1050 1051 500 501 1052 502 $this->add_rate( $args ); 1053 1054 1055 1056 1057 503 504 1058 505 if($warranty>0) 1059 1060 506 { 1061 1062 507 $ship_cost = $ship_cost+$warranty; 1063 1064 1065 508 1066 509 $args= array( 1067 1068 510 'id' => $this->id."1", 1069 1070 511 'label' => $service." (With Transit Warranty)", 1071 1072 512 'cost' => $ship_cost 1073 1074 513 ); 1075 1076 514 } 1077 1078 1079 1080 1081 515 516 1082 517 $this->add_rate( $args ); 1083 1084 518 } 1085 1086 519 } 1087 1088 520 } 1089 1090 521 1091 522 523 1092 524 } 1093 525 1094 1095 1096 526 } 1097 527 1098 1099 1100 528 } 1101 529 1102 1103 1104 530 function add_bf_shipping_method( $methods ) { 1105 1106 531 $methods[] = 'WC_BF_Shipping'; 1107 1108 532 return $methods; 1109 1110 533 } 1111 534 1112 1113 1114 535 function custom_woocommerce_billing_fields( $fields ) { 1115 536 1116 537 1117 1118 1119 1120 538 /*$fields['billing_city'] = array( 1121 1122 539 'label' => __('Town/City', 'woocommerce'), 1123 1124 540 'placeholder' => _x('Town/City', 'placeholder', 'woocommerce'), 1125 1126 541 'required' => true, 1127 1128 542 'class' => array('form-row-first', 'update_totals_on_change') 1129 1130 543 );*/ 1131 1132 544 1133 1134 545 $fields['billing_city']['class'] = array('form-row-first', 'update_totals_on_change'); 1135 1136 546 1137 1138 547 1139 548 1140 1141 1142 549 return $fields; 1143 1144 550 } 1145 551 1146 1147 1148 552 //add_filter( 'woocommerce_billing_fields', 'custom_woocommerce_billing_fields' ); 1149 553 … … 1151 555 1152 556 1153 1154 1155 1156 1157 1158 557 function custom_woocommerce_shipping_fields( $fields ) { 1159 558 1160 1161 1162 559 /*$fields['shipping_city'] = array( 1163 1164 560 'label' => __('Town/City', 'woocommerce'), 1165 1166 561 'placeholder' => __('Town/City', 'placeholder', 'woocommerce'), 1167 1168 562 'required' => true, 1169 1170 563 'class' => array('form-row-first', 'update_totals_on_change') 1171 1172 564 );*/ 1173 1174 565 1175 1176 566 $fields['shipping_city']['class'] = array('form-row-first','update_totals_on_change'); 1177 567 1178 1179 1180 568 return $fields; 1181 1182 569 } 1183 570 1184 1185 1186 571 //add_filter( 'woocommerce_shipping_fields', 'custom_woocommerce_shipping_fields'); 1187 572 1188 573 1189 574 1190 1191 1192 1193 1194 1195 1196 575 add_action( 'woocommerce_shipping_init', 'init_baggage_shipping',0 ); 1197 576 1198 577 add_filter('woocommerce_shipping_methods', 'add_bf_shipping_method' ); -
baggage-freight/trunk/store-owner.php
r820997 r861591 653 653 <h3 class="hndle" style="height:35px; padding-top:20px;"> 654 654 655 <span ><strong> Upon completing this form, and pressing "submit" your details will be forwarded to Baggagefreight, and your account set up on our site.</strong></span>655 <span ><strong>Please fill in the registration form below to gain permission to use and access our best shipping rates. Our shipping module will not display rates or allow you to generate shipping labels without Baggage Freight's prior approval.</strong></span> 656 656 657 657 </h3>
Note: See TracChangeset
for help on using the changeset viewer.