Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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;
        }