public FilteringResultModel GetSearchOptions(FilteringParameters parameters) { List <Product> items = new List <Product>(); List <Subcategory> subcategories = new List <Subcategory>(); if (parameters.SearchString != null && parameters.SearchString != "") { items = _database.ProductRepository.Find(item => item.Name.ToUpper().Contains(parameters.SearchString.ToUpper())).ToList(); subcategories = _database.SubcategoryRepository.Find(item => item.Name.ToUpper().Contains(parameters.SearchString.ToUpper())).ToList(); } FilteringResultModel result = new FilteringResultModel(); result.Products = _mapper.Map <IEnumerable <ProductModelItem> >(items); result.Subcategories = _mapper.Map <IEnumerable <SubcategoryModelItem> >(subcategories); result.Successed = true; return(result); }
public FilteringResultModel GetProducts(FilteringParameters parameters) { List <Product> items = new List <Product>(); List <Subcategory> subcategories = new List <Subcategory>(); List <Brand> brands = new List <Brand>(); FilteringResultModel result = new FilteringResultModel(); if (parameters.SubcategoryId != 0) { items = _database.ProductRepository.GetProductsByCategory(parameters.SubcategoryId).ToList(); if (!String.IsNullOrEmpty(parameters.SearchString)) { items = items.Where(item => item.Name.ToUpper() .Contains(parameters.SearchString.ToUpper())).ToList(); } } else { if (!String.IsNullOrEmpty(parameters.SearchString)) { items = _database.ProductRepository.Find(item => item.Name.ToUpper() .Contains(parameters.SearchString.ToUpper())).ToList(); } } foreach (var item in items) { var sub = _database.ProductByCategoryRepository.Find(i => i.Product.Id == item.Id).First().Subcategory; if (!subcategories.Contains(sub) && sub != null) { subcategories.Add(sub); } var brand = _database.ProductByBrandRepository.Find(b => b.Product == item).First().Brand; if (!brands.Contains(brand) && brand != null) { brands.Add(brand); } } result.MaxPrice = items.Max(x => x.Price); result.MinPrice = items.Min(x => x.Price); //Filtering by selected brands if (!String.IsNullOrEmpty(parameters.Brands)) { var selectedBrands = parameters.Brands.Split(';').Select(x => Int32.Parse(x)); items = _database.ProductByBrandRepository .Find(item => items.Contains(item.Product) && selectedBrands.Contains(item.Brand.Id)) .Select(i => i.Product) .ToList(); result.SelectedBrands = selectedBrands.ToArray(); } if (parameters.MaxPrice != 0) { items = items.Where(p => p.Price <= parameters.MaxPrice).ToList(); result.SetMaxPrice = parameters.MaxPrice; } else { result.SetMaxPrice = result.MaxPrice; } if (parameters.MinPrice != 0) { items = items.Where(p => p.Price >= parameters.MinPrice).ToList(); result.SetMinPrice = parameters.MinPrice; } else { result.SetMinPrice = result.MinPrice; } //Sorting switch (parameters.Sort) { case "price_asce": items = items.OrderBy(x => x.Price).ToList(); break; case "price_desc": items = items.OrderByDescending(x => x.Price).ToList(); break; default: break; } //Pagination result.TotalPages = items.Count / 8; int surplus = items.Count % 8; if (surplus > 0) { result.TotalPages++; } else { surplus = 8; } result.TotalItems = items.Count; if (parameters.Page <= result.TotalPages && parameters.Page != 0) { int indexFirstItems = (parameters.Page - 1) * 8; if (parameters.Page != result.TotalPages) { items = items.GetRange(indexFirstItems, 8); } else { items = items.GetRange(indexFirstItems, surplus); } result.Page = parameters.Page; } else { items = items.GetRange(0, 8); result.Page = 1; } result.Products = _mapper.Map <IEnumerable <ProductModelItem> >(items); result.Subcategories = _mapper.Map <IEnumerable <SubcategoryModelItem> >(subcategories); result.Brands = _mapper.Map <IEnumerable <BrandModelItem> >(brands); result.Successed = true; return(result); }