private CheckoutShippingMethodModel PrepareShippingMethodModel(IList<ShoppingCartItem> cart) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, _workContext.CurrentCustomer.ShippingAddress); if (getShippingOptionResponse.Success) { foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel() { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, }; //calculate discounted and taxed rate Discount appliedDiscount = null; decimal shippingTotalWithoutDiscount = shippingOption.Rate; decimal discountAmount = _orderTotalCalculationService.GetShippingDiscount(_workContext.CurrentCustomer, shippingTotalWithoutDiscount, out appliedDiscount); decimal shippingTotalWithDiscount = shippingTotalWithoutDiscount - discountAmount; if (shippingTotalWithDiscount < decimal.Zero) shippingTotalWithDiscount = decimal.Zero; shippingTotalWithDiscount = Math.Round(shippingTotalWithDiscount, 2); decimal rateBase = _taxService.GetShippingPrice(shippingTotalWithDiscount, _workContext.CurrentCustomer); decimal rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } } else foreach (var error in getShippingOptionResponse.Errors) model.Warnings.Add(error); return model; }
protected CheckoutShippingMethodModel PrepareShippingMethodModel(IList<ShoppingCartItem> cart) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, _workContext.CurrentCustomer.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, 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, }; //adjust rate Discount appliedDiscount = null; var shippingTotal = _orderTotalCalculationService.AdjustShippingRate( shippingOption.Rate, cart, out appliedDiscount); decimal rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); decimal 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; } } else foreach (var error in getShippingOptionResponse.Errors) model.Warnings.Add(error); return model; }
protected CheckoutShippingMethodModel PrepareShippingMethodModel(IList<ShoppingCartItem> cart) { var model = new CheckoutShippingMethodModel(); var getShippingOptionResponse = _shippingService.GetShippingOptions(cart, _workContext.CurrentCustomer.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, SystemCustomerAttributeNames.OfferedShippingOptions, getShippingOptionResponse.ShippingOptions); foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new CheckoutShippingMethodModel.ShippingMethodModel() { Name = shippingOption.Name, Description = shippingOption.Description, ShippingRateComputationMethodSystemName = shippingOption.ShippingRateComputationMethodSystemName, }; //adjust rate Discount appliedDiscount = null; var shippingTotal = _orderTotalCalculationService.AdjustShippingRate( shippingOption.Rate, cart, out appliedDiscount); decimal rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); decimal rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Fee = _priceFormatter.FormatShippingPrice(rate, true); model.ShippingMethods.Add(soModel); } } else foreach (var error in getShippingOptionResponse.Errors) model.Warnings.Add(error); return model; }