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); } } } } } }