function uc_fedex_fulfill_order_validate in FedEx Shipping 6.2
Same name and namespace in other branches
- 7.2 uc_fedex.ship.inc \uc_fedex_fulfill_order_validate()
Passes final information into shipment object.
See also
File
- ./
uc_fedex.ship.inc, line 710 - FedEx Web Services Rate / Available Services Quote.
Code
function uc_fedex_fulfill_order_validate($form, &$form_state) {
$origin = new stdClass();
$destination = new stdClass();
$packages = array();
foreach ($form_state['values'] as $key => $value) {
if (substr($key, 0, 7) == 'pickup_') {
$field = substr($key, 7);
$origin->{$field} = $value;
}
elseif (substr($key, 0, 9) == 'delivery_') {
$field = substr($key, 9);
$destination->{$field} = $value;
}
}
// Populate $_SESSION variable with information we'll need
// later to generate the label
$_SESSION['fedex'] = array();
$_SESSION['fedex']['origin'] = $origin;
// Determine if address is Residential or Commercial
// If Address Validation API is not used or fails, default to form choice
$destination->residential = uc_fedex_address_is_residential($destination, $destination->residential, FALSE);
$_SESSION['fedex']['destination'] = $destination;
foreach ($form_state['values']['packages'] as $id => $pkg_form) {
$package = uc_shipping_package_load($id);
$package->pkg_type = $pkg_form['pkg_type'];
$package->value = $pkg_form['declared_value'];
$package->weight = $pkg_form['weight']['weight'];
$package->weight_units = $pkg_form['weight']['units'];
$package->length = $pkg_form['dimensions']['length'];
$package->width = $pkg_form['dimensions']['width'];
$package->height = $pkg_form['dimensions']['height'];
$package->length_units = $pkg_form['dimensions']['units'];
$package->qty = 1;
$_SESSION['fedex']['packages'][$id] = $package;
}
$_SESSION['fedex']['service'] = $form_state['values']['service'];
$_SESSION['fedex']['paid'] = $form_state['values']['paid'];
$_SESSION['fedex']['ship_date'] = $form_state['values']['ship_date'];
$_SESSION['fedex']['reference'] = $form_state['values']['reference'];
$_SESSION['fedex']['order_id'] = $form_state['values']['order_id'];
//
// Assemble a quote request and send it off to FedEx
//
$response = uc_fedex_shipment_request($_SESSION['fedex']['packages'], $origin, $destination, $form_state['values']['service']);
// Response may contain multiple packages
foreach ($response as $package) {
// Need to fail validation if SOAP request returns ERROR
if ($package->HighestSeverity == 'FAILURE' || $package->HighestSeverity == 'ERROR') {
form_set_error('uc_fedex_fulfill_order', $package->Notifications->Message);
}
// Shipping Charge
$rating = $package->CompletedShipmentDetail->CompletedPackageDetails->PackageRating;
// Check to see if we're quoting ACCOUNT or LIST rates
if (variable_get('uc_fedex_quote_type', 'list') == 'list') {
// LIST rate
// LIST quotes return ACCOUNT rates (in PackageRateDetails[0])
// and LIST rates (in PackageRateDetails[1])
$ratedetail = $rating->PackageRateDetails[1];
}
else {
// ACCOUNT rate
// ACCOUNT quotes may return either ACCOUNT rates only OR
// ACCOUNT rates and LIST rates. Check.
if (is_array($rating->PackageRateDetails)) {
$ratedetail = $rating->PackageRateDetails[0];
}
else {
$ratedetail = $rating->PackageRateDetails;
}
}
$charge[] = $ratedetail->NetCharge;
}
$last_package = end($response);
$rating = $last_package->CompletedShipmentDetail->ShipmentRating;
// Check to see if we're quoting ACCOUNT or LIST rates
if (variable_get('uc_fedex_quote_type', 'list') == 'list') {
// LIST rate
// LIST quotes return ACCOUNT rates (in ShipmentRateDetails[0])
// and LIST rates (in ShipmentRateDetails[1])
$ratedetail = $rating->ShipmentRateDetails[1];
$_SESSION['fedex']['rate']['type'] = t('List Rates');
}
else {
// ACCOUNT rate
// ACCOUNT quotes may return either ACCOUNT rates only OR
// ACCOUNT rates and LIST rates. Check.
if (is_array($rating->ShipmentRateDetails)) {
$ratedetail = $rating->ShipmentRateDetails[0];
}
else {
$ratedetail = $rating->ShipmentRateDetails;
}
$_SESSION['fedex']['rate']['type'] = t('Account Rates');
}
$shipment_charge = $ratedetail->TotalNetCharge;
$_SESSION['fedex']['rate']['currency'] = (string) $shipment_charge->Currency;
$_SESSION['fedex']['rate']['amount'] = (string) $shipment_charge->Amount;
}