private bool RemoveTracking(string trackingNumber) { var result = false; try { var track = new Aftership.Tracking(trackingNumber); var couriers = _connection.DetectCouriers(trackingNumber); foreach (var courier in couriers) { track.Slug = courier.Slug; result = _connection.DeleteTracking(track); if (result) { break; } } } catch (WebException ex) { _logger.Warning( string.Format("Cannot delete tracking with number - {0}", trackingNumber), new Exception(ex.Message)); } return(result); }
private void CreateTracking(Shipment shipment) { var order = shipment.Order; var customer = shipment.Order.Customer; var customerFullName = string.Format("{0} {1}", order.ShippingAddress.FirstName, order.ShippingAddress.LastName).Trim(); //create the new tracking var track = new Aftership.Tracking(shipment.TrackingNumber) { CustomerName = customerFullName, OrderId = string.Format("ID {0}", order.Id), OrderIdPath = string.Format("{0}orderdetails/{1}", _storeContext.CurrentStore.Url, order.Id) }; if (_settings.AllowCustomerNotification) { track.Emails = new List <string> { customer.Email }; } try { track = _connection.CreateTracking(track); _genericAttributeService.InsertAttribute(new GenericAttribute { EntityId = shipment.Id, Key = Constants.SHIPMENT_NOTIFICATION_ATTRIBUTE_NAME, KeyGroup = "Shipment", StoreId = 0, Value = "True" }); _genericAttributeService.InsertAttribute(new GenericAttribute { EntityId = shipment.Id, Key = Constants.SHIPMENT_TRACK_NUMBER_ATTRIBUTE_NAME, KeyGroup = "Shipment", StoreId = 0, Value = shipment.TrackingNumber }); _genericAttributeService.InsertAttribute(new GenericAttribute { EntityId = shipment.Id, Key = Constants.SHIPMENT_TRACK_ID_ATTRIBUTE_NAME, KeyGroup = "Shipment", StoreId = 0, Value = track.Id }); } catch (WebException ex) { _logger.Error( string.Format("Cannot registration tracking with number - {0}", shipment.TrackingNumber), new Exception(ex.Message)); } }
/// <summary> /// Return the tracking information of the last checkpoint of a single tracking. /// </summary> /// <param name="tracking">A Tracking to get the last checkpoint of, it should have tracking number and slug at least.</param> /// <param name="fields">A list of fields of checkpoint wanted to be in the response.</param> /// <param name="lang"> /// A string with the language desired. Support Chinese to English translation /// for china-ems and china-post only. /// </param> /// <returns>The last Checkpoint object.</returns> public Checkpoint GetLastCheckpoint(Tracking tracking, List <FieldCheckpoint> fields, string lang) { var qs = new QueryString(); string parametersExtra; Checkpoint checkpoint = null; if (fields != null) { qs.Add("fields", fields.Select(f => f.GetName())); } if (string.IsNullOrEmpty(lang)) { qs.Add("lang", lang); } var parameters = ReplaceFirst(qs.ToString(), "&", "?"); if (!string.IsNullOrEmpty(tracking.Id)) { parametersExtra = string.Format("{0}{1}", tracking.Id, parameters); } else { var paramRequiredFields = tracking.GetQueryRequiredFields(); parametersExtra = string.Format("{0}/{1}{2}{3}", tracking.Slug, tracking.TrackingNumber, parameters, paramRequiredFields); } var response = Request("GET", string.Format("/last_checkpoint/{0}", parametersExtra), null); var checkpointJson = (JObject)response["data"]["checkpoint"]; if (checkpointJson.Count != 0) { checkpoint = new Checkpoint(checkpointJson); } return(checkpoint); }
private IList <ShipmentStatusEvent> GetShipmentStatusEvents(Infrastructure.Aftership.Tracking tracker) { var shipmentStatusList = new List <ShipmentStatusEvent>(); tracker = _connection.GetTrackingByNumber(tracker); if (tracker.Checkpoints == null || !tracker.Checkpoints.Any()) { return(shipmentStatusList); } foreach (var checkpoint in tracker.Checkpoints) { Country country = null; if (checkpoint.CountryIso3 != Iso3Country.Null) { country = _countryService.GetCountryByThreeLetterIsoCode(checkpoint.CountryIso3.GetIso3Code()); } var shipmentStatus = new ShipmentStatusEvent { CountryCode = country != null ? country.TwoLetterIsoCode : string.Empty, Date = Convert.ToDateTime(checkpoint.CheckpointTime), EventName = string.Format("{0} ({1})", checkpoint.Message, GetStatus(checkpoint)), Location = string.IsNullOrEmpty(checkpoint.City) ? checkpoint.Location : checkpoint.City }; //// other properties (not used yet) //checkpoint.checkpointTime; //checkpoint.countryName; //checkpoint.state; //checkpoint.zip; shipmentStatusList.Add(shipmentStatus); } return(shipmentStatusList); }
/// <summary> /// Gets all events for a tracking number. /// </summary> /// <param name="trackingNumber">The tracking number to track.</param> /// <returns>List of Shipment Events.</returns> public IList <ShipmentStatusEvent> GetShipmentEvents(string trackingNumber) { if (string.IsNullOrWhiteSpace(_settings.ApiKey) || _settings.ApiKey.Equals("MyAfterShipAPIKey")) { return(new List <ShipmentStatusEvent>()); } if (string.IsNullOrEmpty(trackingNumber)) { return(new List <ShipmentStatusEvent>()); } var tracker = new Infrastructure.Aftership.Tracking(trackingNumber); var genericAttrs = _genericAttributeService.GetAttributesForEntity(_shipment.Id, "Shipment"); var trackingInfo = genericAttrs.FirstOrDefault(a => a.Key.Equals(Constants.SHIPMENT_TRACK_ID_ATTRIBUTE_NAME)); IList <ShipmentStatusEvent> shipmentStatusList = new List <ShipmentStatusEvent>(); IList <Courier> couriers = null; if (trackingInfo != null) { try { tracker.Id = trackingInfo.Value; shipmentStatusList = GetShipmentStatusEvents(tracker); } catch (WebException) { _logger.Error( string.Format("Error getting tracking information on Aftership events - {0}", trackingNumber)); } } else { try { // use try-catch to ensure exception won't be thrown is web service is not available couriers = _connection.DetectCouriers(trackingNumber, null, null, null, null); } catch (Exception ex) { _logger.Error("Error getting couriers information on Aftership", ex); } if (couriers == null) { return(shipmentStatusList); } foreach (var courier in couriers) { try { tracker.Slug = courier.Slug; tracker = _connection.GetTrackingByNumber(tracker); shipmentStatusList = GetShipmentStatusEvents(tracker); if (shipmentStatusList.Any()) { break; } } catch (WebException) { _logger.Error( string.Format("Error getting tracking information on Aftership events - {0}", trackingNumber)); } } } return(shipmentStatusList); }