private static IFilter GetPriceRangeFilterRecursive(int pricelistNumber, string commonFieldName, IList <string> pricelists, string lower, string upper, bool includeLower, bool includeUpper) { IFilter result = null; if (pricelists.IsNullOrEmpty()) { result = CreateRangeFilter(commonFieldName, lower, upper, includeLower, includeUpper); } else if (pricelistNumber < pricelists.Count) { // Create negative query for previous pricelist IFilter previousPricelistQuery = null; if (pricelistNumber > 0) { var previousFieldName = StringsHelper.JoinNonEmptyStrings("_", commonFieldName, pricelists[pricelistNumber - 1]).ToLowerInvariant(); previousPricelistQuery = CreateRangeFilter(previousFieldName, "0", null, false, false); } // Create positive query for current pricelist var currentFieldName = StringsHelper.JoinNonEmptyStrings("_", commonFieldName, pricelists[pricelistNumber]).ToLowerInvariant(); var currentPricelistQuery = CreateRangeFilter(currentFieldName, lower, upper, includeLower, includeUpper); // Get query for next pricelist var nextPricelistQuery = GetPriceRangeFilterRecursive(pricelistNumber + 1, commonFieldName, pricelists, lower, upper, includeLower, includeUpper); result = previousPricelistQuery.Not().And(currentPricelistQuery.Or(nextPricelistQuery)); } return(result); }
public static IFilter CreatePriceRangeFilter(string currency, IList <string> pricelists, string lower, string upper, bool includeLower, bool includeUpper) { var commonFieldName = StringsHelper.JoinNonEmptyStrings("_", "price", currency).ToLowerInvariant(); var result = GetPriceRangeFilterRecursive(0, commonFieldName, pricelists, lower, upper, includeLower, includeUpper); return(result); }
public static IList <string> GetOutlines(this CatalogSearchCriteriaBase criteria) { var result = criteria .GetRawOutlines() .Select(outline => StringsHelper.JoinNonEmptyStrings("/", criteria.CatalogId, outline).ToLowerInvariant()) .Distinct(StringComparer.OrdinalIgnoreCase) .ToArray(); return(result); }
public static IList <string> GetPriorityFields(this CatalogSearchCriteriaBase criteria) { var allNames = criteria .GetRawOutlines() .Select(outline => StringsHelper.JoinNonEmptyStrings("_", "priority", criteria.CatalogId, outline.Split('/').LastOrDefault()).ToLowerInvariant()) .ToList(); allNames.Add("priority"); var result = allNames.Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); return(result); }