/// <summary>
        ///     GetPickupLocationsPreferences for a Distributor
        ///     MEXICO ONLY
        /// </summary>
        /// <param name="distributorId"></param>
        /// <param name="country"></param>
        /// <returns></returns>
        public override List <PickupLocationPreference_V01> GetPickupLocationsPreferences(string distributorId,
                                                                                          string country)
        {
            if (Thread.CurrentThread.CurrentCulture.Name.Equals("en-MX"))
            {
                var values = base.GetPickupLocationsPreferences(distributorId, country);
                return(values);
            }

            // gets cache key
            string           cacheKey = getPickupLocationPreferenceKey(distributorId, country);
            HttpSessionState session  = HttpContext.Current.Session;

            bool loadFromService = false;

            if (null == session[cacheKey])
            {
                loadFromService = true;
            }
            List <PickupLocationPreference_V01> PickupLocationPreferences =
                getPickupLocationsPreferencesFromCache(distributorId, country);
            List <PickupLocationPreference_V01> PickupLocationPreferencestoRemove = new List <PickupLocationPreference_V01>();

            if (PickupLocationPreferences != null && loadFromService == true)
            {
                var proxy = ServiceClientProvider.GetMexicoShippingServiceProxy();
                foreach (PickupLocationPreference_V01 pref in PickupLocationPreferences)
                {
                    //checking if the location saved is in CUBO DB
                    var option = GetShippingInfoFromID(distributorId,
                                                       Thread.CurrentThread.CurrentCulture.Name,
                                                       DeliveryOptionType.Pickup,
                                                       pref.PickupLocationID,
                                                       0);
                    if (option != null)
                    {
                        if (string.IsNullOrEmpty(pref.PickupLocationNickname))
                        {
                            DeliveryOptionForIDRequest_V01 request = new DeliveryOptionForIDRequest_V01();
                            request.ID = pref.PickupLocationID;
                            var pickupAlternativesResponse =
                                proxy.GetPickupAlternativeForDeliveryOptionID(new GetPickupAlternativeForDeliveryOptionIDRequest(request)).GetPickupAlternativeForDeliveryOptionIDResult as PickupAlternativesResponse_V01;
                            if (pickupAlternativesResponse != null &&
                                pickupAlternativesResponse.PickupAlternatives != null &&
                                pickupAlternativesResponse.PickupAlternatives.Count > 0)
                            {
                                pref.PickupLocationNickname =
                                    pickupAlternativesResponse.PickupAlternatives[0].BranchName;
                            }
                        }
                    }
                    else
                    {
                        PickupLocationPreferencestoRemove.Add(pref);
                    }
                }
                //removing the not existing locations in cubo
                if (PickupLocationPreferencestoRemove.Count > 0)
                {
                    foreach (var item in PickupLocationPreferencestoRemove)
                    {
                        DeletePickupLocationsPreferences(item.DistributorID, item.PickupLocationID, item.Country);
                        session["showMessageOnPage"] = "True";
                    }
                }
                session[cacheKey] = PickupLocationPreferences;
            }
            return(PickupLocationPreferences);
        }
        public override ShippingInfo GetShippingInfoFromID(string distributorID,
                                                           string locale,
                                                           DeliveryOptionType type,
                                                           int deliveryOptionID,
                                                           int shippingAddressID)
        {
            if (locale.Equals("en-MX"))
            {
                return(base.GetShippingInfoFromID(distributorID, locale, type, deliveryOptionID, shippingAddressID));
            }

            var proxy = ServiceClientProvider.GetMexicoShippingServiceProxy();
            DeliveryOptionForIDRequest_V01 request = new DeliveryOptionForIDRequest_V01();

            request.ID = deliveryOptionID;

            DeliveryOption deliveryOption = null;

            if (type == DeliveryOptionType.Pickup)
            {
                string countryCode = locale.Substring(3, 2);
                List <PickupLocationPreference_V01> pickupLocationPreference =
                    GetPickupLocationsPreferences(distributorID, countryCode);
                if (pickupLocationPreference != null && pickupLocationPreference.Count > 0)
                {
                    var vPickupLocation = pickupLocationPreference.Find(p => p.PickupLocationID == deliveryOptionID);
                    if (vPickupLocation != null)
                    {
                        int PickupLocationID = vPickupLocation.PickupLocationID;
                        request.ID = PickupLocationID;
                        PickupAlternativesResponse_V01 pickupAlternativesResponse =
                            proxy.GetPickupAlternativeForDeliveryOptionID(new GetPickupAlternativeForDeliveryOptionIDRequest(request)).GetPickupAlternativeForDeliveryOptionIDResult as PickupAlternativesResponse_V01;
                        if (pickupAlternativesResponse != null &&
                            pickupAlternativesResponse.PickupAlternatives != null &&
                            pickupAlternativesResponse.PickupAlternatives.Count > 0)
                        {
                            deliveryOption    = new DeliveryOption(ObjectMappingHelper.Instance.GetToShipping(pickupAlternativesResponse.PickupAlternatives[0]));
                            deliveryOption.Id = deliveryOption.ID = PickupLocationID;
                            return(new ShippingInfo(deliveryOption));
                        }
                    }
                }
            }
            else
            {
                ShippingAddress_V02 shippingAddress = null;
                if (shippingAddressID != 0)
                {
                    List <DeliveryOption> shippingAddresses = GetShippingAddresses(distributorID, locale);
                    if (shippingAddresses != null)
                    {
                        if ((shippingAddress = shippingAddresses.Find(s => s.ID == shippingAddressID)) == null)
                        {
                            shippingAddress = shippingAddresses.Find(s => s.IsPrimary == true);
                        }
                    }
                }
                else
                {
                    List <DeliveryOption> addresses = base.GetShippingAddresses(distributorID, locale);
                    if (addresses != null && addresses.Count > 0)
                    {
                        if ((shippingAddress = addresses.Find(s => s.IsPrimary == true)) == null)
                        {
                            shippingAddress = addresses.First();
                        }
                    }
                }

                if (shippingAddress != null)
                {
                    List <DeliveryOption> deliveryOptions = GetDeliveryOptions(type, shippingAddress);
                    if (deliveryOptions != null && deliveryOptions.Count > 0)
                    {
                        deliveryOption = deliveryOptions.First();
                        return(new ShippingInfo(deliveryOption, shippingAddress));
                    }
                }
            }

            return(null);
        }