Fix UPS tracking when multiple packages in shipment

master
Skylar Ittner 2 years ago
parent d92aece404
commit 9c0b2bf81d

@ -238,6 +238,7 @@ class TrackingStatus {
switch ($eventcode) {
case "M":
case "MV":
case "ZA": // UPS My Choice redirect
return TrackingStatus::TRACKING_STATUS_PRE_TRANSIT;
case "I":
case "P":

@ -48,6 +48,10 @@ class Tracking_UPS {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($trackrequest));
$response = curl_exec($ch);
//header("Content-Type: application/json");
//echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
//exit();
// CHECK TO SEE IF WE GOT AN ERROR
// IF SO, FORMAT IT LIKE THIS ::28::Operation timed out afterseconds
if ((curl_errno($ch)) && (curl_errno($ch) != 0)) {
@ -84,8 +88,21 @@ class Tracking_UPS {
}
$info = new TrackingInfo();
$info->setCode($trackinfo["Package"]["TrackingNumber"]);
if (!empty($trackinfo["Package"]["TrackingNumber"])) {
$info->setCode($trackinfo["Package"]["TrackingNumber"]);
} else if (is_array($trackinfo["Package"])) {
// More than one linked package in one shipment, get rid of the extra and make the
// schema match what we expect
$package = [];
for ($i = 0; $i < count($trackinfo["Package"]); $i++) {
if ($trackinfo["Package"][$i]["TrackingNumber"] == $code) {
$info->setCode($trackinfo["Package"][$i]["TrackingNumber"]);
$package = $trackinfo["Package"][$i];
$trackinfo["Package"] = $package;
break;
}
}
}
$info->setCarrier("ups");
$info->setService(new Service($trackinfo["Service"]["Code"], $trackinfo["Service"]["Description"]));

Loading…
Cancel
Save