Пример #1
0
        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));
                    }
                }
            }
Пример #2
0
        /// <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);
        }