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