/// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="Cart">Shopping cart</param>
        /// <param name="customer">Customer</param>
        /// <param name="ShippingAddress">Shipping address</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public static ShippingOptionCollection GetShippingOptions(ShoppingCart Cart, Customer customer, Address ShippingAddress, ref string Error)
        {
            if (Cart == null)
            {
                throw new ArgumentNullException("Cart");
            }

            bool isFreeShipping = IsFreeShipping(Cart, customer);

            ShipmentPackage ShipmentPackage = CreateShipmentPackage(Cart, customer, ShippingAddress);
            ShippingRateComputationMethod activeShippingRateComputationMethod = ActiveShippingRateComputationMethod;

            if (activeShippingRateComputationMethod == null)
            {
                throw new NopException("Shipping rate computation method could not be loaded");
            }
            IShippingRateComputationMethod iShippingRateComputationMethod = Activator.CreateInstance(Type.GetType(activeShippingRateComputationMethod.ClassName)) as IShippingRateComputationMethod;

            ShippingOptionCollection shippingOptions = iShippingRateComputationMethod.GetShippingOptions(ShipmentPackage, ref Error);

            decimal additionalShippingCharge = GetShoppingCartAdditionalShippingCharge(Cart, customer);

            shippingOptions.ForEach(so => so.Rate += additionalShippingCharge);

            if (isFreeShipping)
            {
                shippingOptions.ForEach(so => so.Rate = Decimal.Zero);
            }

            shippingOptions.ForEach(so => so.Rate = Math.Round(so.Rate, 2));

            return(shippingOptions);
        }
 /// <summary>
 /// Gets the shipping rates.
 /// </summary>
 private void GetShippingRates()
 {
     if (!ThisPage.SiteSettings.DisplayShippingOnCart || this.Order.ShippingAmount > 0 || Request.Url.AbsolutePath.Contains("checkout.aspx"))
     {
         lblShippingAmount.Text = StoreUtility.GetFormattedAmount(this.Order.ShippingAmount, true);
         lblTotalAmount.Text    = StoreUtility.GetFormattedAmount(this.Order.Total, true);
     }
     else
     {
         // Get Shipping Options
         ShippingOptionCollection shippingOptionCollection = OrderController.FetchShippingOptions(this.Order);
         if (shippingOptionCollection.Count > 0)
         {
             if (shippingOptionCollection.Count > 1)
             {
                 ddlShipping.Visible = true;
                 foreach (ShippingOption shippingOption in shippingOptionCollection)
                 {
                     ddlShipping.Items.Add(new ListItem(shippingOption.Service, shippingOption.Rate.ToString()));
                 }
             }
             lblShippingAmount.Text = StoreUtility.GetFormattedAmount(shippingOptionCollection[0].Rate.ToString(), true);
             lblTotalAmount.Text    = StoreUtility.GetFormattedAmount(this.Order.Total + shippingOptionCollection[0].Rate, true);
         }
         else
         {
             lblShippingAmount.Text = StoreUtility.GetFormattedAmount(this.Order.ShippingAmount, true);
             lblTotalAmount.Text    = StoreUtility.GetFormattedAmount(this.Order.Total, true);
         }
     }
 }
        /// <summary>
        /// Gets the shipping rates.
        /// </summary>
        private void GetShippingRates()
        {
            ShippingOptionCollection shippingOptionCollection = OrderController.FetchShippingOptions(WebUtility.GetUserName());

            rblShippingOptions.Items.Clear();
            ListItem listItem;

            foreach (ShippingOption shippingOption in shippingOptionCollection)
            {
                listItem = new ListItem(string.Format("{0}: {1}", shippingOption.Service, StoreUtility.GetFormattedAmount(shippingOption.Rate, true)), shippingOption.Rate.ToString());
                rblShippingOptions.Items.Add(listItem);
            }
            if (rblShippingOptions.Items.Count > 0)
            {
                rblShippingOptions.SelectedIndex = 0;
            }
            if (order.ShippingAmount > 0)
            {
                ListItem selectedItem = rblShippingOptions.Items.FindByValue(order.ShippingAmount.ToString());
                if (selectedItem != null)
                {
                    selectedItem.Selected = true;
                }
            }
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
                throw new ArgumentNullException("ShipmentPackage");
            if (ShipmentPackage.Items == null)
                throw new NopException("No shipment items");

            decimal subTotal = decimal.Zero;
            foreach (ShoppingCartItem shoppingCartItem in ShipmentPackage.Items)
            {
                if (shoppingCartItem.IsFreeShipping)
                    continue;
                subTotal += PriceHelper.GetSubTotal(shoppingCartItem, ShipmentPackage.Customer, true);
            }

            ShippingMethodCollection shippingMethods = ShippingMethodManager.GetAllShippingMethods();
            foreach (ShippingMethod shippingMethod in shippingMethods)
            {
                ShippingOption shippingOption = new ShippingOption();
                shippingOption.Name = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                shippingOption.Rate = GetRate(subTotal, shippingMethod.ShippingMethodID);
                shippingOptions.Add(shippingOption);
            }

            return shippingOptions;
        }
        /// <summary>
        /// Fetches the shipping options.
        /// </summary>
        /// <param name="order">The Order</param>
        /// <returns></returns>
        public static ShippingOptionCollection FetchShippingOptions(Order order)
        {
            ShippingService          shippingService          = new ShippingService();
            ShippingOptionCollection shippingOptionCollection = shippingService.GetShippingOptions(order);

            return(shippingOptionCollection);
        }
Example #6
0
        private ShippingOptionCollection ParseResponse(RateReply reply)
        {
            var result = new ShippingOptionCollection();

            Debug.WriteLine("RateReply details:");
            Debug.WriteLine("**********************************************************");
            foreach (var rateDetail in reply.RateReplyDetails)
            {
                Debug.WriteLine("ServiceType: " + rateDetail.ServiceType);
                for (int i = 0; i < rateDetail.RatedShipmentDetails.Length; i++)
                {
                    var shipmentDetail = rateDetail.RatedShipmentDetails[i];
                    Debug.WriteLine("RateType : " + shipmentDetail.ShipmentRateDetail.RateType);
                    Debug.WriteLine("Total Billing Weight : " + shipmentDetail.ShipmentRateDetail.TotalBillingWeight.Value);
                    Debug.WriteLine("Total Base Charge : " + shipmentDetail.ShipmentRateDetail.TotalBaseCharge.Amount);
                    Debug.WriteLine("Total Discount : " + shipmentDetail.ShipmentRateDetail.TotalFreightDiscounts.Amount);
                    Debug.WriteLine("Total Surcharges : " + shipmentDetail.ShipmentRateDetail.TotalSurcharges.Amount);
                    Debug.WriteLine("Net Charge : " + shipmentDetail.ShipmentRateDetail.TotalNetCharge.Amount);
                    Debug.WriteLine("*********");

                    //take first one
                    if (i == 0)
                    {
                        var    shippingOption          = new ShippingOption();
                        string userFriendlyServiceType = GetUserFriendlyEnum(rateDetail.ServiceType.ToString());
                        shippingOption.Name = userFriendlyServiceType;
                        shippingOption.Rate = shipmentDetail.ShipmentRateDetail.TotalNetCharge.Amount;
                        result.Add(shippingOption);
                    }
                }
                Debug.WriteLine("**********************************************************");
            }

            return(result);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
            {
                throw new ArgumentNullException("ShipmentPackage");
            }
            if (ShipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }

            ShippingMethodCollection shippingMethods = ShippingMethodManager.GetAllShippingMethods();

            foreach (ShippingMethod shippingMethod in shippingMethods)
            {
                ShippingOption shippingOption = new ShippingOption();
                shippingOption.Name        = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                shippingOption.Rate        = decimal.Zero;
                shippingOptions.Add(shippingOption);
            }

            return(shippingOptions);
        }
Example #8
0
        private void FillListControlsForAjaxPanels()
        {
            //---- Shipping Options
            List <ShippingOption> shippingOptions = ShippingOptionCollection.GetList();

            //---- CC Types
            List <string> cardTypes = new List <string>(WA.Enum <CreditCardType> .GetNames());

            cardTypes.Remove(CreditCardType.UNKNOWN.ToString());
            ddlCCType.Items.Clear();
            ddlCCType.Items.AddRange(cardTypes.ConvertAll(s => new ListItem()
            {
                Text = s, Value = s
            }).ToArray());
            ddlCCType.Items.Insert(0, "");

            //---- CC Expire Year
            ddlCCExpireYear.Items.Clear();
            ddlCCExpireYear.Items.Add("");
            int maxYear = DateTime.Now.Year + 12;

            for (int y = DateTime.Now.Year; y <= maxYear; y++)
            {
                ddlCCExpireYear.Items.Add(new ListItem()
                {
                    Text = y.ToString(), Value = y.ToString()
                });
            }

            //---- Payment Methods
            liPayPalExpressCheckoutPaymentMethod.Visible = StoreContext.CurrentStore.IsPaymentProviderEnabled(PaymentProviderName.PayPalExpressCheckout);
        }
        /// <summary>
        /// Fetches the shipping options.
        /// </summary>
        /// <param name="userName">Name of the user.</param>
        /// <returns></returns>
        public static ShippingOptionCollection FetchShippingOptions(string userName)
        {
            Order                    order                    = new OrderController().FetchOrder(userName);
            ShippingService          shippingService          = new ShippingService();
            ShippingOptionCollection shippingOptionCollection = shippingService.GetShippingOptions(order);

            return(shippingOptionCollection);
        }
Example #10
0
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.Country == null)
            {
                error = "Shipping country is not set";
                return(shippingOptions);
            }

            string  url       = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.URL");
            string  accessKey = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.AccessKey");
            string  username  = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.Username");
            string  password  = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.Password");
            var     customerClassification   = (UPSCustomerClassification)Enum.Parse(typeof(UPSCustomerClassification), SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.CustomerClassification"));
            var     pickupType               = (UPSPickupType)Enum.Parse(typeof(UPSPickupType), SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.PickupType"));
            var     packagingType            = (UPSPackagingType)Enum.Parse(typeof(UPSPackagingType), SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.PackagingType"));
            decimal additionalHandlingCharge = SettingManager.GetSettingValueDecimalNative("ShippingRateComputationMethod.UPS.AdditionalHandlingCharge");

            if (shipmentPackage.CountryFrom == null)
            {
                int defaultShippedFromCountryID = SettingManager.GetSettingValueInteger("ShippingRateComputationMethod.UPS.DefaultShippedFromCountryID");
                shipmentPackage.CountryFrom = CountryManager.GetCountryById(defaultShippedFromCountryID);
            }
            if (String.IsNullOrEmpty(shipmentPackage.ZipPostalCodeFrom))
            {
                shipmentPackage.ZipPostalCodeFrom = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.DefaultShippedFromZipPostalCode");
            }

            string requestString = CreateRequest(accessKey, username, password, shipmentPackage,
                                                 customerClassification, pickupType, packagingType);
            string responseXML = DoRequest(url, requestString);

            shippingOptions = ParseResponse(responseXML, ref error);
            foreach (var shippingOption in shippingOptions)
            {
                if (!shippingOption.Name.ToLower().StartsWith("ups"))
                {
                    shippingOption.Name = string.Format("UPS {0}", shippingOption.Name);
                }
                shippingOption.Rate += additionalHandlingCharge;
            }

            return(shippingOptions);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((NopContext.Current.User == null) || (NopContext.Current.User.IsGuest && !CustomerManager.AnonymousCheckoutAllowed))
            {
                string loginURL = CommonHelper.GetLoginPageURL(true);
                Response.Redirect(loginURL);
            }

            Cart = ShoppingCartManager.GetCurrentShoppingCart(ShoppingCartTypeEnum.ShoppingCart);
            IndividualOrderCollection indOrders = IndividualOrderManager.GetCurrentUserIndividualOrders();

            if (Cart.Count == 0 && indOrders.Count == 0)
            {
                Response.Redirect("~/ShoppingCart.aspx");
            }

            bool shoppingCartRequiresShipping = ShippingManager.ShoppingCartRequiresShipping(Cart);

            if (!shoppingCartRequiresShipping)
            {
                NopContext.Current.User.LastShippingOption = null;
                Response.Redirect("~/CheckoutPaymentMethod.aspx");
            }

            if (!Page.IsPostBack)
            {
                if (shoppingCartRequiresShipping)
                {
                    //ShipmentPackage shipmentPackage = ShippingManager.CreateShipmentPackage(Cart, NopContext.Current.User.ShippingAddress);
                    string error = string.Empty;
                    ShippingOptionCollection shippingOptions = ShippingManager.GetShippingOptions(Cart, NopContext.Current.User, NopContext.Current.User.ShippingAddress, ref error);
                    if (!String.IsNullOrEmpty(error))
                    {
                        LogManager.InsertLog(LogTypeEnum.ShippingErrror, error, error);
                        lError.Text = Server.HtmlEncode(error);
                    }
                    else
                    {
                        if (shippingOptions.Count > 0)
                        {
                            dlShippingOptions.DataSource = shippingOptions;
                            dlShippingOptions.DataBind();
                        }
                        else
                        {
                            phSelectShippingMethod.Visible = false;
                            phShippingIsNotAllowed.Visible = true;
                        }
                    }
                }
            }
        }
 /// <summary>
 /// Gets the shipping options.
 /// </summary>
 /// <param name="order"></param>
 /// <returns></returns>
 public ShippingOptionCollection GetShippingOptions(Order order)
 {
     ShippingOptionCollection shippingOptionCollection = new ShippingOptionCollection();
       SimpleWeightShippingRateCollection simpleWeightShippingRateCollection = new SimpleWeightShippingRateController().FetchAll();
       ShippingOption shippingOption;
       foreach(SimpleWeightShippingRate simpleWeightShippingRate in simpleWeightShippingRateCollection) {
     shippingOption = new ShippingOption();
     shippingOption.Service = simpleWeightShippingRate.Service;
     shippingOption.Rate = simpleWeightShippingRate.AmountPerUnit * order.TotalWeight;
     shippingOptionCollection.Add(shippingOption);
       }
       return shippingOptionCollection;
 }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.Country == null)
            {
                error = "Shipping country is not set";
                return(shippingOptions);
            }

            decimal subTotal = decimal.Zero;

            foreach (var shoppingCartItem in shipmentPackage.Items)
            {
                if (shoppingCartItem.IsFreeShipping)
                {
                    continue;
                }
                subTotal += PriceHelper.GetSubTotal(shoppingCartItem, shipmentPackage.Customer, true);
            }

            decimal weight = ShippingManager.GetShoppingCartTotalWeigth(shipmentPackage.Items, shipmentPackage.Customer);

            var shippingMethods = ShippingMethodManager.GetAllShippingMethods(shipmentPackage.ShippingAddress.CountryId);

            foreach (var shippingMethod in shippingMethods)
            {
                var shippingOption = new ShippingOption();
                shippingOption.Name        = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                shippingOption.Rate        = GetRate(subTotal, weight, shippingMethod.ShippingMethodId);
                shippingOptions.Add(shippingOption);
            }

            return(shippingOptions);
        }
Example #14
0
        /// <summary>
        /// Gets the shipping options.
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        public ShippingOptionCollection GetShippingOptions(Order order)
        {
            ShippingOptionCollection           shippingOptionCollection           = new ShippingOptionCollection();
            SimpleWeightShippingRateCollection simpleWeightShippingRateCollection = new SimpleWeightShippingRateController().FetchAll();
            ShippingOption shippingOption;

            foreach (SimpleWeightShippingRate simpleWeightShippingRate in simpleWeightShippingRateCollection)
            {
                shippingOption         = new ShippingOption();
                shippingOption.Service = simpleWeightShippingRate.Service;
                shippingOption.Rate    = simpleWeightShippingRate.AmountPerUnit * order.TotalWeight;
                shippingOptionCollection.Add(shippingOption);
            }
            return(shippingOptionCollection);
        }
Example #15
0
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("Нет товаров для доставки. ");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Не указан адрес доставки. ";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.Country == null)
            {
                error = "Не указана страна доставки. ";
                return(shippingOptions);
            }

            var shippingMethods = ShippingMethodManager.GetAllShippingMethods(shipmentPackage.ShippingAddress.CountryId);

            foreach (var shippingMethod in shippingMethods)
            {
                var shippingOption = new ShippingOption();
                shippingOption.Name        = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                if (shippingMethod.ShippingMethodId == 4)
                {
                    shippingOption.Rate = 0;
                }
                else
                {
                    shippingOption.Rate = GetRate();
                }
                shippingOptions.Add(shippingOption);
            }

            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }

            string  url      = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.URL");
            string  username = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.Username");
            string  password = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.Password");
            decimal additionalHandlingCharge = SettingManager.GetSettingValueDecimalNative("ShippingRateComputationMethod.USPS.AdditionalHandlingCharge");

            shipmentPackage.ZipPostalCodeFrom = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.DefaultShippedFromZipPostalCode");


            bool   isDomestic    = IsDomesticRequest(shipmentPackage);
            string requestString = CreateRequest(username, password, shipmentPackage);
            string responseXML   = DoRequest(url, requestString);

            shippingOptions = ParseResponse(responseXML, isDomestic, ref error);
            foreach (var shippingOption in shippingOptions)
            {
                if (!shippingOption.Name.ToLower().StartsWith("usps"))
                {
                    shippingOption.Name = string.Format("USPS {0}", shippingOption.Name);
                }
                shippingOption.Rate += additionalHandlingCharge;
            }

            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment option</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
            {
                throw new ArgumentNullException("ShipmentPackage");
            }
            if (ShipmentPackage.Items == null)
            {
                throw new NopSolutions.NopCommerce.Common.NopException("No shipment items");
            }
            if (ShipmentPackage.ShippingAddress == null)
            {
                Error = "Shipping address is not set";
                return(shippingOptions);
            }

            string  url      = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.URL");
            string  username = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.Username");
            string  password = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.Password");
            decimal additionalHandlingCharge = SettingManager.GetSettingValueDecimalNative("ShippingRateComputationMethod.USPS.AdditionalHandlingCharge");

            ShipmentPackage.ZipPostalCodeFrom = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.DefaultShippedFromZipPostalCode");
            string requestString = CreateRequest(username, password, ShipmentPackage);
            string responseXML   = DoRequest(url, requestString);

            shippingOptions = ParseResponse(responseXML, ref Error);
            foreach (ShippingOption shippingOption in shippingOptions)
            {
                shippingOption.Rate += additionalHandlingCharge;
            }

            if (String.IsNullOrEmpty(Error) && shippingOptions.Count == 0)
            {
                Error = "Shipping options could not be loaded";
            }
            return(shippingOptions);
        }
Example #18
0
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
            {
                throw new ArgumentNullException("ShipmentPackage");
            }
            if (ShipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }

            decimal subTotal = decimal.Zero;

            foreach (ShoppingCartItem shoppingCartItem in ShipmentPackage.Items)
            {
                if (shoppingCartItem.IsFreeShipping)
                {
                    continue;
                }
                subTotal += PriceHelper.GetSubTotal(shoppingCartItem, ShipmentPackage.Customer, true);
            }

            decimal weight = ShippingManager.GetShoppingCartTotalWeigth(ShipmentPackage.Items);

            ShippingMethodCollection shippingMethods = ShippingMethodManager.GetAllShippingMethods();

            foreach (ShippingMethod shippingMethod in shippingMethods)
            {
                ShippingOption shippingOption = new ShippingOption();
                shippingOption.Name        = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                shippingOption.Rate        = GetRate(subTotal, weight, shippingMethod.ShippingMethodID);
                shippingOptions.Add(shippingOption);
            }

            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
                throw new ArgumentNullException("ShipmentPackage");
            if (ShipmentPackage.Items == null)
                throw new NopException("No shipment items");

            

            ShippingMethodCollection shippingMethods = ShippingMethodManager.GetAllShippingMethods();
            foreach (ShippingMethod shippingMethod in shippingMethods)
            {
                ShippingOption shippingOption = new ShippingOption();
                shippingOption.Name = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                shippingOption.Rate = GetRate();
                shippingOptions.Add(shippingOption);
            }

            return shippingOptions;
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.Country == null)
            {
                error = "Shipping country is not set";
                return(shippingOptions);
            }

            var shippingMethods = ShippingMethodManager.GetAllShippingMethods(shipmentPackage.ShippingAddress.CountryId);

            foreach (var shippingMethod in shippingMethods)
            {
                var shippingOption = new ShippingOption();
                shippingOption.Name        = shippingMethod.Name;
                shippingOption.Description = shippingMethod.Description;
                shippingOption.Rate        = GetRate();
                shippingOptions.Add(shippingOption);
            }

            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment option</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
                throw new ArgumentNullException("ShipmentPackage");
            if (ShipmentPackage.Items == null)
                throw new NopSolutions.NopCommerce.Common.NopException("No shipment items");
            if (ShipmentPackage.ShippingAddress == null)
            {
                Error = "Shipping address is not set";
                return shippingOptions;
            }

            string url = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.URL");
            string username = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.Username");
            string password = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.Password");
            decimal additionalHandlingCharge = SettingManager.GetSettingValueDecimalNative("ShippingRateComputationMethod.USPS.AdditionalHandlingCharge");
            ShipmentPackage.ZipPostalCodeFrom = SettingManager.GetSettingValue("ShippingRateComputationMethod.USPS.DefaultShippedFromZipPostalCode");
            string requestString = CreateRequest(username, password, ShipmentPackage);
            string responseXML = DoRequest(url, requestString);
            shippingOptions = ParseResponse(responseXML, ref Error);
            foreach (ShippingOption shippingOption in shippingOptions)
                shippingOption.Rate += additionalHandlingCharge;

            if (String.IsNullOrEmpty(Error) && shippingOptions.Count == 0)
                Error = "Shipping options could not be loaded";
            return shippingOptions;
        }
        private ShippingOptionCollection ParseResponse(string response, ref string error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            using (StringReader sr = new StringReader(response))
            using (XmlTextReader tr = new XmlTextReader(sr))


                do
                // while (tr.Read())
                {
                    // Read the next XML record
                    tr.Read();

                    if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element))
                    {
                        string errorText = "";
                        while (tr.Read())
                        {
                            if ((tr.Name == "Description") && (tr.NodeType == XmlNodeType.Element))
                                errorText += "Error Desc: " + tr.ReadString();
                            if ((tr.Name == "HelpContext") && (tr.NodeType == XmlNodeType.Element))
                                errorText += "USPS Help Context: " + tr.ReadString() + ". ";
                        }
                        error = "USPS Error returned: " + errorText;
                    }

                    // Process the inner postage XML
                    if ((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.Element))
                    {
                        string serviceCode = "";
                        string postalRate = "";

                        // while (tr.Read())
                        do
                        {

                            tr.Read();

                            if ((tr.Name == "MailService") && (tr.NodeType == XmlNodeType.Element))
                            {
                                serviceCode = tr.ReadString();

                                tr.ReadEndElement();
                                if ((tr.Name == "MailService") && (tr.NodeType == XmlNodeType.EndElement))
                                    break;
                            }
                            // if (((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.EndElement)) || ((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.Element)))
                            //   break;

                            if ((tr.Name == "Rate") && (tr.NodeType == XmlNodeType.Element))
                            {
                                postalRate = tr.ReadString();
                                tr.ReadEndElement();
                                if ((tr.Name == "Rate") && (tr.NodeType == XmlNodeType.EndElement))
                                    break;
                            }

                        } while (!((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.EndElement)));

                        if (shippingOptions.Find((s) => s.Name == serviceCode) == null)
                        {
                            ShippingOption shippingOption = new ShippingOption();
                            //TODO check whether we need to multiply rate by package quantity
                            shippingOption.Rate = Convert.ToDecimal(postalRate, new CultureInfo("en-US"));
                            shippingOption.Name = serviceCode;
                            shippingOptions.Add(shippingOption);
                        }
                    }
                } while (!tr.EOF);
            return shippingOptions;
        }
Example #23
0
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.Country == null)
            {
                error = "Shipping country is not set";
                return(shippingOptions);
            }

            RateRequest request = CreateRateRequest(shipmentPackage);
            RateService service = new RateService(); // Initialize the service

            service.Url = SettingManager.GetSettingValue("ShippingRateComputationMethod.FedEx.URL");
            try
            {
                // This is the call to the web service passing in a RateRequest and returning a RateReply
                var reply = service.getRates(request);                                                                                                                                                // Service call

                if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful
                {
                    if (reply != null && reply.RateReplyDetails != null)
                    {
                        shippingOptions = ParseResponse(reply);
                    }
                    else
                    {
                        error = "Could not get reply from shipping server";
                    }
                }
                else
                {
                    Debug.WriteLine(reply.Notifications[0].Message);
                    error = reply.Notifications[0].Message;
                }
            }
            catch (SoapException e)
            {
                Debug.WriteLine(e.Detail.InnerText);
                error = e.Detail.InnerText;
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                error = e.Message;
            }

            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="cart">Shopping cart</param>
        /// <param name="customer">Customer</param>
        /// <param name="shippingAddress">Shipping address</param>
        /// <param name="allowedShippingRateComputationMethodId">Allowed shipping rate computation method identifier; null to load shipping options of all methods</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public static ShippingOptionCollection GetShippingOptions(ShoppingCart cart,
                                                                  Customer customer, Address shippingAddress,
                                                                  int?allowedShippingRateComputationMethodId, ref string error)
        {
            if (cart == null)
            {
                throw new ArgumentNullException("cart");
            }

            var shippingOptions = new ShippingOptionCollection();

            bool isFreeShipping = IsFreeShipping(cart, customer);

            var ShipmentPackage = CreateShipmentPackage(cart, customer, shippingAddress);
            var shippingRateComputationMethods = ShippingRateComputationMethodManager.GetAllShippingRateComputationMethods(false);

            if (shippingRateComputationMethods.Count == 0)
            {
                throw new NopException("Shipping rate computation method could not be loaded");
            }

            foreach (var srcm in shippingRateComputationMethods)
            {
                if (allowedShippingRateComputationMethodId.HasValue &&
                    allowedShippingRateComputationMethodId.Value > 0 &&
                    allowedShippingRateComputationMethodId.Value != srcm.ShippingRateComputationMethodId)
                {
                    continue;
                }

                var iShippingRateComputationMethod = Activator.CreateInstance(Type.GetType(srcm.ClassName)) as IShippingRateComputationMethod;

                var shippingOptions2 = iShippingRateComputationMethod.GetShippingOptions(ShipmentPackage, ref error);
                if (shippingOptions2 != null)
                {
                    foreach (var so2 in shippingOptions2)
                    {
                        so2.ShippingRateComputationMethodId = srcm.ShippingRateComputationMethodId;
                        shippingOptions.Add(so2);
                    }
                }
            }

            if (shippingOptions.Count == 0)
            {
                error = "Shipping options could not be loaded";
            }

            //additional shipping charges
            decimal additionalShippingCharge = GetShoppingCartAdditionalShippingCharge(cart, customer);

            shippingOptions.ForEach(so => so.Rate += additionalShippingCharge);

            //discounts
            foreach (var so in shippingOptions)
            {
                decimal rateWithoutDiscount = Math.Round(so.Rate, 2);
                decimal rateWithDiscount    = decimal.Zero;

                Discount rateDiscount       = null;
                decimal  rateDiscountAmount = GetShippingDiscount(customer, rateWithoutDiscount, out rateDiscount);
                rateWithDiscount = rateWithoutDiscount - rateDiscountAmount;
                if (rateWithDiscount < decimal.Zero)
                {
                    rateWithDiscount = decimal.Zero;
                }

                rateWithDiscount = Math.Round(rateWithDiscount, 2);

                so.Rate = rateWithDiscount;
                if (rateDiscount != null)
                {
                    so.AppliedDiscountId = rateDiscount.DiscountId;
                }
            }

            //free shipping
            if (isFreeShipping)
            {
                shippingOptions.ForEach(so => so.Rate = decimal.Zero);
            }

            return(shippingOptions);
        }
        /// <summary>
        /// Post cart to google
        /// </summary>
        /// <param name="req">Pre-generated request</param>
        /// <param name="cart">Shopping cart</param>
        /// <returns>Response</returns>
        public GCheckoutResponse PostCartToGoogle(CheckoutShoppingCartRequest req,
                                                  NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCart cart)
        {
            //items
            foreach (NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCartItem sci in cart)
            {
                ProductVariant productVariant = sci.ProductVariant;
                if (productVariant != null)
                {
                    string  description = ProductAttributeHelper.FormatAttributes(productVariant, sci.AttributesXml, NopContext.Current.User, ", ", false);
                    string  fullName    = productVariant.FullProductName;
                    decimal unitPrice   = TaxManager.GetPrice(sci.ProductVariant, PriceHelper.GetUnitPrice(sci, NopContext.Current.User, true));
                    req.AddItem(fullName, description, sci.ShoppingCartItemId.ToString(), unitPrice, sci.Quantity);
                }
            }

            //discounts
            decimal  subTotalDiscountBase = decimal.Zero;
            Discount appliedDiscount      = null;
            //List<AppliedGiftCard> appliedGiftCards = null;
            decimal subtotalBaseWithoutPromo = decimal.Zero;
            decimal subtotalBaseWithPromo    = decimal.Zero;
            string  SubTotalError            = ShoppingCartManager.GetShoppingCartSubTotal(cart,
                                                                                           NopContext.Current.User, out subTotalDiscountBase,
                                                                                           out appliedDiscount,
                                                                                           out subtotalBaseWithoutPromo, out subtotalBaseWithPromo);

            if (subTotalDiscountBase > decimal.Zero)
            {
                req.AddItem("Discount", string.Empty, string.Empty, (decimal)(-1.0) * subTotalDiscountBase, 1);
            }
            //foreach (AppliedGiftCard agc in appliedGiftCards)
            //{
            //    req.AddItem(string.Format("Gift Card - {0}", agc.GiftCard.GiftCardCouponCode), string.Empty, string.Empty, (decimal)(-1.0) * agc.AmountCanBeUsed, 1);
            //}

            bool shoppingCartRequiresShipping = ShippingManager.ShoppingCartRequiresShipping(cart);

            if (shoppingCartRequiresShipping)
            {
                string shippingError = string.Empty;
                //TODO AddMerchantCalculatedShippingMethod
                //TODO AddCarrierCalculatedShippingOption
                ShippingOptionCollection shippingOptions = ShippingManager.GetShippingOptions(cart, NopContext.Current.User, null, ref shippingError);
                foreach (ShippingOption shippingOption in shippingOptions)
                {
                    req.AddFlatRateShippingMethod(shippingOption.Name, TaxManager.GetShippingPrice(shippingOption.Rate, NopContext.Current.User));
                }
            }

            //add only US, GB states
            //CountryCollection countries = CountryManager.GetAllCountries();
            //foreach (Country country in countries)
            //{
            //    foreach (StateProvince state in country.StateProvinces)
            //    {
            //        TaxByStateProvinceCollection taxByStateProvinceCollection = TaxByStateProvinceManager.GetAllByStateProvinceID(state.StateProvinceID);
            //        foreach (TaxByStateProvince taxByStateProvince in taxByStateProvinceCollection)
            //        {
            //            if (!String.IsNullOrEmpty(state.Abbreviation))
            //            {
            //                Req.AddStateTaxRule(state.Abbreviation, (double)taxByStateProvince.Percentage, false);
            //            }
            //        }
            //    }
            //}

            XmlDocument customerInfoDoc = new XmlDocument();
            XmlElement  customerInfo    = customerInfoDoc.CreateElement("CustomerInfo");

            customerInfo.SetAttribute("CustomerID", NopContext.Current.User.CustomerId.ToString());
            customerInfo.SetAttribute("CustomerLanguageID", NopContext.Current.WorkingLanguage.LanguageId.ToString());
            customerInfo.SetAttribute("CustomerCurrencyID", NopContext.Current.WorkingCurrency.CurrencyId.ToString());
            req.AddMerchantPrivateDataNode(customerInfo);

            req.ContinueShoppingUrl = CommonHelper.GetStoreLocation(false);
            req.EditCartUrl         = CommonHelper.GetStoreLocation(false) + "ShoppingCart.aspx";

            GCheckoutResponse resp = req.Send();

            return(resp);
        }
        private ShippingOptionCollection ParseResponse(string response, ref string error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            using (StringReader sr = new StringReader(response))
            using (XmlTextReader tr = new XmlTextReader(sr))
                while (tr.Read())
                {
                    if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element))
                    {
                        string errorText = "";
                        while (tr.Read())
                        {
                            if ((tr.Name == "ErrorCode") && (tr.NodeType == XmlNodeType.Element))
                            {
                                errorText += "UPS Rating Error, Error Code: " + tr.ReadString() + ", ";
                            }
                            if ((tr.Name == "ErrorDescription") && (tr.NodeType == XmlNodeType.Element))
                            {
                                errorText += "Error Desc: " + tr.ReadString();
                            }
                        }
                        error = "UPS Error returned: " + errorText;
                    }
                    if ((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.Element))
                    {
                        string serviceCode = "";
                        string monetaryValue = "";
                        while (tr.Read())
                        {
                            if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.Element))
                            {
                                while (tr.Read())
                                {
                                    if ((tr.Name == "Code") && (tr.NodeType == XmlNodeType.Element))
                                    {
                                        serviceCode = tr.ReadString();
                                        tr.ReadEndElement();
                                    }
                                    if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.EndElement))
                                    {
                                        break;
                                    }
                                }
                            }
                            if (((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.EndElement)) || ((tr.Name == "RatedPackage") && (tr.NodeType == XmlNodeType.Element)))
                            {
                                break;
                            }
                            if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.Element))
                            {
                                while (tr.Read())
                                {
                                    if ((tr.Name == "MonetaryValue") && (tr.NodeType == XmlNodeType.Element))
                                    {
                                        monetaryValue = tr.ReadString();
                                        tr.ReadEndElement();
                                    }
                                    if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.EndElement))
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        string service = GetServiceName(serviceCode);

                        //Weed out unwanted or unkown service rates
                        if (service.ToUpper() != "UNKNOWN")
                        {
                            ShippingOption shippingOption = new ShippingOption();
                            shippingOption.Rate = Convert.ToDecimal(monetaryValue, new CultureInfo("en-US"));
                            shippingOption.Name = service;
                            shippingOptions.Add(shippingOption);
                        }

                    }
                }

            return shippingOptions;
        }
        private ShippingOptionCollection ParseResponse(string response, ref string error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            using (StringReader sr = new StringReader(response))
                using (XmlTextReader tr = new XmlTextReader(sr))


                    do
                    // while (tr.Read())
                    {
                        // Read the next XML record
                        tr.Read();

                        if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element))
                        {
                            string errorText = "";
                            while (tr.Read())
                            {
                                if ((tr.Name == "Description") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    errorText += "Error Desc: " + tr.ReadString();
                                }
                                if ((tr.Name == "HelpContext") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    errorText += "USPS Help Context: " + tr.ReadString() + ". ";
                                }
                            }
                            error = "USPS Error returned: " + errorText;
                        }

                        // Process the inner postage XML
                        if ((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.Element))
                        {
                            string serviceCode = "";
                            string postalRate  = "";

                            // while (tr.Read())
                            do
                            {
                                tr.Read();

                                if ((tr.Name == "MailService") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    serviceCode = tr.ReadString();

                                    tr.ReadEndElement();
                                    if ((tr.Name == "MailService") && (tr.NodeType == XmlNodeType.EndElement))
                                    {
                                        break;
                                    }
                                }
                                // if (((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.EndElement)) || ((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.Element)))
                                //   break;

                                if ((tr.Name == "Rate") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    postalRate = tr.ReadString();
                                    tr.ReadEndElement();
                                    if ((tr.Name == "Rate") && (tr.NodeType == XmlNodeType.EndElement))
                                    {
                                        break;
                                    }
                                }
                            } while (!((tr.Name == "Postage") && (tr.NodeType == XmlNodeType.EndElement)));

                            if (shippingOptions.Find((s) => s.Name == serviceCode) == null)
                            {
                                ShippingOption shippingOption = new ShippingOption();
                                //TODO check whether we need to multiply rate by package quantity
                                shippingOption.Rate = Convert.ToDecimal(postalRate, new CultureInfo("en-US"));
                                shippingOption.Name = serviceCode;
                                shippingOptions.Add(shippingOption);
                            }
                        }
                    } while (!tr.EOF);
            return(shippingOptions);
        }
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }

            string  url                      = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.URL");
            string  siteid                   = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.SiteID");
            string  password                 = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.Password");
            string  countryFrom              = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.ShippingCountry");
            string  cityFrom                 = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.ShippingCity");
            string  divisionFrom             = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.ShippingDivision");
            string  postalCodeFrom           = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.DefaultShippedFromZipPostalCode");
            decimal additionalHandlingCharge = SettingManager.GetSettingValueDecimalNative("ShippingRateComputationMethod.DHL.AdditionalHandlingCharge");

            shipmentPackage.CountryFrom       = CountryManager.GetCountryByTwoLetterIsoCode(SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.ShippingCountry"));
            shipmentPackage.ZipPostalCodeFrom = postalCodeFrom;

            string requestStringWithTokens = CreateRequest(siteid, password, cityFrom, divisionFrom, shipmentPackage);
            bool   isDomestic = IsDomestic(shipmentPackage);

            string carrierServices = string.Empty;

            if (isDomestic)
            {
                carrierServices = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.DomesticServices");

                foreach (DHLService service in domesticSeviceList)
                {
                    if (carrierServices.Contains(service.ServiceID))
                    {
                        string requestString  = requestStringWithTokens.Replace(ProductCodeToken, service.ServiceID);
                        string responseXML    = DoRequest(url, requestString);
                        var    shippingOption = ParseResponse(responseXML, ref error);
                        if (shippingOption != null)
                        {
                            shippingOption.Name  = string.Format("DHL {0}", GetServiceName(service.ServiceID, true));
                            shippingOption.Rate += additionalHandlingCharge;
                            shippingOptions.Add(shippingOption);
                        }
                    }
                }
            }
            else
            {
                carrierServices = SettingManager.GetSettingValue("ShippingRateComputationMethod.DHL.InternationalServices");
                foreach (DHLService service in intlServiceList)
                {
                    if (carrierServices.Contains(service.ServiceID))
                    {
                        string requestString  = requestStringWithTokens.Replace(ProductCodeToken, service.ServiceID);
                        string responseXML    = DoRequest(url, requestString);
                        var    shippingOption = ParseResponse(responseXML, ref error);
                        if (shippingOption != null)
                        {
                            shippingOption.Name  = string.Format("DHL {0}", GetServiceName(service.ServiceID, false));
                            shippingOption.Rate += additionalHandlingCharge;
                            shippingOptions.Add(shippingOption);
                        }
                    }
                }
            }
            return(shippingOptions);
        }
Example #29
0
        /// <summary>
        /// Post cart to google
        /// </summary>
        /// <param name="Req">Pre-generated request</param>
        /// <param name="Cart">Shopping cart</param>
        /// <returns>Response</returns>
        public GCheckoutResponse PostCartToGoogle(CheckoutShoppingCartRequest Req, NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCart Cart)
        {
            foreach (NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCartItem sci in Cart)
            {
                ProductVariant productVariant = sci.ProductVariant;
                if (productVariant != null)
                {
                    string  pvAttributeDescription = ProductAttributeHelper.FormatAttributes(productVariant, sci.AttributesXML, NopContext.Current.User, ", ", false);
                    string  fullName    = productVariant.FullProductName;
                    string  description = pvAttributeDescription;
                    decimal unitPrice   = TaxManager.GetPrice(sci.ProductVariant, PriceHelper.GetUnitPrice(sci, NopContext.Current.User, true));
                    Req.AddItem(fullName, description, sci.ShoppingCartItemID.ToString(), unitPrice, sci.Quantity);
                }
            }

            decimal shoppingCartSubTotalDiscount;
            decimal shoppingCartSubTotal = ShoppingCartManager.GetShoppingCartSubTotal(Cart, NopContext.Current.User, out shoppingCartSubTotalDiscount);

            if (shoppingCartSubTotalDiscount > decimal.Zero)
            {
                Req.AddItem("Discount", string.Empty, string.Empty, (decimal)(-1.0) * shoppingCartSubTotalDiscount, 1);
            }

            bool shoppingCartRequiresShipping = ShippingManager.ShoppingCartRequiresShipping(Cart);

            if (shoppingCartRequiresShipping)
            {
                string shippingError = string.Empty;
                //TODO AddMerchantCalculatedShippingMethod
                //TODO AddCarrierCalculatedShippingOption
                ShippingOptionCollection shippingOptions = ShippingManager.GetShippingOptions(Cart, NopContext.Current.User, null, ref shippingError);
                foreach (ShippingOption shippingOption in shippingOptions)
                {
                    Req.AddFlatRateShippingMethod(shippingOption.Name, TaxManager.GetShippingPrice(shippingOption.Rate, NopContext.Current.User));
                }
            }

            //add only US, GB states
            //CountryCollection countries = CountryManager.GetAllCountries();
            //foreach (Country country in countries)
            //{
            //    foreach (StateProvince state in country.StateProvinces)
            //    {
            //        TaxByStateProvinceCollection taxByStateProvinceCollection = TaxByStateProvinceManager.GetAllByStateProvinceID(state.StateProvinceID);
            //        foreach (TaxByStateProvince taxByStateProvince in taxByStateProvinceCollection)
            //        {
            //            if (!String.IsNullOrEmpty(state.Abbreviation))
            //            {
            //                Req.AddStateTaxRule(state.Abbreviation, (double)taxByStateProvince.Percentage, false);
            //            }
            //        }
            //    }
            //}

            XmlDocument customerInfoDoc = new XmlDocument();
            XmlElement  customerInfo    = customerInfoDoc.CreateElement("CustomerInfo");

            customerInfo.SetAttribute("CustomerID", NopContext.Current.User.CustomerID.ToString());
            customerInfo.SetAttribute("CustomerLanguageID", NopContext.Current.WorkingLanguage.LanguageID.ToString());
            customerInfo.SetAttribute("CustomerCurrencyID", NopContext.Current.WorkingCurrency.CurrencyID.ToString());
            Req.AddMerchantPrivateDataNode(customerInfo);

            Req.ContinueShoppingUrl = CommonHelper.GetStoreLocation(false);
            Req.EditCartUrl         = CommonHelper.GetStoreLocation(false) + "ShoppingCart.aspx";

            GCheckoutResponse Resp = Req.Send();

            return(Resp);
        }
        private ShippingOptionCollection ParseResponse(string response, bool isDomestic, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            string postageStr     = isDomestic ? "Postage" : "Service";
            string mailServiceStr = isDomestic ? "MailService" : "SvcDescription";
            string rateStr        = isDomestic ? "Rate" : "Postage";

            using (var sr = new StringReader(response))
                using (var tr = new XmlTextReader(sr))
                {
                    do
                    {
                        tr.Read();

                        if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element))
                        {
                            string errorText = "";
                            while (tr.Read())
                            {
                                if ((tr.Name == "Description") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    errorText += "Error Desc: " + tr.ReadString();
                                }
                                if ((tr.Name == "HelpContext") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    errorText += "USPS Help Context: " + tr.ReadString() + ". ";
                                }
                            }
                            error = "USPS Error returned: " + errorText;
                        }

                        if ((tr.Name == postageStr) && (tr.NodeType == XmlNodeType.Element))
                        {
                            string serviceCode = string.Empty;
                            string postalRate  = string.Empty;

                            do
                            {
                                tr.Read();

                                if ((tr.Name == mailServiceStr) && (tr.NodeType == XmlNodeType.Element))
                                {
                                    serviceCode = tr.ReadString();

                                    tr.ReadEndElement();
                                    if ((tr.Name == mailServiceStr) && (tr.NodeType == XmlNodeType.EndElement))
                                    {
                                        break;
                                    }
                                }

                                if ((tr.Name == rateStr) && (tr.NodeType == XmlNodeType.Element))
                                {
                                    postalRate = tr.ReadString();
                                    tr.ReadEndElement();
                                    if ((tr.Name == rateStr) && (tr.NodeType == XmlNodeType.EndElement))
                                    {
                                        break;
                                    }
                                }
                            }while (!((tr.Name == postageStr) && (tr.NodeType == XmlNodeType.EndElement)));

                            if (shippingOptions.Find((s) => s.Name == serviceCode) == null)
                            {
                                var shippingOption = new ShippingOption();
                                //TODO check whether we need to multiply rate by package quantity
                                shippingOption.Rate = Convert.ToDecimal(postalRate, new CultureInfo("en-US"));
                                shippingOption.Name = serviceCode;
                                shippingOptions.Add(shippingOption);
                            }
                        }
                    }while (!tr.EOF);
                }
            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (ShipmentPackage == null)
            {
                throw new ArgumentNullException("ShipmentPackage");
            }
            if (ShipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (ShipmentPackage.ShippingAddress == null)
            {
                Error = "Shipping address is not set";
                return(shippingOptions);
            }
            if (ShipmentPackage.ShippingAddress.Country == null)
            {
                Error = "Shipping country is not set";
                return(shippingOptions);
            }

            MeasureWeight baseWeightIn = MeasureManager.BaseWeightIn;

            if (baseWeightIn.SystemKeyword != "lb")
            {
                throw new NopException("USPS shipping service. Base weight should be set to lb(s)");
            }

            MeasureDimension baseDimensionIn = MeasureManager.BaseDimensionIn;

            if (baseDimensionIn.SystemKeyword != "inches")
            {
                throw new NopException("USPS shipping service. Base dimension should be set to inch(es)");
            }



            RateRequest request = CreateRateRequest(ShipmentPackage);
            RateService service = new RateService(); // Initialize the service

            service.Url = SettingManager.GetSettingValue("ShippingRateComputationMethod.FedEx.URL");
            try
            {
                // This is the call to the web service passing in a RateRequest and returning a RateReply
                RateReply reply = service.getRates(request);                                                                                                                                          // Service call
                //
                if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful
                {
                    if (reply != null && reply.RateReplyDetails != null)
                    {
                        shippingOptions = ParseResponse(reply);
                    }
                    else
                    {
                        Error = "Could not get reply from shipping server";
                    }
                }
                else
                {
                    Debug.WriteLine(reply.Notifications[0].Message);
                    Error = reply.Notifications[0].Message;
                }
            }
            catch (SoapException e)
            {
                Debug.WriteLine(e.Detail.InnerText);
                Error = e.Detail.InnerText;
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                Error = e.Message;
            }



            if (String.IsNullOrEmpty(Error) && shippingOptions.Count == 0)
            {
                Error = "Shipping options could not be loaded";
            }
            return(shippingOptions);
        }
Example #32
0
        private ShippingOptionCollection ParseResponse(string response, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            using (var sr = new StringReader(response))
                using (var tr = new XmlTextReader(sr))
                    while (tr.Read())
                    {
                        if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element))
                        {
                            string errorText = "";
                            while (tr.Read())
                            {
                                if ((tr.Name == "ErrorCode") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    errorText += "UPS Rating Error, Error Code: " + tr.ReadString() + ", ";
                                }
                                if ((tr.Name == "ErrorDescription") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    errorText += "Error Desc: " + tr.ReadString();
                                }
                            }
                            error = "UPS Error returned: " + errorText;
                        }
                        if ((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.Element))
                        {
                            string serviceCode   = "";
                            string monetaryValue = "";
                            while (tr.Read())
                            {
                                if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    while (tr.Read())
                                    {
                                        if ((tr.Name == "Code") && (tr.NodeType == XmlNodeType.Element))
                                        {
                                            serviceCode = tr.ReadString();
                                            tr.ReadEndElement();
                                        }
                                        if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.EndElement))
                                        {
                                            break;
                                        }
                                    }
                                }
                                if (((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.EndElement)) || ((tr.Name == "RatedPackage") && (tr.NodeType == XmlNodeType.Element)))
                                {
                                    break;
                                }
                                if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.Element))
                                {
                                    while (tr.Read())
                                    {
                                        if ((tr.Name == "MonetaryValue") && (tr.NodeType == XmlNodeType.Element))
                                        {
                                            monetaryValue = tr.ReadString();
                                            tr.ReadEndElement();
                                        }
                                        if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.EndElement))
                                        {
                                            break;
                                        }
                                    }
                                }
                            }
                            string service = GetServiceName(serviceCode);

                            //Weed out unwanted or unkown service rates
                            if (service.ToUpper() != "UNKNOWN")
                            {
                                var shippingOption = new ShippingOption();
                                shippingOption.Rate = Convert.ToDecimal(monetaryValue, new CultureInfo("en-US"));
                                shippingOption.Name = service;
                                shippingOptions.Add(shippingOption);
                            }
                        }
                    }

            return(shippingOptions);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();
            if (ShipmentPackage == null)
                throw new ArgumentNullException("ShipmentPackage");
            if (ShipmentPackage.Items == null)
                throw new NopException("No shipment items");
            if (ShipmentPackage.ShippingAddress == null)
            {
                Error = "Shipping address is not set";
                return shippingOptions;
            }
            if (ShipmentPackage.ShippingAddress.Country == null)
            {
                Error = "Shipping country is not set";
                return shippingOptions;
            }

            MeasureWeight baseWeightIn = MeasureManager.BaseWeightIn;
            if (baseWeightIn.SystemKeyword != "lb")
                throw new NopException("USPS shipping service. Base weight should be set to lb(s)");

            MeasureDimension baseDimensionIn = MeasureManager.BaseDimensionIn;
            if (baseDimensionIn.SystemKeyword != "inches")
                throw new NopException("USPS shipping service. Base dimension should be set to inch(es)");



            RateRequest request = CreateRateRequest(ShipmentPackage);
            RateService service = new RateService(); // Initialize the service
            service.Url = SettingManager.GetSettingValue("ShippingRateComputationMethod.FedEx.URL");
            try
            {
                // This is the call to the web service passing in a RateRequest and returning a RateReply
                RateReply reply = service.getRates(request); // Service call
                //
                if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful
                {
                    if (reply != null && reply.RateReplyDetails != null)
                    {
                        shippingOptions = ParseResponse(reply);
                    }
                    else
                    {
                        Error = "Could not get reply from shipping server";
                    }
                }
                else
                {
                    Debug.WriteLine(reply.Notifications[0].Message);
                    Error = reply.Notifications[0].Message;
                }
            }
            catch (SoapException e)
            {
                Debug.WriteLine(e.Detail.InnerText);
                Error = e.Detail.InnerText;
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                Error = e.Message;
            }



            if (String.IsNullOrEmpty(Error) && shippingOptions.Count == 0)
                Error = "Shipping options could not be loaded";
            return shippingOptions;
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="ShipmentPackage">Shipment package</param>
        /// <param name="Error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();
            if (ShipmentPackage == null)
                throw new ArgumentNullException("ShipmentPackage");
            if (ShipmentPackage.Items == null)
                throw new NopException("No shipment items");
            if (ShipmentPackage.ShippingAddress == null)
            {
                Error = "Shipping address is not set";
                return shippingOptions;
            }
            if (ShipmentPackage.ShippingAddress.Country == null)
            {
                Error = "Shipping country is not set";
                return shippingOptions;
            }

            string url = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.URL");
            string accessKey = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.AccessKey");
            string username = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.Username");
            string password = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.Password");
            UPSCustomerClassification customerClassification = (UPSCustomerClassification)Enum.Parse(typeof(UPSCustomerClassification), SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.CustomerClassification"));
            UPSPickupType pickupType = (UPSPickupType)Enum.Parse(typeof(UPSPickupType), SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.PickupType"));
            UPSPackagingType packagingType = (UPSPackagingType)Enum.Parse(typeof(UPSPackagingType), SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.PackagingType"));
            decimal additionalHandlingCharge = SettingManager.GetSettingValueDecimalNative("ShippingRateComputationMethod.UPS.AdditionalHandlingCharge");
            if (ShipmentPackage.CountryFrom == null)
            {
                int defaultShippedFromCountryID = SettingManager.GetSettingValueInteger("ShippingRateComputationMethod.UPS.DefaultShippedFromCountryID");
                ShipmentPackage.CountryFrom = CountryManager.GetCountryByID(defaultShippedFromCountryID);
            }
            if (String.IsNullOrEmpty(ShipmentPackage.ZipPostalCodeFrom))
                ShipmentPackage.ZipPostalCodeFrom = SettingManager.GetSettingValue("ShippingRateComputationMethod.UPS.DefaultShippedFromZipPostalCode");
            
            string requestString = CreateRequest(accessKey, username, password, ShipmentPackage,
                customerClassification, pickupType, packagingType);
            string responseXML = DoRequest(url, requestString);
            shippingOptions = ParseResponse(responseXML, ref Error);
            foreach (ShippingOption shippingOption in shippingOptions)
                shippingOption.Rate += additionalHandlingCharge;
           
            if (String.IsNullOrEmpty(Error) && shippingOptions.Count == 0)
                Error = "Shipping options could not be loaded";
            return shippingOptions;
        }
        private ShippingOptionCollection ParseResponse(RateReply reply)
        {
            ShippingOptionCollection result = new ShippingOptionCollection();

            Debug.WriteLine("RateReply details:");
            Debug.WriteLine("**********************************************************");
            foreach (RateReplyDetail rateDetail in reply.RateReplyDetails)
            {
                Debug.WriteLine("ServiceType: " + rateDetail.ServiceType);
                for (int i = 0; i < rateDetail.RatedShipmentDetails.Length; i++)
                {
                    RatedShipmentDetail shipmentDetail = rateDetail.RatedShipmentDetails[i];
                    Debug.WriteLine("RateType : " + shipmentDetail.ShipmentRateDetail.RateType);
                    Debug.WriteLine("Total Billing Weight : " + shipmentDetail.ShipmentRateDetail.TotalBillingWeight.Value);
                    Debug.WriteLine("Total Base Charge : " + shipmentDetail.ShipmentRateDetail.TotalBaseCharge.Amount);
                    Debug.WriteLine("Total Discount : " + shipmentDetail.ShipmentRateDetail.TotalFreightDiscounts.Amount);
                    Debug.WriteLine("Total Surcharges : " + shipmentDetail.ShipmentRateDetail.TotalSurcharges.Amount);
                    Debug.WriteLine("Net Charge : " + shipmentDetail.ShipmentRateDetail.TotalNetCharge.Amount);
                    Debug.WriteLine("*********");

                    //take first one
                    if (i == 0)
                    {
                        ShippingOption shippingOption = new ShippingOption();
                        string userFriendlyServiceType = GetUserFriendlyEnum(rateDetail.ServiceType.ToString());
                        shippingOption.Name = userFriendlyServiceType;
                        shippingOption.Rate = shipmentDetail.ShipmentRateDetail.TotalNetCharge.Amount;
                        result.Add(shippingOption);
                    }
                }
                Debug.WriteLine("**********************************************************");
            }

            return result;
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            ShippingOptionCollection shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }

            shipmentPackage.ZipPostalCodeFrom = AustraliaPostSettings.ShippedFromZipPostalCode;
            string  ZipPostalCodeFrom = shipmentPackage.ZipPostalCodeFrom;
            string  ZipPostalCodeTo   = shipmentPackage.ShippingAddress.ZipPostalCode;
            int     weight            = GetWeight(shipmentPackage);
            int     length            = GetLength(shipmentPackage);
            int     width             = GetWidth(shipmentPackage);
            int     height            = GetHeight(shipmentPackage);
            Country country           = shipmentPackage.ShippingAddress.Country;

            if (length > MAX_LENGTH)
            {
                error = "Length exceed.";
                return(shippingOptions);
            }
            if (weight > MAX_WEIGHT)
            {
                error = "Weight exceed.";
                return(shippingOptions);
            }

            try
            {
                switch (country.ThreeLetterIsoCode)
                {
                case "AUS":
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "Standard", weight, length, width, height));
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "Express", weight, length, width, height));
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "EXP_PLT", weight, length, width, height));
                    break;

                default:
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "Air", weight, length, width, height));
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "Sea", weight, length, width, height));
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "ECI_D", weight, length, width, height));
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "ECI_M", weight, length, width, height));
                    shippingOptions.Add(RequestShippingOption(ZipPostalCodeFrom, ZipPostalCodeTo, country.TwoLetterIsoCode, "EPI", weight, length, width, height));
                    break;
                }

                foreach (ShippingOption shippingOption in shippingOptions)
                {
                    shippingOption.Rate += AustraliaPostSettings.AdditionalHandlingCharge;
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            return(shippingOptions);
        }
 /// <summary>
 /// Gets the shipping options.
 /// </summary>
 /// <param name="order">The order.</param>
 /// <returns></returns>
 public ShippingOptionCollection GetShippingOptions(Order order)
 {
     ShippingOptionCollection shippingOptionCollection = new ShippingOptionCollection();
       ShippingOptionCollection serviceOptionCollection;
       foreach(IShippingProvider shippingProvider in _shippingProviderCollection) {
     serviceOptionCollection = shippingProvider.GetShippingOptions(order);
     if(this.ShippingServiceSettings.ShippingBuffer > 0) {
       foreach(ShippingOption shippingOption in serviceOptionCollection) {
     shippingOption.Rate = shippingOption.Rate + this.ShippingServiceSettings.ShippingBuffer;
       }
     }
     shippingOptionCollection.Add(serviceOptionCollection);
       }
       return shippingOptionCollection;
 }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="shipmentPackage">Shipment package</param>
        /// <param name="error">Error</param>
        /// <returns>Shipping options</returns>
        public ShippingOptionCollection GetShippingOptions(ShipmentPackage shipmentPackage, ref string error)
        {
            var shippingOptions = new ShippingOptionCollection();

            if (shipmentPackage == null)
            {
                throw new ArgumentNullException("shipmentPackage");
            }
            if (shipmentPackage.Items == null)
            {
                throw new NopException("No shipment items");
            }
            if (shipmentPackage.ShippingAddress == null)
            {
                error = "Shipping address is not set";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.Country == null)
            {
                error = "Shipping country is not set";
                return(shippingOptions);
            }
            if (shipmentPackage.ShippingAddress.StateProvince == null)
            {
                error = "Shipping state is not set";
                return(shippingOptions);
            }

            try
            {
                var profile = new Profile();
                //use "CPC_DEMO_XML" merchant ID for testing
                profile.MerchantId = SettingManager.GetSettingValue("ShippingRateComputationMethod.CanadaPost.CustomerID");

                var destination = new Destination();
                destination.City            = shipmentPackage.ShippingAddress.City;
                destination.StateOrProvince = shipmentPackage.ShippingAddress.StateProvince.Abbreviation;
                destination.Country         = shipmentPackage.ShippingAddress.Country.TwoLetterIsoCode;
                destination.PostalCode      = shipmentPackage.ShippingAddress.ZipPostalCode;

                var items = CreateItems(shipmentPackage);

                var lang = CanadaPostLanguageEnum.English;
                if (NopContext.Current.WorkingLanguage.LanguageCulture.ToLowerInvariant().StartsWith("fr"))
                {
                    lang = CanadaPostLanguageEnum.French;
                }

                var requestResult = GetShippingOptionsInternal(profile, destination, items, lang);
                if (requestResult.IsError)
                {
                    error = requestResult.StatusMessage;
                }
                else
                {
                    foreach (var dr in requestResult.AvailableRates)
                    {
                        var so = new ShippingOption();
                        so.Name = dr.Name;
                        if (!string.IsNullOrEmpty(dr.DeliveryDate))
                        {
                            so.Name += string.Format(" - {0}", dr.DeliveryDate);
                        }
                        so.Rate = dr.Amount;
                        shippingOptions.Add(so);
                    }
                }

                foreach (var shippingOption in shippingOptions)
                {
                    if (!shippingOption.Name.ToLower().StartsWith("canada post"))
                    {
                        shippingOption.Name = string.Format("Canada Post {0}", shippingOption.Name);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                error = e.Message;
            }

            return(shippingOptions);
        }