function uc_fedex_confirm_shipment_submit in FedEx Shipping 6.2
Same name and namespace in other branches
- 7.2 uc_fedex.ship.inc \uc_fedex_confirm_shipment_submit()
Generates shipping labels.
See also
File
- ./
uc_fedex.ship.inc, line 360 - FedEx Web Services Rate / Available Services Quote.
Code
function uc_fedex_confirm_shipment_submit($form, &$form_state) {
// Recover shipment data from session
$order_id = $_SESSION['fedex']['order_id'];
$packages = $_SESSION['fedex']['packages'];
$origin = $_SESSION['fedex']['origin'];
$destination = $_SESSION['fedex']['destination'];
//
// Assemble the label request and send it off to FedEx
//
$mp_response = uc_fedex_shipment_request($_SESSION['fedex']['packages'], $origin, $destination, $_SESSION['fedex']['service']);
//
// Loop over responses, to handle case of multi-package shipments
//
foreach ($mp_response as $response) {
// Package tracking numbers
$tracking[] = $response->CompletedShipmentDetail->CompletedPackageDetails->TrackingIds->TrackingNumber;
if (isset($response->CompletedShipmentDetail->RoutingDetail->DeliveryDate)) {
$exp_delivery[] = date_parse($response->CompletedShipmentDetail->RoutingDetail->DeliveryDate);
}
else {
$exp_delivery[] = array(
'month' => 0,
'day' => 0,
'year' => 0,
);
// Ground and Home Delivery don't have DeliveryDate,
// they have TransitTime instead
}
}
// Final package in shipment contains summary information
$last_package = end($mp_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];
}
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;
}
}
$shipment_charge = $ratedetail->TotalNetCharge;
// Build $shipment object to return to uc_shipment
$shipment = new stdClass();
$shipment->order_id = $order_id;
$shipment->origin = clone $_SESSION['fedex']['origin'];
$shipment->destination = clone $_SESSION['fedex']['destination'];
$shipment->packages = $_SESSION['fedex']['packages'];
$shipment->shipping_method = 'fedex';
$shipment->accessorials = $_SESSION['fedex']['service'];
$shipment->carrier = t('FedEx');
$shipment->cost = (string) $shipment_charge->Amount;
$shipment->tracking_number = (string) $tracking[0];
$ship_date = $_SESSION['fedex']['ship_date'];
$shipment->ship_date = gmmktime(12, 0, 0, $ship_date['month'], $ship_date['day'], $ship_date['year']);
$shipment->expected_delivery = gmmktime(12, 0, 0, $exp_delivery[0]['month'], $exp_delivery[0]['day'], $exp_delivery[0]['year']);
// Loop over packages in shipment to store labels and tracking numbers
foreach ($mp_response as $package_results) {
$package =& current($shipment->packages);
$package->tracking_number = (string) $package_results->CompletedShipmentDetail->CompletedPackageDetails->TrackingIds->TrackingNumber;
if (file_check_directory(file_create_path('fedex_labels'), FILE_CREATE_DIRECTORY)) {
$label_path = file_create_path('fedex_labels') . '/label' . $package->tracking_number . '.' . strtolower(variable_get('uc_fedex_label_image_format', 'PDF'));
if ($label_file = fopen($label_path, 'wb')) {
fwrite($label_file, $package_results->CompletedShipmentDetail->CompletedPackageDetails->Label->Parts->Image);
fclose($label_file);
$package->label_image = $label_path;
}
else {
drupal_set_message(t('Could not open a file to save the label image.'), 'error');
}
}
else {
drupal_set_message(t('Could not find or create the directory "fedex_labels" in the file system path.'), 'error');
}
unset($package);
next($shipment->packages);
}
uc_shipping_shipment_save($shipment);
unset($_SESSION['fedex']);
$form_state['redirect'] = 'admin/store/orders/' . $order_id . '/shipments';
}