Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

New UPS XML Shipping Module available


Recommended Posts

* The UPS Shipping Tool is only available for internal use by UPS customers. It is not available for use on a public Web site.
This seemingly contradicts everything they say about their Online tools, so I assume they mean to say that it is not to be used as an application on a website somewhere as a service, but "only" as a tool for your clients and employees.

 

Like they say on their website:

UPS OnLine Tools

 

Customize Your Applications with UPS Technology

Integrate UPS-specific application programming interfaces (APIs) into your enterprise applications or Web site

Select from our flexible options the best one to suit your needs

Choose a programming language that supports secure HTTP communication across the Internet

Use our technical documentation to guide you through the requirements for integrating the tools

 

 

Products and Features

UPS Tracking Tool - Provides up-to-the-minute package status to you and your customers (HTML and XML)

 

UPS Rates & Service Selection Tool - Provides quotes for UPS service, allowing your customers and employees to compare prices and select the UPS shipping service that best suits their needs (XML)

UPS Time in Transit Tool - Enables your employees and customers to compare different UPS shipping services where UPS delivers around the world (XML)

 

 

Benefits

Improves customer service - Correct order errors at the point of entry, offer flexible shipping options, and customize your tracking numbers

Adds Web site functionality - Web-enable your entire shipping procedure and allow your online customers to shop, determine transportation, and track from one location

Increases time on your site - Bring customers back by enabling them to manage their entire order from your site

Reduces costs - Make your shipping more efficient by reducing returns, decreasing customer support phone calls, and reducing address errors at order entry

Simplifies your process - Help improve regulatory compliance and transform international trade from a daunting challenge into a competitive advantage

 

Also which one to I select on tools? Should I get the Standard tools - UPS Rates & Service Selection? Or is there a better one to select on the UPS website for the access key?
You don't get a choice. UPS XML uses two tools: Rates & Services and Time in Transit. That's it.
Link to comment
Share on other sites

Did you set the upsxml module (admin section) to use dimension support? By default it doesn't and uses the osC Enter the Maximum Package Weight you will ship value (default 50).

yes i did, and ive added 2 boxes so far but to no avail. any suggestions?

Link to comment
Share on other sites

yes i did, and ive added 2 boxes so far but to no avail. any suggestions?
Try to see what info it gets. Around line 283 there is I think this part:

// debug only:
/* echo '<pre>Packages and variables:<br />';
print_r($this);
echo '<br />';
exit;  */

Uncomment it (taking out /* and */) and see if max_weight is set correctly etc.

Link to comment
Share on other sites

Janz: It gives me several options to click on then takes me to the next page for filling out the form. I just want to know which on to select on UPS website page fot the XML tool. This is what they give for selection options:

 

Standard Tools

 

 

UPS Tracking

For a given UPS tracking or reference number, this tool identifies the package(s) and provides detailed information about each package, including the current shipping status and the time and location of each scan while in transit.

 

UPS Rates & Service Selection

The UPS Rates & Service Selection tool returns rates for available UPS domestic and international services, and provides UPS published shipping rates.

 

UPS Time in Transit

Enable your customers to compare the speed of different UPS shipping services to everywhere UPS delivers around the world.

 

UPS U.S. Address Validation

This tool validates that an input city, state and postal code are correct for addresses in United States. If an error is detected, a list of up to 10 valid city-state-postal code combinations that closely match the input are returned.

 

UPS File Download for Quantum ViewTM

Retrieve your Quantum View files automatically and import them directly into your back-end systems.

 

Premium Tools

 

UPS Signature Tracking

This tool is for companies that want to reduce the time needed to confirm that goods are received before issuing an invoice. UPS OnLine Signature Tracking lets you confirm delivery by viewing a digital signature of the authorized recipient in real time.

 

UPS Shipping

This tool offers you and your employees self-service shipping 24/7. Designed especially for customers wanting a custom shipping application, this tool enables businesses to monitor their shipping activities and elevate customer service while lowering overall operational costs.

 

UPS TradeAbilityTM Web Services

Manage the movement of international goods in a timely, efficient, and compliant manner. You can screen for denied parties, check import compliance, estimate landed cost, and detect export licenses.

 

 

Thanks much

Link to comment
Share on other sites

Try to see what info it gets. Around line 283 there is I think this part:

// debug only:
/* echo '<pre>Packages and variables:<br />';
print_r($this);
echo '<br />';
exit;  */

Uncomment it (taking out /* and */) and see if max_weight is set correctly etc.

what file is that in?

Link to comment
Share on other sites

 => upsxml

[title] => United Parcel Service (XML)

[description] => United Parcel Service (XML)

[icon] => images/icons/shipping_ups.gif

[enabled] => 1

[types] =>

[boxcount] =>

[sort_order] => 0

[tax_class] => 0

[access_key] => ******************

[access_username] => **********

[access_password] => ************

[origin] => US Origin

[origin_city] => Miami

[origin_stateprov] => FL

[origin_country] => US

[origin_postalcode] => 33127

[pickup_method] => Suggested Retail Rates (UPS Store)

[package_type] => Package

[unit_weight] => LBS

[unit_length] => IN

[dimensions_support] => 2

[email_errors] => 1

[handling_type] => Flat Fee

[handling_fee] => 0

=> Residential

[customer_classification] => 03

[protocol] => https

[host] => wwwcie.ups.com

[port] => 443

[path] => /ups.app/xml/Rate

[transitpath] => /ups.app/xml/TimeInTransit

[version] => UPSXML Rate 1.0001

[transitversion] => UPSXML Time In Transit 1.0002

[timeout] => 60

[xpci_version] => 1.0001

[transitxpci_version] => 1.0002

[items_qty] => 1

[timeintransit] => 0

[timeInTransitView] => Raw

[weight_for_timeintransit] => 32

[today_unix_time] => 1154572656

[today] => 20060802

[pkgvalue] => 225

[use_exec] => 0

[pickup_methods] => Array

(

[Daily Pickup] => 01

[Customer Counter] => 03

[One Time Pickup] => 06

[On Call Air Pickup] => 07

[suggested Retail Rates (UPS Store)] => 11

[Letter Center] => 19

Link to comment
Share on other sites

Hi Jan, John, and everyone!

I'm back. I was here about a month ago asking about this module. I had some other projects I needed to attend to, but now I need to make this work. I've searched through the pages of this forum from August of last year and I can't find anything. If I've missed it, I apologize.

 

I've installed the latest Feb. 7 version and the Attr w/ weights fix, but I'm still having two problems:

 

First, the Ready-To-Ship option is not working (even though the box is checked), so it puts everything in one box.

 

The second problem I think has to do with the Products Attributes Module. This creates a pulldown list of product options to choose what kind of product you want to put in the cart. For example, if you sell T-shirts the pull down could have the different sizes of S, M, L, & XL. Anyway, in my situation, each item in the pulldown list has a different weight. These items are cases of cassettes and the difference from the smallest case to the largest case is 10 lbs. This messes up the UPS quotes and we really eat it on the shipping. The UPSXML module is only adding the weight that you enter on the original product page and doesn't add the weight from each "attribute" in the pulldown list. The original UPS module that came with the cart had no problem with the attributes weights.

 

Can anyone help?

 

A little info:

Cart version - 2.2ms2

Heavily Modded

Tare - .03 lbs

UPS Shipping Enabled - True

Production Mode

Dimensions Support - Ready-To-Ship only

Handling Fee - Flat Rate, $0.00

 

Corinne

Link to comment
Share on other sites

I've installed the latest Feb. 7 version and the Attr w/ weights fix, but I'm still having two problems:

 

First, the Ready-To-Ship option is not working (even though the box is checked), so it puts everything in one box.

Check if the ready-to-ship option has been added to the database. I remember there was a problem with that long ago and it wasn't. You can also check it by adding something to the upsxml.php shipping file. In the function quote (around line 200) or something

		$productsArray = $cart->get_products();
// BOF echo'ing the info upsxml gets:
			echo '<pre>';
			print_r($productsArray);
			echo '</pre>'; // EOF echo'ing the info upsxml gets

The second problem I think has to do with the Products Attributes Module. The original UPS module that came with the cart had no problem with the attributes weights.
Then UPSXML won't have a problem with it either, since it has nothing to do with it. The attributes weight is added to the product outside of the shipping modules. See above for the echo'ing, you see straight away what the weights are associated with the product.
Link to comment
Share on other sites

max weight is set at 16lbs so im not sure why its getting 150lbs
Check that by echo'ing it. Find function packProducts (somewhere in the middle of the file) and print the info of the boxes you have:

	function packProducts($productsArray) {
	$definedPackages = $this->getPackagesByVol();
			 echo '<pre>';
			 print_r($definedPackages);

It will print something like this:

Array
(
[0] => Array
	(
		[id] => 2
		[name] => 8x8x8
		[description] => 8x8x8
		[length] => 8.00
		[width] => 8.00
		[height] => 8.00
		[empty_weight] => 1.00
		[max_weight] => 30.00
		[volume] => 512.00
	)

Link to comment
Share on other sites

Check if the ready-to-ship option has been added to the database. I remember there was a problem with that long ago and it wasn't. You can also check it by adding something to the upsxml.php shipping file. In the function quote (around line 200) or something

		$productsArray = $cart->get_products();
// BOF echo'ing the info upsxml gets:
			echo '<pre>';
			print_r($productsArray);
			echo '</pre>'; // EOF echo'ing the info upsxml gets

Then UPSXML won't have a problem with it either, since it has nothing to do with it. The attributes weight is added to the product outside of the shipping modules. See above for the echo'ing, you see straight away what the weights are associated with the product.

 

Hi Jan,

I checked the database and "products_ready_to_ship" is there. The install also adds several "package_whatever" to the database, but not a "package_ready_to_ship". If that is needed, then it is missing from the install.

 

I did the echo thing. Very interesting. Our cart is live, so if any of the customers see it, they're going to be very confused. Here's what I get with the echo:

Array
(
[0] => Array
	(
		[id] => 58{2}34
		[name] => Case of Cassette Albums: 0+2 & Other Sizes
		[model] => 
		[image] => binders2.jpg
		[price] => 99.0000
		[quantity] => 1
		[weight] => 10
		[length] => 
		[width] => 
		[height] => 
		[ready_to_ship] => 
		[final_price] => 77.75
		[attributes_price] => -21.25
		[tax_class_id] => 1
		[attributes] => Array
			(
				[2] => 34
			)

	)

[1] => Array
	(
		[id] => 29{1}18
		[name] => Single Copying Cassettes: C-10 & Other Lengths
		[model] => 
		[image] => casstape.gif
		[price] => 0.3900
		[quantity] => 5
		[weight] => 0.06
		[length] => 
		[width] => 
		[height] => 
		[ready_to_ship] => 
		[final_price] => 0.48
		[attributes_price] => 0.09
		[tax_class_id] => 1
		[attributes] => Array
			(
				[1] => 18
			)

	)

)

 

As you can see, none of the new fields (L,W,H,RTS) has any information stored in them, so there seems to be some kind of problem with entering the information. Do you know where this would happen?

 

The weight for the cassette albums is wrong (the first array). It should be 20. This item was one from the pulldown menu. The 10 is from the page where you enter all the product information.

 

Also, I just noticed that the module sets a default of 12 for all of the product dimensions. Since we aren't using the box dimensions for calculating, this won't affect anything. Right?

 

Corinne

Link to comment
Share on other sites

Oh, one more thing. The USPS module is calculating the correct weight, so I know all of the information is correct. Its just not getting to the right places in the UPSXML module.

 

Corinne

Link to comment
Share on other sites

Check that by echo'ing it. Find function packProducts (somewhere in the middle of the file) and print the info of the boxes you have:

	function packProducts($productsArray) {
	$definedPackages = $this->getPackagesByVol();
			 echo '<pre>';
			 print_r($definedPackages);

It will print something like this:

Array
(
[0] => Array
	(
		[id] => 2
		[name] => 8x8x8
		[description] => 8x8x8
		[length] => 8.00
		[width] => 8.00
		[height] => 8.00
		[empty_weight] => 1.00
		[max_weight] => 30.00
		[volume] => 512.00
	)

 

 

this is what i get

Array

(

[0] => Array

(

[id] => 1

[name] => businesscard

[description] => businesscard

[length] => 11.00

[width] => 8.00

[height] => 6.00

[empty_weight] => 0.00

[max_weight] => 16.00

[volume] => 528.00

)

 

)

 

and when i checkout it says this

United Parcel Service (XML) (1 pkg, 32 lbs total)

when it should say 2pkg, 32 lbs total

Edited by Santaowns
Link to comment
Share on other sites

i think that it isnt taking my added options into effect when determining the dimensions support, but it does add right cause that was the correct weight for what i wanted to order but id lose about 10$ and more on larger quantities.

 

so for example 5000 business cards is 16 lbs so 1pkg at 16 lbs and 10000 should be 2pkg at 32lbs please help :(

Link to comment
Share on other sites

I did the echo thing. Very interesting. Our cart is live, so if any of the customers see it, they're going to be very confused.
I hope you removed the echo once you got what you put it in for (information).
As you can see, none of the new fields (L,W,H,RTS) has any information stored in them, so there seems to be some kind of problem with entering the information. Do you know where this would happen?
My guess is you didn't add the changes as suggested in step 3 of the dimensions.txt file to the catalog/includes/classes/shopping_cart.php file. Those are in the function get_products and query the information of length, width, ready-to-ship. Since the information taken from there is used for the weight calculation and not $shipping_weight (which is used if you don't use any dimensions support) that explains why the weight is OK with USPS.
Also, I just noticed that the module sets a default of 12 for all of the product dimensions. Since we aren't using the box dimensions for calculating, this won't affect anything. Right?
Right. I see that in the latest version the default is 30 but yes, it doesn't make any difference.
Link to comment
Share on other sites

Hey Jan,

It looks like I have a lot of work ahead of me. What a mess! I checked my e-mail and now I have the dreaded TimeInTransit and cURL error messages. I know I've seen those in this thread before, so you don't have to worry about them (for now, anyway).

 

I hope you removed the echo once you got what you put it in for (information).

Yeah, I did. Right before I left work yesterday. That particular cart doesn't get a whole lot of business, so I wasn't terribly worried. I just thought it was kind-of funny.

 

My guess is you didn't add the changes as suggested in step 3 of the dimensions.txt file to the catalog/includes/classes/shopping_cart.php file. Those are in the function get_products and query the information of length, width, ready-to-ship.

I think you may have identified the spot, but its not as easy to fix as you may think. That particular function already had code changes from three other modules, so the code I was supposed to change actually doesn't exist any more in my file. The Price Break module changes it to this:

//BOF Price Break Module
	if ($products = $pf->loadProduct($products_id, $languages_id)) {
	  $products_price = $pf->computePrice($this->contents[$products_id]['qty']);
//EOF Price Break Module

To me, it looked like they made some kind of function to run through the products, so I was hoping that it would be okay. It seemed to work with the other product modules that I had installed.

Here is the whole "get_products" function. You will be able to see what a mess I'm dealing with.

	function get_products() {
  global $languages_id;

  if (!is_array($this->contents)) return false;
//BOF Price Break Module
  $pf = new PriceFormatter;
//EOF Price Break Module

  $products_array = array();
  reset($this->contents);
  while (list($products_id, ) = each($this->contents)) {
//BOF Price Break Module
	if ($products = $pf->loadProduct($products_id, $languages_id)) {
	  $products_price = $pf->computePrice($this->contents[$products_id]['qty']);
//EOF Price Break Module

//BOF phpmom.com advanced attribute price //hadir
	  $attributes_price = 0;

	  if (isset($this->contents[$products_id]['attributes'])) {
		reset($this->contents[$products_id]['attributes']);
		while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
		  $attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'");
		  $attribute_price = tep_db_fetch_array($attribute_price_query);
		  if ($attribute_price['price_prefix'] == '') {
			$attributes_price += ($attribute_price['options_values_price']-$products_price);
		  } elseif ($attribute_price['price_prefix'] == '+') {
			$attributes_price += $attribute_price['options_values_price'];
		  } elseif ($attribute_price['price_prefix'] == '-') {
		   $attributes_price -= $attribute_price['options_values_price'];
		  }
		}
	  }
//EOF phpmom.com advanced attribute price//hadir 

// BOF: UPS XML Rates & Services ? Attributes Fix
// determine total weight of attributes to add to weight of product					
	  $attributes_total_weight = 0;
	  if (isset($this->contents[$products_id]['attributes'])) {
		  reset($this->contents[$products_id]['attributes']);
		  $where = ' AND ((';
		  while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
			 $where .= 'options_id=' . $option . ' AND options_values_id=' . $value . ') OR (';
		  }
		  $where=substr($where, 0, -5) . ')';
		  $attribute_weight_query = tep_db_query('SELECT options_values_weight FROM ' . TABLE_PRODUCTS_ATTRIBUTES . ' WHERE products_id=' . (int)$prid . $where); 
		  if (tep_db_num_rows($attribute_weight_query)) {
			 while ($attributes_weight_array = tep_db_fetch_array($attribute_weight_query)) { 
			$attributes_total_weight +=  $attributes_weight_array['options_values_weight'];
			 }
		  } // end if (tep_db_num_rows($attribute_weight_query))
	  } // end if (isset($this->contents[$products_id]['attributes']))
// EOF: UPS XML Rates & Services ? Attributes Fix

	  $products_array[] = array('id' => $products_id,
								'name' => $products['products_name'],
								'model' => $products['products_model'],
								'image' => $products['products_image'],
								'price' => $products_price,
								'quantity' => $this->contents[$products_id]['qty'],
// BOF: UPS XML Rates & Services ? Attributes Fix
								'weight' => $products['products_weight'] + $attributes_total_weight,
// EOF: UPS XML Rates & Services ? Attributes Fix
// BOF: UPS XML Rates & Services
								'length' => $products['products_length'],
								'width' => $products['products_width'],
								'height' => $products['products_height'],
								'ready_to_ship' => $products['products_ready_to_ship'],
// EOF: UPS XML Rates & Services
								'final_price' => ($products_price + $attributes_price),
//BOF phpmom.com advanced attribute price
								'attributes_price' => $attributes_price,
//EOF phpmom.com advanced attribute price
								'tax_class_id' => $products['products_tax_class_id'],
								'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : ''));
	}
  }

  return $products_array;
}

 

Since the information taken from there is used for the weight calculation and not $shipping_weight (which is used if you don't use any dimensions support) that explains why the weight is OK with USPS.

Thanks for clearing that up. It makes a little more sense now.

 

So, to sum up - HELP!

Corinne

Link to comment
Share on other sites

I think you may have identified the spot, but its not as easy to fix as you may think.

It took me some time to spot the problem but I think I found it.

 

A. Add "p.products_length, p.products_weight, p.products_width, p.products_height, p.products_ready_to_ship," to the query that is done in PriceFormatter, function loadProduct. For example:

function loadProduct($product_id, $language_id=1)
{
$sql="select pd.products_name, p.products_model, p.products_image, p.products_id," .
" p.manufacturers_id, p.products_price, p.products_weight," .
// add more fields for UPS XML dimensions support
" p.products_length, p.products_width, p.products_height, p.products_ready_to_ship, " .
" p.products_price1,p.products_price2,p.products_price3,p.products_price4,

IMO that should take care of the ready-to-ship problem.

 

B. The attributes weight not being added took some time to spot. In the original shopping_cart.php function it says somewhere :

if ($products = tep_db_fetch_array($products_query)) {
	  $prid = $products['products_id'];

and that variable is used by you here:

			  $attribute_weight_query = tep_db_query('SELECT options_values_weight FROM ' . TABLE_PRODUCTS_ATTRIBUTES . ' WHERE products_id=' . (int)$prid . $where);

However, in your function the $prid is not declared so the query is looking for the weight of the attributes of products_id = 0.

 

If you change it to:

			  $attribute_weight_query = tep_db_query('SELECT options_values_weight FROM ' . TABLE_PRODUCTS_ATTRIBUTES . ' WHERE products_id=' . (int)$products_id . $where);

I think it will work again.

Link to comment
Share on other sites

i think that it isnt taking my added options into effect when determining the dimensions support, but it does add right cause that was the correct weight for what i wanted to order but id lose about 10$ and more on larger quantities.

 

so for example 5000 business cards is 16 lbs so 1pkg at 16 lbs and 10000 should be 2pkg at 32lbs

Everything you showed so far looks fine, however I couldn't see how the products are "assembled". If they are a product of 1,000 cards and then you add 5 or 10 items to get at those numbers then I don't see how it should not work. Tried it again this evening, getting rid of all boxes in admin less 1. Made it 8x8x8 inch with a max weight of 8. Then I tried adding 16 products of 1x1x1 that weight 1 and sure enough, two boxes. The only thing I can think of is that the product is one piece of 32 lbs and then then the escape route is triggered: the product is declared "ready-to-ship" (that escape is put it to avoid getting into a never-ending loop).
Link to comment
Share on other sites

Everything you showed so far looks fine, however I couldn't see how the products are "assembled". If they are a product of 1,000 cards and then you add 5 or 10 items to get at those numbers then I don't see how it should not work. Tried it again this evening, getting rid of all boxes in admin less 1. Made it 8x8x8 inch with a max weight of 8. Then I tried adding 16 products of 1x1x1 that weight 1 and sure enough, two boxes. The only thing I can think of is that the product is one piece of 32 lbs and then then the escape route is triggered: the product is declared "ready-to-ship" (that escape is put it to avoid getting into a never-ending loop).

nope the product is not ready to ship enabled :-\

Link to comment
Share on other sites

For those of you working hard to get this module to work I can tell you I've been using it since April and it has helped me tremendously in improving my bottom line through better shipping quotes. Also, it is very stable and problem free. One of the best things I have done to my cart.

 

The ready to ship and dimension support are real strengths of this module.

 

Corinne, it looks like you probably have all your problems solved now, but I'll try and help you if you are still having any problems.

John Wisdom

Link to comment
Share on other sites

Hey Corinne,

 

I was looking at your site and you have your whole catalog running SSL. You really only want the customer and checkout pages running in SSL. I guess it's not a big deal to leave it this way since your site seems to run pretty quickly but I thought I would mention it.

John Wisdom

Link to comment
Share on other sites

Hi Jan,

I really appreciate the time you're taking to help me with this.

 

A. Add "p.products_length, p.products_weight, p.products_width, p.products_height, p.products_ready_to_ship," to the query that is done in PriceFormatter, function loadProduct.

 

IMO that should take care of the ready-to-ship problem.

 

You were right! That fixed it!

 

However, in your function the $prid is not declared so the query is looking for the weight of the attributes of products_id = 0.

 

If you change it to:

			  $attribute_weight_query = tep_db_query('SELECT options_values_weight FROM ' . TABLE_PRODUCTS_ATTRIBUTES . ' WHERE products_id=' . (int)$products_id . $where);

I think it will work again.

 

The $prid thing makes total sense. HallMark referenced it in the attribute fix because it would normally be there, but in my version, it was taken out by the Price Break module.

 

We are sooooo close. The function is adding the original weight to attributes weight. Bear with me on this.

In the previous "function calculate()" in the "Add Weight To Product Attributes" module, the author, kumar, gives you the option of adding the weight to the original weight:

			if(!empty($attribute_price['options_values_weight'])) {
			$this->weight += ($qty * $attribute_price['options_values_weight']);
		}

 

or imputting the total weight:

			 if(!empty($attribute_price['options_values_weight'])) {
			$this->weight += ($qty * $attribute_price['options_values_weight'])-($qty * $products_weight);
		}

 

I chose the second one. To me, these looks similar to what is in HallMark's fix. It looks like we need to subtract out the original product weight since I did so before. So, if in the "get_products" function I define $products_weight as:

		  $products_weight = $product['products_weight'];

 

Will this code (or something like it) work?

			  if (tep_db_num_rows($attribute_weight_query)) {
			 while ($attributes_weight_array = tep_db_fetch_array($attribute_weight_query)) { 
			$attributes_total_weight +=  $attributes_weight_array['options_values_weight'] - $products_weight;

 

My syntax could be way off. I am by no means a PHP programmer. Am I at least on the right track?

 

Corinne

Link to comment
Share on other sites

Corinne, it looks like you probably have all your problems solved now, but I'll try and help you if you are still having any problems.

 

Hi John,

We're not quite out of the woods yet. Feel free to jump in.

 

Corinne

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...