示例#1
0
        private void FilterRatesByShippingMethods(SortableCollection <ShippingRateDisplay> ratesSort, Order order)
        {
            var shippingProviders = ShippingMethods.FindAll(order.StoreId);

            shippingProviders = shippingProviders.OrderBy(s => s.SortOrder).ToList();
            var subtotal = false;
            var rates    = ratesSort.ToList();

            foreach (var method in shippingProviders)
            {
                var filteredrates = rates.Where(r => r.ShippingMethodId == method.Bvin).ToList();

                foreach (var rate in filteredrates)
                {
                    if (rate != null)
                    {
                        if (method.VisibilityMode == ShippingVisibilityMode.Always)
                        {
                            subtotal = true;
                        }
                        else if (method.VisibilityMode == ShippingVisibilityMode.Never)
                        {
                            ratesSort.Remove(rate);
                        }
                        else if (method.VisibilityMode == ShippingVisibilityMode.NoRates)
                        {
                            if (subtotal)
                            {
                                ratesSort.Remove(rate);
                            }
                            else
                            {
                                subtotal = true;
                            }
                        }
                        else if (method.VisibilityMode == ShippingVisibilityMode.SubtotalAmount)
                        {
                            if (method.VisibilityAmount.HasValue &&
                                order.TotalOrderAfterDiscounts > method.VisibilityAmount.Value)
                            {
                                subtotal = true;
                            }
                            else
                            {
                                ratesSort.Remove(rate);
                            }
                        }
                        else if (method.VisibilityMode == ShippingVisibilityMode.TotalWeight)
                        {
                            if (method.VisibilityAmount.HasValue && order.TotalWeight > method.VisibilityAmount.Value)
                            {
                                subtotal = true;
                            }
                            else
                            {
                                ratesSort.Remove(rate);
                            }
                        }
                    }
                }
            }
        }