public async Task <ProductsSearchResult> GetProductsSearchResult(int storeId, string search, string filters, int top, int skip, bool isAdmin, string categoryApiId) { var fltrs = FilterHelper.ParseFiltersFromString(filters); ProductsSearchResult t = await Task.Run(() => this.GetProductsSearchResult(storeId, search, fltrs, top, skip, isAdmin, categoryApiId)); return(t); }
public async Task <ProductsSearchResult> SearchForProducts(SearchArguments args = null) { var config = _getConfiguration(); string facetsFilter = null; if (args?.FacetValues?.Any() ?? false) { facetsFilter = string.Join(" and ", args?.FacetValues?.Select(GenerateFacetFilterString).ToArray()); } var searchParameters = new SearchParameters { SearchMode = SearchMode.Any, IncludeTotalResultCount = true, HighlightFields = config.HighlightFields?.ToList(), Skip = (int)args?.SkipAmount, Facets = config.ProductFacets?.Select(GenerateFacetString).ToList(), Filter = facetsFilter, Top = args?.PageSize }; var productsResult = await _searchClient.Documents.SearchAsync <AWProduct>(args?.FilterText, searchParameters); var pageProducts = productsResult.Results.Select(productResult => new ProductHitResult { Product = productResult.Document, HitHighlightsHtml = productResult.Highlights?.SelectMany(x => x.Value) }).ToArray(); var productFacets = productsResult.Facets.Select(facet => { var facetName = facet.Key; var friendlyName = GetFacetFriendlyName(facet.Key); var values = facet.Value.Select(value => GetFacetValue(facet.Key, value)); return(new FacetsHit(facetName, friendlyName, values)); }).ToArray(); var searchResult = new ProductsSearchResult { ProductHits = pageProducts, Facets = productFacets, ResultsCount = productsResult.Count ?? 0L, SkipCount = args?.SkipAmount ?? 0L }; return(searchResult); }
public StoreLiquidResult GetProductsSearchPage(Controller controller, ProductsSearchResult productSearchResult, PageDesign pageDesign, List <ProductCategory> categories, String search, String filters, String headerText, String categoryApiId) { var dic = new Dictionary <String, String>(); dic.Add(StoreConstants.PageOutput, ""); var items = new List <ProductLiquid>(); var cats = new List <ProductCategoryLiquid>(); var products = productSearchResult.Products; var filterGroups = productSearchResult.FiltersGroups; var httpContextRequest = controller.Request; foreach (FilterGroup filterGroup in filterGroups) { foreach (Data.HelpersModel.Filter filter in filterGroup.FiltersHidden) { if (string.IsNullOrEmpty(filter.Text)) { continue; } filter.FilterLink = filter.Link(httpContextRequest); } } var filtersList = FilterHelper.GetFiltersFromContextRequest(httpContextRequest); foreach (var filter in filtersList) { filter.FilterLink = filter.LinkExclude(httpContextRequest, productSearchResult.Stats.OwnerType); } foreach (var item in products) { var category = categories.FirstOrDefault(r => r.Id == item.ProductCategoryId); if (category != null) { var blog = new ProductLiquid(item, category, ImageWidth, ImageHeight); items.Add(blog); } } var selectedCategory = categories.FirstOrDefault(r => r.ApiCategoryId.Equals(categoryApiId, StringComparison.InvariantCultureIgnoreCase)); ProductCategoryLiquid selectedCategoryLiquid = null; if (selectedCategory == null) { selectedCategory = categories.FirstOrDefault(); } selectedCategoryLiquid = new ProductCategoryLiquid(selectedCategory); var categoryTree = controller.RenderPartialToStringCache( "pCreateCategoryTree", new ViewDataDictionary(categories)); object anonymousObject = new { filterExcluded = LiquidAnonymousObject.GetFilters(filtersList), filterGroup = LiquidAnonymousObject.GetFilterGroup(filterGroups), products = LiquidAnonymousObject.GetProductsLiquid(items), selectedCategory = LiquidAnonymousObject.GetProductCategory(selectedCategoryLiquid), categoryTree = categoryTree, search = search, filters = filters, headerText = headerText, recordsTotal = productSearchResult.Stats.RecordsTotal, isCleanButton = !String.IsNullOrEmpty(search) || !String.IsNullOrEmpty(filters) }; var indexPageOutput = LiquidEngineHelper.RenderPage(pageDesign, anonymousObject); dic[StoreConstants.PageOutput] = indexPageOutput; dic.Add(StoreConstants.PageSize, productSearchResult.PageSize.ToStr()); dic.Add(StoreConstants.PageNumber, productSearchResult.Stats.PageCurrent.ToStr()); dic.Add(StoreConstants.TotalItemCount, productSearchResult.Stats.RecordsTotal.ToStr()); var result = new StoreLiquidResult(); result.PageDesingName = pageDesign.Name; result.LiquidRenderedResult = dic; if (selectedCategory != null) { result.PageTitle = selectedCategory.Name + " Products"; } else { result.PageTitle = "Products"; } return(result); }
private ProductsSearchResult GetProductsSearchResult( int storeId, string search, List <Filter> filters, int top, int skip, Boolean isAdmin = false, string categoryApiId = "women") { var searchResult = new ProductsSearchResult(); String commandText = @"SearchProducts"; var commandType = CommandType.StoredProcedure; var parameterList = new List <SqlParameter>(); var dtFilters = new DataTable("med_tpt_Filter"); dtFilters.Columns.Add("FieldName"); dtFilters.Columns.Add("ValueFirst"); dtFilters.Columns.Add("ValueLast"); if (filters != null && filters.Any()) { foreach (var filter in filters) { DataRow dr = dtFilters.NewRow(); dr["FieldName"] = filter.FieldName; dr["ValueFirst"] = filter.ValueFirst; dr["ValueLast"] = filter.ValueLast; dtFilters.Rows.Add(dr); } } parameterList.Add(DatabaseUtility.GetSqlParameter("IsAdmin", isAdmin, SqlDbType.Bit)); parameterList.Add(DatabaseUtility.GetSqlParameter("storeId", storeId, SqlDbType.Int)); parameterList.Add(DatabaseUtility.GetSqlParameter("search", search.ToStr(), SqlDbType.NVarChar)); parameterList.Add(DatabaseUtility.GetSqlParameter("ApiCategoryId", categoryApiId.ToStr(), SqlDbType.NVarChar)); parameterList.Add(DatabaseUtility.GetSqlParameter("filter", dtFilters, SqlDbType.Structured)); parameterList.Add(DatabaseUtility.GetSqlParameter("top", top, SqlDbType.Int)); parameterList.Add(DatabaseUtility.GetSqlParameter("skip", skip, SqlDbType.Int)); DatabaseUtility.SqlCommandTimeout = StoreConstants.StoreProcedureCommandTimeOut; DataSet dataSet = DatabaseUtility.ExecuteDataSet((SqlConnection)StoreDbContext.Database.Connection, commandText, commandType, parameterList.ToArray()); if (dataSet.Tables.Count > 0) { var productCategories = new List <ProductCategory>(); using (DataTable dt = dataSet.Tables[0]) { foreach (DataRow dr in dt.Rows) { var item = GetProductCategoriesFromDataRow(dr); productCategories.Add(item); } ; } searchResult.ProductCategories = productCategories; var fileManagerList = new List <FileManager>(); using (DataTable dt = dataSet.Tables[3]) { foreach (DataRow dr in dt.Rows) { var item = GetFileManagerFromDataRow(dr); fileManagerList.Add(item); } ; } var productFiles = new List <ProductFile>(); using (DataTable dt = dataSet.Tables[2]) { foreach (DataRow dr in dt.Rows) { var item = GetProductFilesFromDataRow(dr); productFiles.Add(item); item.FileManager = fileManagerList.FirstOrDefault(r => r.Id == item.FileManagerId); } ; } var products = new List <Product>(); using (DataTable dt = dataSet.Tables[1]) { foreach (DataRow dr in dt.Rows) { var item = GetProductsFromDataRow(dr); products.Add(item); item.ProductFiles = productFiles.Where(r => r.ProductId == item.Id).ToList(); } ; } searchResult.Products = products; using (DataTable dt = dataSet.Tables[4]) { var m = new List <Filter>(); foreach (DataRow dr in dt.Rows) { var item = GetFilterFromDataRow(dr); item.OwnerType = ProductsItem; m.Add(item); } searchResult.Filters = m; } using (DataTable dt = dataSet.Tables[5]) { var stats = new RecordsStats(); foreach (DataRow dr in dt.Rows) { stats = GetRecordsStatsFromDataRow(dr); stats.OwnerType = ProductsItem; } searchResult.Stats = stats; } } searchResult.PageSize = top; return(searchResult); }