Beispiel #1
0
        public async Task <ListPageWithFacets <HSMeProduct> > List(ListArgs <HSMeProduct> args, DecodedToken decodedToken)
        {
            var searchText   = args.Search ?? "";
            var searchFields = args.Search != null ? "ID,Name,Description,xp.Facets.supplier" : "";
            var sortBy       = args.SortBy.FirstOrDefault();
            var filters      = string.IsNullOrEmpty(args.ToFilterString()) ? null : args.ToFilterString();
            var meProducts   = await _oc.Me.ListProductsAsync <HSMeProduct>(filters : filters, page : args.Page, search : searchText, searchOn : searchFields, searchType : SearchType.ExactPhrasePrefix, sortBy : sortBy, sellerID : _settings.OrderCloudSettings.MarketplaceID, accessToken : decodedToken.AccessToken);

            if (!(bool)(meProducts?.Items?.Any()))
            {
                meProducts = await _oc.Me.ListProductsAsync <HSMeProduct>(filters : filters, page : args.Page, search : searchText, searchOn : searchFields, searchType : SearchType.AnyTerm, sortBy : sortBy, sellerID : _settings.OrderCloudSettings.MarketplaceID, accessToken : decodedToken.AccessToken);

                if (!(bool)(meProducts?.Items?.Any()))
                {
                    //if no products after retry search, avoid making extra calls for pricing details
                    return(meProducts);
                }
            }

            var defaultMarkupMultiplierRequest = GetDefaultMarkupMultiplier(decodedToken);
            var exchangeRatesRequest           = GetExchangeRatesForUser(decodedToken.AccessToken);
            await Task.WhenAll(defaultMarkupMultiplierRequest, exchangeRatesRequest);

            var defaultMarkupMultiplier = await defaultMarkupMultiplierRequest;
            var exchangeRates           = await exchangeRatesRequest;

            meProducts.Items = meProducts.Items.Select(product => ApplyBuyerProductPricing(product, defaultMarkupMultiplier, exchangeRates)).ToList();

            return(meProducts);
        }
        public async Task <ListPage <SuperHSProduct> > List(ListArgs <HSProduct> args, string token)
        {
            var _productsList = await _oc.Products.ListAsync <HSProduct>(
                filters : args.ToFilterString(),
                search : args.Search,
                searchType : SearchType.ExactPhrasePrefix,
                sortBy : args.SortBy.FirstOrDefault(),
                pageSize : args.PageSize,
                page : args.Page,
                accessToken : token);

            var _superProductsList = new List <SuperHSProduct> {
            };
            await Throttler.RunAsync(_productsList.Items, 100, 10, async product =>
            {
                var priceSchedule = _oc.PriceSchedules.GetAsync(product.DefaultPriceScheduleID, token);
                var _specs        = _oc.Products.ListSpecsAsync(product.ID, null, null, null, 1, 100, null, token);
                var _variants     = _oc.Products.ListVariantsAsync <HSVariant>(product.ID, null, null, null, 1, 100, null, token);
                _superProductsList.Add(new SuperHSProduct
                {
                    Product       = product,
                    PriceSchedule = await priceSchedule,
                    Specs         = (await _specs).Items,
                    Variants      = (await _variants).Items,
                });
            });

            return(new ListPage <SuperHSProduct>
            {
                Meta = _productsList.Meta,
                Items = _superProductsList
            });
        }
Beispiel #3
0
        public async Task <ListPage <HSOrder> > ListOrdersForLocation(string locationID, ListArgs <HSOrder> listArgs, DecodedToken decodedToken)
        {
            listArgs.Filters.Add(new ListFilter("BillingAddress.ID", locationID));
            await EnsureUserCanAccessLocationOrders(locationID, decodedToken);

            return(await _oc.Orders.ListAsync <HSOrder>(OrderDirection.Incoming,
                                                        page : listArgs.Page,
                                                        pageSize : listArgs.PageSize,
                                                        search : listArgs.Search,
                                                        sortBy : listArgs.SortBy.FirstOrDefault(),
                                                        filters : listArgs.ToFilterString()));
        }
Beispiel #4
0
        public async Task <ListPage <HSOrder> > ListOrdersForLocation(string locationID, ListArgs <HSOrder> listArgs, VerifiedUserContext verifiedUser)
        {
            listArgs.Filters.Add(new ListFilter()
            {
                PropertyName = "BillingAddress.ID", FilterExpression = locationID
            });
            await EnsureUserCanAccessLocationOrders(locationID, verifiedUser);

            return(await _oc.Orders.ListAsync <HSOrder>(OrderDirection.Incoming,
                                                        page : listArgs.Page,
                                                        pageSize : listArgs.PageSize,
                                                        search : listArgs.Search,
                                                        sortBy : listArgs.SortBy.FirstOrDefault(),
                                                        filters : listArgs.ToFilterString()));
        }
        public void model_binder_filter_string_match(string expression, List <Tuple <string, string> > args)
        {
            var query = new ListArgs <Product>()
            {
                Filters = new List <ListFilter>()
                {
                    new ListFilter()
                    {
                        QueryParams = args
                    }
                }
            };

            Assert.IsTrue(expression == query.ToFilterString());
        }
Beispiel #6
0
        public async Task <ListPage <HSCatalog> > List(string buyerID, ListArgs <HSCatalog> args, VerifiedUserContext user)
        {
            var queryParamsForCatalogUserGroup = new Tuple <string, string>("xp.Type", "Catalog");

            args.Filters.Add(new ListFilter()
            {
                QueryParams = new List <Tuple <string, string> > {
                    queryParamsForCatalogUserGroup
                }
            });
            return(await _oc.UserGroups.ListAsync <HSCatalog>(buyerID, filters : args.ToFilterString(),
                                                              search : args.Search,
                                                              pageSize : args.PageSize,
                                                              page : args.Page,
                                                              accessToken : user.AccessToken));
        }
Beispiel #7
0
 public async Task<ListPage<HSOrder>> ListOrdersForLocation(string locationID, ListArgs<HSOrder> listArgs, VerifiedUserContext verifiedUser)
 {
     await EnsureUserCanAccessLocationOrders(locationID, verifiedUser);
     if(listArgs.Filters == null)
     {
         listArgs.Filters = new List<ListFilter>() { };
     }
     listArgs.Filters.Add(new ListFilter()
     {
         QueryParams = new List<Tuple<string, string>>() { new Tuple<string, string>("BillingAddress.ID", locationID) }
     });
     return await _oc.Orders.ListAsync<HSOrder>(OrderDirection.Incoming,
         page: listArgs.Page,
         pageSize: listArgs.PageSize,
         search: listArgs.Search,
         sortBy: listArgs.SortBy.FirstOrDefault(),
         filters: listArgs.ToFilterString());
 }
Beispiel #8
0
        protected async Task <ListPage <T> > ListAsync <T>(ListArgs <T> args, string token, params string[] pathSegments)
        {
            var queryParams = new Dictionary <string, string>()
            {
                { "search", args.Search },
                { "page", args.Page.ToString() },
                { "pageSize", args.PageSize.ToString() }
            };

            if (args.SortBy.Any())
            {
                queryParams.Add("sortBy", string.Join(",", args.SortBy));
            }

            return(await BuildRequest(token, pathSegments)
                   .SetQueryParams(queryParams)
                   .SetQueryParams(args.ToFilterString())
                   .GetJsonAsync <ListPage <T> >());
        }
        public async Task <ListPageWithFacets <HSMeProduct> > List(ListArgs <HSMeProduct> args, VerifiedUserContext user)
        {
            var searchText   = args.Search ?? "";
            var searchFields = args.Search != null ? "ID,Name,Description,xp.Facets.supplier" : "";
            var sortBy       = args.SortBy.FirstOrDefault();
            var meProducts   = await _oc.Me.ListProductsAsync <HSMeProduct>(filters : args.ToFilterString(), page : args.Page, search : searchText, searchOn : searchFields, searchType : SearchType.ExactPhrasePrefix, sortBy : sortBy, accessToken : user.AccessToken);

            if (!(bool)(meProducts?.Items?.Any()))
            {
                meProducts = await _oc.Me.ListProductsAsync <HSMeProduct>(filters : args.ToFilterString(), page : args.Page, search : searchText, searchOn : searchFields, searchType : SearchType.AnyTerm, sortBy : sortBy, accessToken : user.AccessToken);

                if (!(bool)(meProducts?.Items?.Any()))
                {
                    //if no products after retry search, avoid making extra calls for pricing details
                    return(meProducts);
                }
            }

            var defaultMarkupMultiplier = await GetDefaultMarkupMultiplier(user);

            meProducts.Items = meProducts.Items.Select(product => ApplyBuyerProductPricing(product, defaultMarkupMultiplier)).ToList();

            return(meProducts);
        }