예제 #1
0
        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);
        }
예제 #2
0
        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);
        }