/// <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); }
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); }
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); }
/// <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); }
/// <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("Нет товаров для доставки. "); } 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); }
/// <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; }
/// <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); }
/// <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); }
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); }