private void BuildPrices(FindDocument document, CatalogEntryDto.CatalogEntryRow entryRow, ISearchConfiguration configuration) { IPriceService instance = ServiceLocator.Current.GetInstance <IPriceService>(); CatalogKey catalogKey = new CatalogKey(entryRow); HashSet <Mediachase.Commerce.Currency> source1 = new HashSet <Mediachase.Commerce.Currency>(); HashSet <MarketId> source2 = new HashSet <MarketId>(); IFieldConfiguration <double?> field = null; foreach (IPriceValue catalogEntryPrice in instance.GetCatalogEntryPrices(catalogKey)) { HashSet <Mediachase.Commerce.Currency> currencySet = source1; Money unitPrice = catalogEntryPrice.UnitPrice; Mediachase.Commerce.Currency currency1 = unitPrice.Currency; if (currencySet.Add(currency1)) { ISearchConfiguration searchConfiguration = configuration; unitPrice = catalogEntryPrice.UnitPrice; Mediachase.Commerce.Currency currency2 = unitPrice.Currency; searchConfiguration.AddCurrency(currency2); } if (source2.Add(catalogEntryPrice.MarketId)) { configuration.AddMarket(catalogEntryPrice.MarketId); } ISearchConfiguration searchConfiguration1 = configuration; string name = "saleprice"; unitPrice = catalogEntryPrice.UnitPrice; Mediachase.Commerce.Currency currencyCode = (Mediachase.Commerce.Currency)unitPrice.Currency.CurrencyCode; MarketId marketId = (MarketId)catalogEntryPrice.MarketId.Value; ref IFieldConfiguration <double?> local = ref field; if (searchConfiguration1.TryGetPriceField(name, currencyCode, marketId, out local)) { unitPrice = catalogEntryPrice.UnitPrice; double amount = (double)unitPrice.Amount; double?nullable = field.GetValue(document); if (!nullable.HasValue || nullable.Value > amount) { field.SetValue(document, new double?(amount)); } } }
/// <summary> /// Adds a single active filter from an ISearchCriteria object to an existing search. /// </summary> public static ITypeSearch <FindDocument> AddActiveFilter(this ITypeSearch <FindDocument> search, string fieldName, ISearchFilterValue filterValue, string locale, MarketId marketId) { ISearchConfiguration configuration = search.Client.GetConfiguration(); SimpleValue simpleValue; if ((simpleValue = filterValue as SimpleValue) != null) { IFieldConfiguration field; if (configuration.TryGetField(fieldName, locale, out field)) { Expression <Func <FindDocument, Filter> > matchFilter = UntypedFilterBuilder.GetMatchFilter(field, simpleValue.value); search = search.Filter <FindDocument>(matchFilter); } } else { RangeValue rangeValue; if ((rangeValue = filterValue as RangeValue) != null) { IFieldConfiguration field; if (configuration.TryGetField(fieldName, locale, out field)) { search = search.FilterFieldRange(field, rangeValue.lowerbound, rangeValue.upperbound, rangeValue.lowerboundincluded, rangeValue.upperboundincluded); } } else { PriceRangeValue priceRangeValue; if ((priceRangeValue = filterValue as PriceRangeValue) == null) { throw new NotSupportedException(string.Format("Unrecognized search filter value type {0}.", (object)filterValue.GetType().Name)); } IFieldConfiguration <double?> field; if (configuration.TryGetPriceField(fieldName, new Mediachase.Commerce.Currency(priceRangeValue.currency.ToUpperInvariant()), marketId, out field)) { search = search.FilterFieldRange((IFieldConfiguration)field, priceRangeValue.lowerbound, priceRangeValue.upperbound, priceRangeValue.lowerboundincluded, priceRangeValue.upperboundincluded); } } } return(search); }