/// <summary> /// Prepare shipping method model /// </summary> /// <param name="cart">Cart</param> /// <param name="shippingAddress">Shipping address</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the shipping method model /// </returns> public virtual async Task <CheckoutShippingMethodModel> PrepareShippingMethodModelAsync(IList <ShoppingCartItem> cart, Address shippingAddress) { var model = new CheckoutShippingMethodModel { DisplayPickupInStore = _orderSettings.DisplayPickupInStoreOnShippingMethodPage }; if (_orderSettings.DisplayPickupInStoreOnShippingMethodPage) { model.PickupPointsModel = await PrepareCheckoutPickupPointsModelAsync(cart); } var customer = await _workContext.GetCurrentCustomerAsync(); var store = await _storeContext.GetCurrentStoreAsync(); var getShippingOptionResponse = await _shippingService.GetShippingOptionsAsync(cart, shippingAddress, customer, storeId : store.Id); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.OfferedShippingOptionsAttribute, getShippingOptionResponse.ShippingOptions, store.Id); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel { Name = shippingOption.Name, Description = shippingOption.Description, DisplayOrder = shippingOption.DisplayOrder ?? 0, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, ShippingOption = shippingOption, }; //adjust rate var(shippingTotal, _) = await _orderTotalCalculationService.AdjustShippingRateAsync(shippingOption.Rate, cart, shippingOption.IsPickupInStore); var(rateBase, _) = await _taxService.GetShippingPriceAsync(shippingTotal, customer); var rate = await _currencyService.ConvertFromPrimaryStoreCurrencyAsync(rateBase, await _workContext.GetWorkingCurrencyAsync()); soModel.Fee = await _priceFormatter.FormatShippingPriceAsync(rate, true); soModel.Rate = rate; model.ShippingMethods.Add(soModel); } //sort shipping methods if (model.ShippingMethods.Count > 1) { model.ShippingMethods = (_shippingSettings.ShippingSorting switch { ShippingSortingEnum.ShippingCost => model.ShippingMethods.OrderBy(option => option.Rate), _ => model.ShippingMethods.OrderBy(option => option.DisplayOrder) }).ToList();
protected CheckoutShippingMethodModel PrepareShippingMethodModel(IOrderedEnumerable <ShoppingCartItem> cart) { var model = new CheckoutShippingMethodModel(); //var customer = _workContext.CurrentCustomer; var shipping = _shippingMethodService.GetAll(); if (shipping.IsAny()) { model.ShippingMethods = (from x in shipping select new CheckoutShippingMethodModel.ShippingMethodModel { Id = x.Id, Name = x.Name, Description = x.Description }).ToList(); } var selectedShippingOption = _workContext.CurrentCustomer.GetAttribute("Customer", Contains.SelectedShippingOption, _genericAttributeService); var selected = false; if (selectedShippingOption.HasValue()) { var shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !string.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption, StringComparison.InvariantCultureIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; selected = true; } } // if no option has been selected, let's do it for the first one if (!selected) { var shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } return(model); }
protected CheckoutShippingMethodModel PrepareShippingMethodModel(IList <OrganizedShoppingCartItem> cart) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, _workContext.CurrentCustomer.ShippingAddress, "", _storeContext.CurrentStore.Id); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.OfferedShippingOptions, getShippingOptionResponse.ShippingOptions, _storeContext.CurrentStore.Id); var shippingMethods = _shippingService.GetAllShippingMethods(); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel() { ShippingMethodId = shippingOption.ShippingMethodId, Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, }; var srcmProvider = _shippingService.LoadShippingRateComputationMethodBySystemName(shippingOption.ShippingRateComputationMethodSystemName); if (srcmProvider != null) { soModel.BrandUrl = _pluginMediator.GetBrandImageUrl(srcmProvider.Metadata); } //adjust rate Discount appliedDiscount = null; var shippingTotal = _orderTotalCalculationService.AdjustShippingRate( shippingOption.Rate, cart, shippingOption.Name, shippingMethods, out appliedDiscount); decimal rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); decimal rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.FeeRaw = rate; soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } //find a selected (previously) shipping method var selectedShippingOption = _workContext.CurrentCustomer.GetAttribute <ShippingOption>(SystemCustomerAttributeNames.SelectedShippingOption, _storeContext.CurrentStore.Id); if (selectedShippingOption != null) { var shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !String.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption.Name, StringComparison.InvariantCultureIgnoreCase) && !String.IsNullOrEmpty(so.ShippingRateComputationMethodSystemName) && so.ShippingRateComputationMethodSystemName.Equals(selectedShippingOption.ShippingRateComputationMethodSystemName, StringComparison.InvariantCultureIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //if no option has been selected, let's do it for the first one if (model.ShippingMethods.Where(so => so.Selected).FirstOrDefault() == null) { var shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } } else { foreach (var error in getShippingOptionResponse.Errors) { model.Warnings.Add(error); } } return(model); }
public virtual async Task <CheckoutShippingMethodModel> PrepareShippingMethod(IList <ShoppingCartItem> cart, Address shippingAddress) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = await _shippingService .GetShippingOptions(_workContext.CurrentCustomer, cart, shippingAddress, "", _storeContext.CurrentStore); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). await _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.OfferedShippingOptions, getShippingOptionResponse.ShippingOptions, _storeContext.CurrentStore.Id); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, ShippingOption = shippingOption, }; //adjust rate var shippingTotal = (await _orderTotalCalculationService.AdjustShippingRate( shippingOption.Rate, cart)).shippingRate; decimal rateBase = (await _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer)).shippingPrice; decimal rate = await _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } //find a selected (previously) shipping method var selectedShippingOption = await _workContext.CurrentCustomer.GetAttribute <ShippingOption>( _genericAttributeService, SystemCustomerAttributeNames.SelectedShippingOption, _storeContext.CurrentStore.Id); if (selectedShippingOption != null) { var shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !String.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption.Name, StringComparison.OrdinalIgnoreCase) && !String.IsNullOrEmpty(so.ShippingRateComputationMethodSystemName) && so.ShippingRateComputationMethodSystemName.Equals(selectedShippingOption.ShippingRateComputationMethodSystemName, StringComparison.OrdinalIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //if no option has been selected, let's do it for the first one if (model.ShippingMethods.FirstOrDefault(so => so.Selected) == null) { var shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //notify about shipping from multiple locations if (_shippingSettings.NotifyCustomerAboutShippingFromMultipleLocations) { model.NotifyCustomerAboutShippingFromMultipleLocations = getShippingOptionResponse.ShippingFromMultipleLocations; } } else { foreach (var error in getShippingOptionResponse.Errors) { model.Warnings.Add(error); } } return(model); }
public CheckoutShippingMethodModel PrepareShippingMethodModel(IList <ShoppingCartItem> cart) { var model = new CheckoutShippingMethodModel(); var shippingAddress = _addressService.GetAddressById(_workContext.CurrentCustomer.ShippingAddressId ?? 0); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, shippingAddress); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, NopCustomerDefaults.OfferedShippingOptionsAttribute, getShippingOptionResponse.ShippingOptions, _storeContext.CurrentStore.Id); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName }; //adjust rate var shippingTotal = _orderTotalCalculationService.AdjustShippingRate( shippingOption.Rate, cart, out _); var rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); var rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } //find a selected (previously) shipping method var selectedShippingOption = _genericAttributeService.GetAttribute <ShippingOption>(_workContext.CurrentCustomer, NopCustomerDefaults.SelectedShippingOptionAttribute, _storeContext.CurrentStore.Id); CheckoutShippingMethodModel.ShippingMethodModel shippingOptionToSelect; if (selectedShippingOption != null) { shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !string.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption.Name, StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(so.ShippingRateComputationMethodSystemName) && so.ShippingRateComputationMethodSystemName.Equals(selectedShippingOption.ShippingRateComputationMethodSystemName, StringComparison.InvariantCultureIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //if no option has been selected, let's do it for the first one if (model.ShippingMethods.FirstOrDefault(so => so.Selected) != null) { return(model); } shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } else { foreach (var error in getShippingOptionResponse.Errors) { model.Warnings.Add(error); } } return(model); }
public async Task <IActionResult> ShippingMethod() { var storeId = Services.StoreContext.CurrentStore.Id; var customer = Services.WorkContext.CurrentCustomer; var cart = await _shoppingCartService.GetCartItemsAsync(storeId : storeId); if (cart.Count == 0) { return(RedirectToRoute("ShoppingCart")); } if (customer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed) { return(new UnauthorizedResult()); } if (!cart.IsShippingRequired()) { customer.GenericAttributes.SelectedShippingOption = null; await customer.GenericAttributes.SaveChangesAsync(); return(RedirectToAction(nameof(PaymentMethod))); } // TODO: (ms) (core) Wait with implementation until any provider for shipping rate computation has been implemented. //var response = _shippingService.GetShippingOptions(cart, customer.ShippingAddress, storeId: storeId); //var options = response.ShippingOptions; //var state = HttpContext.GetCheckoutState(); //if (state.CustomProperties.ContainsKey("HasOnlyOneActiveShippingMethod")) //{ // state.CustomProperties["HasOnlyOneActiveShippingMethod"] = options.Count == 1; //} //else //{ // state.CustomProperties.Add("HasOnlyOneActiveShippingMethod", options.Count == 1); //} //if (options.Count <= 1 && _shippingSettings.SkipShippingIfSingleOption && response.Success) //{ // customer.GenericAttributes.SelectedShippingOption = options.FirstOrDefault(); // await customer.GenericAttributes.SaveChangesAsync(); // var referrer = Services.WebHelper.GetUrlReferrer(); // if (referrer.EndsWith("/PaymentMethod") || referrer.EndsWith("/Confirm")) // { // return RedirectToAction(nameof(ShippingAddress)); // } // return RedirectToAction(nameof(PaymentMethod)); //} var model = new CheckoutShippingMethodModel(); await cart.AsEnumerable().MapAsync(model); // TODO: (ms) (core) Remove dummy shipping method model. // This creates a dummy ShippingMethodModel. It is needed as long as no other shipping method is implemented. var methodModel = new CheckoutShippingMethodModel.ShippingMethodModel { ShippingMethodId = 100, ShippingRateComputationMethodSystemName = "TestDummy", Name = "Test", BrandUrl = "test.de", Description = "Dies ist eine dummy shipping method", Fee = new(5, Services.StoreContext.CurrentStore.PrimaryStoreCurrency), Selected = true }; model.ShippingMethods.Add(methodModel); return(View(model)); }
/// <summary> /// Prepare shipping method model /// </summary> /// <param name="cart">Cart</param> /// <param name="shippingAddress">Shipping address</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the shipping method model /// </returns> public virtual async Task <CheckoutShippingMethodModel> PrepareShippingMethodModelAsync(IList <ShoppingCartItem> cart, Address shippingAddress) { var model = new CheckoutShippingMethodModel { DisplayPickupInStore = _orderSettings.DisplayPickupInStoreOnShippingMethodPage }; if (_orderSettings.DisplayPickupInStoreOnShippingMethodPage) { model.PickupPointsModel = await PrepareCheckoutPickupPointsModelAsync(cart); } var getShippingOptionResponse = await _shippingService.GetShippingOptionsAsync(cart, shippingAddress, await _workContext.GetCurrentCustomerAsync(), storeId : (await _storeContext.GetCurrentStoreAsync()).Id); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). await _genericAttributeService.SaveAttributeAsync(await _workContext.GetCurrentCustomerAsync(), NopCustomerDefaults.OfferedShippingOptionsAttribute, getShippingOptionResponse.ShippingOptions, (await _storeContext.GetCurrentStoreAsync()).Id); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, ShippingOption = shippingOption, }; //adjust rate var(shippingTotal, _) = await _orderTotalCalculationService.AdjustShippingRateAsync(shippingOption.Rate, cart, shippingOption.IsPickupInStore); var(rateBase, _) = await _taxService.GetShippingPriceAsync(shippingTotal, await _workContext.GetCurrentCustomerAsync()); var rate = await _currencyService.ConvertFromPrimaryStoreCurrencyAsync(rateBase, await _workContext.GetWorkingCurrencyAsync()); soModel.Fee = await _priceFormatter.FormatShippingPriceAsync(rate, true); model.ShippingMethods.Add(soModel); } //find a selected (previously) shipping method var selectedShippingOption = await _genericAttributeService.GetAttributeAsync <ShippingOption>(await _workContext.GetCurrentCustomerAsync(), NopCustomerDefaults.SelectedShippingOptionAttribute, (await _storeContext.GetCurrentStoreAsync()).Id); if (selectedShippingOption != null) { var shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !string.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption.Name, StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(so.ShippingRateComputationMethodSystemName) && so.ShippingRateComputationMethodSystemName.Equals(selectedShippingOption.ShippingRateComputationMethodSystemName, StringComparison.InvariantCultureIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //if no option has been selected, let's do it for the first one if (model.ShippingMethods.FirstOrDefault(so => so.Selected) == null) { var shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //notify about shipping from multiple locations if (_shippingSettings.NotifyCustomerAboutShippingFromMultipleLocations) { model.NotifyCustomerAboutShippingFromMultipleLocations = getShippingOptionResponse.ShippingFromMultipleLocations; } } else { foreach (var error in getShippingOptionResponse.Errors) { model.Warnings.Add(error); } } return(model); }
/// <summary> /// Prepare shipping method model /// </summary> /// <param name="cart">Cart</param> /// <param name="shippingAddress">Shipping address</param> /// <returns>Shipping method model</returns> public virtual CheckoutShippingMethodModel PrepareShippingMethodModel(IList <ShoppingCartItem> cart, Address shippingAddress) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, shippingAddress, _workContext.CurrentCustomer, storeId: _storeContext.CurrentStore.Id); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, NopCustomerDefaults.OfferedShippingOptionsAttribute, getShippingOptionResponse.ShippingOptions, _storeContext.CurrentStore.Id); //ADDED FOR FREE SHIPPING var allshippingMethods = _shippingService.GetAllShippingMethods(); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, ShippingOption = shippingOption, }; //adjust rate var shippingTotal = _orderTotalCalculationService.AdjustShippingRate(shippingOption.Rate, cart, out List <DiscountForCaching> _); var rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); //ADDED FOR FREE SHIPPING if (allshippingMethods.Where(s => s.Name == shippingOption.Name).Any()) { var shippingMethod = allshippingMethods.Where(s => s.Name == shippingOption.Name).FirstOrDefault(); bool isFreeShipping = _settingService.GetSettingByKey <bool>(string.Format("ShippingRateComputationMethod.FixedByWeightByTotal.FreeShipping.ShippingMethodId{0}", shippingMethod.Id)); var shipppingMethodRate = _settingService.GetSettingByKey <decimal>(string.Format("ShippingRateComputationMethod.FixedByWeightByTotal.Rate.ShippingMethodId{0}", shippingMethod.Id)); if (!isFreeShipping) { rateBase = shipppingMethodRate; } } var rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } //find a selected (previously) shipping method var selectedShippingOption = _genericAttributeService.GetAttribute <ShippingOption>(_workContext.CurrentCustomer, NopCustomerDefaults.SelectedShippingOptionAttribute, _storeContext.CurrentStore.Id); if (selectedShippingOption != null) { var shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !string.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption.Name, StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(so.ShippingRateComputationMethodSystemName) && so.ShippingRateComputationMethodSystemName.Equals(selectedShippingOption.ShippingRateComputationMethodSystemName, StringComparison.InvariantCultureIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //if no option has been selected, let's do it for the first one if (model.ShippingMethods.FirstOrDefault(so => so.Selected) == null) { var shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //notify about shipping from multiple locations if (_shippingSettings.NotifyCustomerAboutShippingFromMultipleLocations) { model.NotifyCustomerAboutShippingFromMultipleLocations = getShippingOptionResponse.ShippingFromMultipleLocations; } } else { foreach (var error in getShippingOptionResponse.Errors) { model.Warnings.Add(error); } } return(model); }
/// <summary> /// Prepare shipping method model /// </summary> /// <param name="cart">Cart</param> /// <param name="shippingAddress">Shipping address</param> /// <returns>Shipping method model</returns> public virtual CheckoutShippingMethodModel PrepareShippingMethodModel(IList <ShoppingCartItem> cart, Address shippingAddress) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, shippingAddress, _workContext.CurrentCustomer, storeId: _storeContext.CurrentStore.Id); if (getShippingOptionResponse.Success) { //performance optimization. cache returned shipping options. //we'll use them later (after a customer has selected an option). _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.OfferedShippingOptions, getShippingOptionResponse.ShippingOptions, _storeContext.CurrentStore.Id); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, ShippingOption = shippingOption, }; //adjust rate var shippingTotal = _orderTotalCalculationService.AdjustShippingRate(shippingOption.Rate, cart, out List <DiscountForCaching> _); var rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); var rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } //find a selected (previously) shipping method var selectedShippingOption = _workContext.CurrentCustomer.GetAttribute <ShippingOption>( SystemCustomerAttributeNames.SelectedShippingOption, _storeContext.CurrentStore.Id); if (selectedShippingOption != null) { var shippingOptionToSelect = model.ShippingMethods.ToList() .Find(so => !string.IsNullOrEmpty(so.Name) && so.Name.Equals(selectedShippingOption.Name, StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(so.ShippingRateComputationMethodSystemName) && so.ShippingRateComputationMethodSystemName.Equals(selectedShippingOption.ShippingRateComputationMethodSystemName, StringComparison.InvariantCultureIgnoreCase)); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //if no option has been selected, let's do it for the first one if (model.ShippingMethods.FirstOrDefault(so => so.Selected) == null) { var shippingOptionToSelect = model.ShippingMethods.FirstOrDefault(); if (shippingOptionToSelect != null) { shippingOptionToSelect.Selected = true; } } //notify about shipping from multiple locations if (_shippingSettings.NotifyCustomerAboutShippingFromMultipleLocations) { model.NotifyCustomerAboutShippingFromMultipleLocations = getShippingOptionResponse.ShippingFromMultipleLocations; } } else { foreach (var error in getShippingOptionResponse.Errors) { model.Warnings.Add(error); } } var lowesRate = 0M; var LowesName = string.Empty; var onlyIfTwo = 0; var sModel = new Nop.Web.Models.Checkout.CheckoutShippingMethodModel.ShippingMethodModel(); foreach (var lowes in model.ShippingMethods.Where(x => x.Name.ToLower().Contains("ground"))) { var price = Convert.ToDecimal(lowes.Fee.Replace(",", "").Replace("$", "")); if (lowes.Name.ToLower().Contains("ground")) { if (price > 0) { if (lowesRate <= price) { sModel = lowes; LowesName = lowes.Name; lowesRate = price; onlyIfTwo++; } } } } if (onlyIfTwo > 1) { model.ShippingMethods.Remove(sModel); } return(model); }