Jump to content
Sign in to follow this  
DefelRadar

UPSXML flat rate for Ground shipping

Recommended Posts

I've dug around in the forums to try and find an answer to my situation to no avail. What I am wanting to do is modify the upsxml.php file in includes/modules/shipping/ to give me a flat rate for UPS ground shipping while I still receive a quote for the other methods I have selected.

 

I've played around with the following code in the UPSXML module and not had much success. The bolded text is where I try to manipulate the cost of the ground shipping quote but it bombs out on me. Has anyone else had any success putting a flat rate in for the UPS ground quote on the UPSXML contrib?

 

Thanks,

 

Aaron

 

$upsQuote = $this->_upsGetQuote();

if ((is_array($upsQuote)) && (sizeof($upsQuote) > 0)) {

if ($this->dimensions_support > 0) {

$this->quotes = array('id' => $this->code, 'module' => $this->title . ' (' . $this->boxCount . ($this->boxCount > 1 ? ' pkg(s), ' : ' pkg, ') . round($totalWeight,0) . ' ' . strtolower($this->unit_weight) . ' total)');

} else {

$this->quotes = array('id' => $this->code, 'module' => $this->title . ' (' . $shipping_num_boxes . ($this->boxCount > 1 ? ' pkg(s) x ' : ' pkg x ') . round($shipping_weight,0) . ' ' . strtolower($this->unit_weight) . ' total)');

}

$methods = array();

for ($i=0; $i < sizeof($upsQuote); $i++) {

list($type, $cost) = each($upsQuote[$i]);

// BOF limit choices, behaviour changed from versions < 1.2

if (exclude_choices($type)) continue;

// EOF limit choices

if ( $method == '' || $method == $type ) {

$_type = $type;

 

if ($this->timeInTransitView == "Raw") {

if (isset($this->servicesTimeintransit[$type])) {

$_type = $_type . ", ".$this->servicesTimeintransit[$type]["date"];

}

} else {

if (isset($this->servicesTimeintransit[$type])) {

$eta_array = explode("-", $this->servicesTimeintransit[$type]["date"]);

$months = array (" ", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

$eta_arrival_date = $months[(int)$eta_array[1]]." ".$eta_array[2].", ".$eta_array[0];

$_type .= ", <acronym title='Estimated Delivery Date'>EDD</acronym>: ".$eta_arrival_date;

}

}

 

// changed to make handling percentage based

if ($this->handling_type == "Percentage") {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ((($this->handling_fee * $cost)/100) + $cost));

} else {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ($this->handling_fee + $cost));

}

//AMH playing around with flat shipping for UPS

if ($i = 0) {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ($this->handling_fee));

}

}

}

if ($this->tax_class > 0) {

$this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

}

$this->quotes['methods'] = $methods;

Share this post


Link to post
Share on other sites

I figured it out within minutes after posting my problem.

 

Here is the solution to all those who are interested: You have to check for $i == 0 before you get into checking what kind of handling_type you have then all things will work great.

 

//AMH playing around with flat shipping for UPS

 

if ($i ==0){$methods[] = array('id' => $type, 'title' => $_type, 'cost' => (($this->handling_fee + 5) * $shipping_num_boxes));

} else {

// changed to make handling percentage based

if ($this->handling_type == "Percentage") {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ((($this->handling_fee * $cost)/100) + $cost));

} else {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ($this->handling_fee + $cost));

}

}

Share this post


Link to post
Share on other sites

If you want to restrict the flat shipping to a country (i.e. US) then replace the code starting around line 333 and ending at 340 with the following code:

 

if ($i ==0 AND $order->delivery['country']['iso_code_2']=='US'){$methods[] = array('id' => $type, 'title' => $_type, 'cost' => (($this->handling_fee + 5) * $this->boxCount));

} else {

// changed to make handling percentage based

if ($this->handling_type == "Percentage") {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ((($this->handling_fee * $cost)/100) + $cost));

} else {

$methods[] = array('id' => $type, 'title' => $_type, 'cost' => ($this->handling_fee + $cost));

}

}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×