Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        /// <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);
        }