/// <summary> /// Gets fixed shipping rate (if shipping rate computation method allows it and the rate can be calculated before checkout). /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Fixed shipping rate; or null in case there's no fixed shipping rate</returns> public decimal? GetFixedRate(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); return GetRate(); }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Represents a response of getting shipping rate options</returns> public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); var response = new GetShippingOptionResponse(); if (getShippingOptionRequest.Items == null || getShippingOptionRequest.Items.Count == 0) { response.AddError("No shipment items"); return response; } int? restrictByCountryId = (getShippingOptionRequest.ShippingAddress != null && getShippingOptionRequest.ShippingAddress.Country != null) ? (int?)getShippingOptionRequest.ShippingAddress.Country.Id : null; var shippingMethods = this._shippingService.GetAllShippingMethods(restrictByCountryId); foreach (var shippingMethod in shippingMethods) { var shippingOption = new ShippingOption(); shippingOption.Name = shippingMethod.GetLocalized(x => x.Name); shippingOption.Description = shippingMethod.GetLocalized(x => x.Description); shippingOption.Rate = GetRate(shippingMethod.Id); response.ShippingOptions.Add(shippingOption); } return response; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Represents a response of getting shipping rate options</returns> public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); var response = new GetShippingOptionResponse(); response.ShippingOptions.Add(new ShippingOption() { Name = "Shipping option 1", Description = "", Rate = GetRate() }); response.ShippingOptions.Add(new ShippingOption() { Name = "Shipping option 2", Description = "", Rate = GetRate() }); return response; }
/// <summary> /// Gets fixed shipping rate (if shipping rate computation method allows it and the rate can be calculated before checkout). /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Fixed shipping rate; or null in case there's no fixed shipping rate</returns> public decimal? GetFixedRate(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); int? restrictByCountryId = (getShippingOptionRequest.ShippingAddress != null && getShippingOptionRequest.ShippingAddress.Country != null) ? (int?)getShippingOptionRequest.ShippingAddress.Country.Id : null; var shippingMethods = this._shippingService.GetAllShippingMethods(restrictByCountryId); var rates = new List<decimal>(); foreach (var shippingMethod in shippingMethods) { decimal rate = GetRate(shippingMethod.Id); if (!rates.Contains(rate)) rates.Add(rate); } //return default rate if all of them equal if (rates.Count == 1) return rates[0]; return null; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Represents a response of getting shipping rate options</returns> public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); var response = new GetShippingOptionResponse(); if (getShippingOptionRequest.Items == null || getShippingOptionRequest.Items.Count == 0) { response.AddError("No shipment items"); return response; } int storeId = _storeContext.CurrentStore.Id; decimal subTotal = decimal.Zero; int countryId = 0; if (getShippingOptionRequest.ShippingAddress != null) { countryId = getShippingOptionRequest.ShippingAddress.CountryId ?? 0; } foreach (var shoppingCartItem in getShippingOptionRequest.Items) { if (shoppingCartItem.Item.IsFreeShipping || !shoppingCartItem.Item.IsShipEnabled) continue; subTotal += _priceCalculationService.GetSubTotal(shoppingCartItem, true); } decimal weight = _shippingService.GetShoppingCartTotalWeight(getShippingOptionRequest.Items); var shippingMethods = _shippingService.GetAllShippingMethods(countryId); foreach (var shippingMethod in shippingMethods) { var record = _shippingByWeightService.FindRecord(shippingMethod.Id, storeId, countryId, weight); decimal? rate = GetRate(subTotal, weight, shippingMethod.Id, storeId, countryId); if (rate.HasValue) { var shippingOption = new ShippingOption(); shippingOption.Name = shippingMethod.GetLocalized(x => x.Name); if (record != null && record.SmallQuantityThreshold > subTotal) { shippingOption.Description = shippingMethod.GetLocalized(x => x.Description) + _localizationService.GetResource("Plugin.Shipping.ByWeight.SmallQuantitySurchargeNotReached").FormatWith( _priceFormatter.FormatPrice(record.SmallQuantitySurcharge), _priceFormatter.FormatPrice(record.SmallQuantityThreshold)); shippingOption.Rate = rate.Value + record.SmallQuantitySurcharge; } else { shippingOption.Description = shippingMethod.GetLocalized(x => x.Description); shippingOption.Rate = rate.Value; } response.ShippingOptions.Add(shippingOption); } } return response; }
/// <summary> /// Gets fixed shipping rate (if shipping rate computation method allows it and the rate can be calculated before checkout). /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Fixed shipping rate; or null in case there's no fixed shipping rate</returns> public decimal? GetFixedRate(GetShippingOptionRequest getShippingOptionRequest) { return null; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Represents a response of getting shipping rate options</returns> public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) { throw new ArgumentNullException("getShippingOptionRequest"); } var response = new GetShippingOptionResponse(); if (getShippingOptionRequest.Items == null || getShippingOptionRequest.Items.Count == 0) { response.AddError("No shipment items"); return response; } if (getShippingOptionRequest.ShippingAddress == null) { response.AddError("Shipping address is not set"); return response; } var storeId = _storeContext.CurrentStore.Id; int countryId = getShippingOptionRequest.ShippingAddress.CountryId.HasValue ? getShippingOptionRequest.ShippingAddress.CountryId.Value : 0; int stateProvinceId = getShippingOptionRequest.ShippingAddress.StateProvinceId.HasValue ? getShippingOptionRequest.ShippingAddress.StateProvinceId.Value : 0; string zip = getShippingOptionRequest.ShippingAddress.ZipPostalCode; decimal subTotal = decimal.Zero; foreach (var shoppingCartItem in getShippingOptionRequest.Items) { if (shoppingCartItem.Item.IsFreeShipping || !shoppingCartItem.Item.IsShipEnabled) { continue; } subTotal += _priceCalculationService.GetSubTotal(shoppingCartItem, true); } decimal sqThreshold = _shippingByTotalSettings.SmallQuantityThreshold; decimal sqSurcharge = _shippingByTotalSettings.SmallQuantitySurcharge; var shippingMethods = _shippingService.GetAllShippingMethods(countryId); foreach (var shippingMethod in shippingMethods) { decimal? rate = GetRate(subTotal, shippingMethod.Id, storeId, countryId, stateProvinceId, zip); if (rate.HasValue) { if (rate > 0 && sqThreshold > 0 && subTotal <= sqThreshold) { // add small quantity surcharge (Mindermengenzuschalg) rate += sqSurcharge; } var shippingOption = new ShippingOption(); shippingOption.Name = shippingMethod.Name; shippingOption.Description = shippingMethod.Description; shippingOption.Rate = rate.Value; response.ShippingOptions.Add(shippingOption); } } return response; }
/// <summary> /// Create shipment package from shopping cart /// </summary> /// <param name="cart">Shopping cart</param> /// <param name="shippingAddress">Shipping address</param> /// <returns>Shipment package</returns> public virtual GetShippingOptionRequest CreateShippingOptionRequest(IList<OrganizedShoppingCartItem> cart, Address shippingAddress) { var request = new GetShippingOptionRequest(); request.Customer = cart.GetCustomer(); request.Items = new List<OrganizedShoppingCartItem>(); foreach (var sc in cart) if (sc.Item.IsShipEnabled) request.Items.Add(sc); request.ShippingAddress = shippingAddress; request.CountryFrom = null; request.StateProvinceFrom = null; request.ZipPostalCodeFrom = string.Empty; return request; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Represents a response of getting shipping rate options</returns> public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); var response = new GetShippingOptionResponse(); if (getShippingOptionRequest.Items == null || getShippingOptionRequest.Items.Count == 0) { response.AddError("No shipment items"); return response; } if (getShippingOptionRequest.ShippingAddress == null) { response.AddError("Shipping address is not set"); return response; } var storeId = _storeContext.CurrentStore.Id; int countryId = getShippingOptionRequest.ShippingAddress.CountryId.HasValue ? getShippingOptionRequest.ShippingAddress.CountryId.Value : 0; decimal subTotal = decimal.Zero; foreach (var shoppingCartItem in getShippingOptionRequest.Items) { if (shoppingCartItem.Item.IsFreeShipping || !shoppingCartItem.Item.IsShipEnabled) continue; subTotal += _priceCalculationService.GetSubTotal(shoppingCartItem, true); } decimal weight = _shippingService.GetShoppingCartTotalWeight(getShippingOptionRequest.Items); var shippingMethods = _shippingService.GetAllShippingMethods(countryId); foreach (var shippingMethod in shippingMethods) { decimal? rate = GetRate(subTotal, weight, shippingMethod.Id, storeId, countryId); if (rate.HasValue) { var shippingOption = new ShippingOption(); shippingOption.Name = shippingMethod.GetLocalized(x => x.Name); shippingOption.Description = shippingMethod.GetLocalized(x => x.Description); shippingOption.Rate = rate.Value; response.ShippingOptions.Add(shippingOption); } } return response; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="getShippingOptionRequest">A request for getting shipping options</param> /// <returns>Represents a response of getting shipping rate options</returns> public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException("getShippingOptionRequest"); var response = new GetShippingOptionResponse(); if (getShippingOptionRequest.Items == null || getShippingOptionRequest.Items.Count == 0) { response.AddError(T("Admin.System.Warnings.NoShipmentItems")); return response; } var shippingMethods = this._shippingService.GetAllShippingMethods(getShippingOptionRequest); foreach (var shippingMethod in shippingMethods) { var shippingOption = new ShippingOption(); shippingOption.ShippingMethodId = shippingMethod.Id; shippingOption.Name = shippingMethod.GetLocalized(x => x.Name); shippingOption.Description = shippingMethod.GetLocalized(x => x.Description); shippingOption.Rate = GetRate(shippingMethod.Id); response.ShippingOptions.Add(shippingOption); } return response; }