public bool OrdersRequestShippingMethodByUniqueKey(string rateUniqueKey, Order o) { bool result = false; Utilities.SortableCollection <Shipping.ShippingRateDisplay> rates = FindAvailableShippingRates(o); foreach (Shipping.ShippingRateDisplay r in rates) { if (r.UniqueKey == rateUniqueKey) { return(OrdersRequestShippingMethod(r, o)); } } return(result); }
public Shipping.ShippingRateDisplay OrdersFindShippingRateByUniqueKey(string key, Order o) { Utilities.SortableCollection <Shipping.ShippingRateDisplay> rates = FindAvailableShippingRates(o); if (rates == null) { return(null); } if (rates.Count < 1) { return(null); } foreach (Shipping.ShippingRateDisplay r in rates) { if (r.UniqueKey == key) { return(r); } } return(null); }
public Utilities.SortableCollection <Shipping.ShippingRateDisplay> FindAvailableShippingRates(Order o) { Utilities.SortableCollection <Shipping.ShippingRateDisplay> result = new Utilities.SortableCollection <Shipping.ShippingRateDisplay>(); // Get all the methods that apply to this shipping address and store List <Zone> zones = ShippingZones.FindAllZonesForAddress(o.ShippingAddress, o.StoreId); List <ShippingMethod> methods = new List <ShippingMethod>(); methods = this.ShippingMethods.FindForZones(zones); // Get Rates for each Method foreach (Shipping.ShippingMethod m in methods) { Collection <Shipping.ShippingRateDisplay> tempRates = m.GetRates(o); if (tempRates != null) { for (int i = 0; i <= tempRates.Count - 1; i++) { ShippingRateDisplay fRate = tempRates[i].GetCopy(); //fRate.AdjustRate(m.AdjustmentType, m.Adjustment); result.Add(fRate); } } } // Tally up extra ship fees decimal totalExtraFees = 0m; foreach (LineItem li in o.Items) { if (li.ExtraShipCharge > 0) { totalExtraFees += li.ExtraShipCharge; } } // update results with extra ship fees and handling foreach (Shipping.ShippingRateDisplay displayRate in result) { displayRate.Rate += totalExtraFees + o.TotalHandling; } // Apply promotions to rates here: // Run workflow to get shipping rate discounts //BusinessRules.ShippingTaskContext c = new BusinessRules.ShippingTaskContext(); //c.Rates = result; //c.UserId = this.UserID; //c.Order = this; //BusinessRules.Workflow.RunByName(c, BusinessRules.WorkflowNames.ApplyShippingDiscounts); // Sort Rates result.Sort("Rate", Utilities.SortDirection.Ascending); if (result.Count < 1) { if (o.IsOrderFreeShipping()) { result.Add(new Shipping.ShippingRateDisplay("Free Shipping.", "", "", 0m, "FREESHIPPING")); } else { string value = Content.SiteTerms.GetTerm(Content.SiteTermIds.ShippingUnknown); if (!string.IsNullOrEmpty(value)) { result.Add(new Shipping.ShippingRateDisplay(value, "", "", 0m, "UNKNOWN")); } else { result.Add(new Shipping.ShippingRateDisplay("To Be Determined. Contact Store for Details", "", "", 0m, "TOBEDETERMINED")); } } } return(result); }
public Utilities.SortableCollection<Shipping.ShippingRateDisplay> FindAvailableShippingRates(Order o, Accounts.Store currentStore) { Utilities.SortableCollection<Shipping.ShippingRateDisplay> result = new Utilities.SortableCollection<Shipping.ShippingRateDisplay>(); // Get all the methods that apply to this shipping address and store List<Zone> zones = ShippingZones.FindAllZonesForAddress(o.ShippingAddress, o.StoreId); List<ShippingMethod> methods = new List<ShippingMethod>(); methods = this.ShippingMethods.FindForZones(zones); // Get Rates for each Method foreach (Shipping.ShippingMethod m in methods) { Collection<Shipping.ShippingRateDisplay> tempRates = m.GetRates(o, currentStore); if (tempRates != null) { for (int i = 0; i <= tempRates.Count - 1; i++) { ShippingRateDisplay fRate = tempRates[i].GetCopy(); //fRate.AdjustRate(m.AdjustmentType, m.Adjustment); result.Add(fRate); } } } // Tally up extra ship fees decimal totalExtraFees = 0m; foreach (LineItem li in o.Items) { if (li.ExtraShipCharge > 0) { totalExtraFees += li.ExtraShipCharge; } } // update results with extra ship fees and handling foreach (Shipping.ShippingRateDisplay displayRate in result) { displayRate.Rate += totalExtraFees + o.TotalHandling; } // Apply promotions to rates here: // Run workflow to get shipping rate discounts //BusinessRules.ShippingTaskContext c = new BusinessRules.ShippingTaskContext(); //c.Rates = result; //c.UserId = this.UserID; //c.Order = this; //BusinessRules.Workflow.RunByName(c, BusinessRules.WorkflowNames.ApplyShippingDiscounts); // Sort Rates result.Sort("Rate", Utilities.SortDirection.Ascending); if (result.Count < 1) { if (o.IsOrderFreeShipping()) { result.Add(new Shipping.ShippingRateDisplay("Free Shipping.", "", "", 0m, "FREESHIPPING")); } else { string value = Content.SiteTerms.GetTerm(Content.SiteTermIds.ShippingUnknown); if (!string.IsNullOrEmpty(value)) { result.Add(new Shipping.ShippingRateDisplay(value, "", "", 0m, "UNKNOWN")); } else { result.Add(new Shipping.ShippingRateDisplay("To Be Determined. Contact Store for Details", "", "", 0m, "TOBEDETERMINED")); } } } return result; }