private FilterDataViewModel GetFilterVm(IEnumerable <Vehicle> results = null)
        {
            var vm = new FilterDataViewModel
            {
                Vehicle = new Vehicle(),

                PriceDataStart = ctx.Vehicles.OrderBy(x => x.Price).Select(x => new SelectListItem
                {
                    Text  = x.Price.ToString(),
                    Value = x.Price.ToString()
                }),


                YearDataStart = ctx.Vehicles.OrderBy(x => x.Year).Select(x => new SelectListItem
                {
                    Text  = x.Year.ToString(),
                    Value = x.Year.ToString()
                }),

                MileageDataStart = ctx.Vehicles.OrderBy(x => x.Mileage).Select(x => new SelectListItem
                {
                    Text  = x.Mileage.ToString(),
                    Value = x.Mileage.ToString()
                }).Distinct(),

                PriceDataEnd = ctx.Vehicles.OrderBy(x => x.Price).Select(x => new SelectListItem
                {
                    Text  = x.Price.ToString(),
                    Value = x.Price.ToString()
                }).Distinct(),

                YearDataEnd = ctx.Vehicles.OrderBy(x => x.Year).Select(x => new SelectListItem
                {
                    Text  = x.Year.ToString(),
                    Value = x.Year.ToString()
                }),

                MileageDataEnd = ctx.Vehicles.OrderBy(x => x.Mileage).Select(x => new SelectListItem
                {
                    Text  = x.Mileage.ToString(),
                    Value = x.Mileage.ToString()
                }),

                FuelData = ctx.Vehicles.Select(x => new SelectListItem
                {
                    Text  = x.Fuel,
                    Value = x.Fuel,
                }).Distinct().OrderBy(x => x.Value),

                BodiesData = ctx.Bodies.Select(x => new SelectListItem
                {
                    Text  = x.BodyName,
                    Value = x.Id.ToString()
                })
            };

            vm.Results = results ?? new List <Vehicle>();
            return(vm);
        }
        public IViewComponentResult Invoke(FilterDataViewModel model)
        {
            model.MaxSize   = (int)((_db.Photos.Max(p => p.Size) / 1024) + 1);
            model.MaxWidth  = _db.Photos.Max(p => p.Width);
            model.MaxHeight = _db.Photos.Max(p => p.Height);

            return(View("FilterPanel", model));
        }
        public IActionResult FilterAction(FilterDataViewModel vm)
        {
            var result = ctx.Vehicles.Include(x => x.Brand).Include(x => x.Dealership).Where(x => x.Price >= Convert.ToDecimal(vm.MinPrice.Replace(".", ",")) && x.Price <= Convert.ToDecimal(vm.MaxPrice.Replace(".", ",")));

            result = result.Where(x => x.Mileage >= vm.MinMileage && x.Mileage <= vm.MaxMileage);
            result = result.Where(x => x.BodyId == vm.SelectedBody);
            result = result.Where(x => x.Fuel == vm.SelectedFuel);
            result = result.Where(x => x.Year >= vm.MinYear && x.Year <= vm.MaxYear);
            result = result.OrderByDescending(Vehicle => Vehicle.DateAdded);

            if (vm.NewCar == true)
            {
                result = result.Where(x => x.Used == false);

                var finalResult = result.ToList();


                vm = GetFilterVm(finalResult);
            }

            else if (vm.OldCar == true)
            {
                result = result.Where(x => x.Used == true);

                var finalResult = result.ToList();


                vm = GetFilterVm(finalResult);
            }

            else if (vm.OldCar == false || vm.NewCar == false)
            {
                var finalResult = result.ToList();


                vm = GetFilterVm(finalResult);
            }



            return(View("index", vm));



            //var finalResult = result.ToList();

            //if (finalResult.Count() == 0)
            //{
            //    finalResult = ctx.Vehicles.OrderBy(x => x.Id).Take(8).ToList();
            //    vm = GetFilterVm(finalResult);
            //    return View("index", vm);
            //}
            //else
            //{
            //    vm = GetFilterVm(finalResult);
            //    return View("index", vm);
            //}
        }
        public IActionResult Search(FilterDataViewModel vm)
        {
            var VehicleSearchResults = repo.Vehicles.Where(x => x.Model.Contains(vm.SearchString) || vm.SearchString == "").ToList();

            vm.Results = VehicleSearchResults;


            return(RedirectToAction("Filter", "Index", vm.Results));
        }
        public IActionResult Search(HomeViewModel vm)
        {
            try
            {
                var VehicleSearchResults = ctx.Vehicles.Include(x => x.Brand).Include(x => x.Dealership).Where(x => x.Model.Contains(vm.SearchString) || vm.SearchString == "").ToList();



                var hej = new FilterDataViewModel {
                    Results = VehicleSearchResults
                };

                var heh = GetFilterVm(VehicleSearchResults);

                return(View(nameof(Index), heh));
            }
            catch (Exception ex)
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
Пример #6
0
        public IEnumerable <Photo> FilterData(string sizeRange, string widthRange, string heightRange, string hashtagsFilter, string authorFilter, dynamic viewBag)
        {
            FilterDataViewModel filterData = new FilterDataViewModel();


            if (authorFilter == null)
            {
                authorFilter = "";
            }

            if (hashtagsFilter == null)
            {
                hashtagsFilter = "";
            }


            var sizeRangeParts = sizeRange.Split('-');

            int.TryParse(sizeRangeParts[0], out int sizeRangeMin);
            int.TryParse(sizeRangeParts[1], out int sizeRangeMax);

            filterData.SizeRangeMin = sizeRangeMin;
            filterData.SizeRangeMax = sizeRangeMax;

            viewBag.SizeRangeMin = sizeRangeMin;
            viewBag.SizeRangeMax = sizeRangeMax;

            var widthRangeParts = widthRange.Split('-');

            int.TryParse(widthRangeParts[0], out int widthRangeMin);
            int.TryParse(widthRangeParts[1], out int widthRangeMax);

            filterData.WidthRangeMin = widthRangeMin;
            filterData.WidthRangeMax = widthRangeMax;

            viewBag.WidthRangeMin = widthRangeMin;
            viewBag.WidthRangeMax = widthRangeMax;

            var heightRangeParts = heightRange.Split('-');

            int.TryParse(heightRangeParts[0], out int heightRangeMin);
            int.TryParse(heightRangeParts[1], out int heightRangeMax);

            filterData.HeightRangeMin = heightRangeMin;
            filterData.HeightRangeMax = heightRangeMax;

            filterData.HashtagsFilter = hashtagsFilter;
            filterData.AuthorFilter   = authorFilter;

            viewBag.HeightRangeMin = heightRangeMin;
            viewBag.HeightRangeMax = heightRangeMax;

            viewBag.HashtagsFilter = hashtagsFilter;
            viewBag.AuthorFilter   = authorFilter;

            viewBag.FilterData = filterData;

            var hashtagsToFilter = filterData.HashtagsFilter.Split(' ').Distinct();


            var hashtagIds = _db.Hashtags.Where(h => hashtagsToFilter.Contains(h.Text)).Select(h => h.Id).ToArray();
            var photoIds   = _db.PhotoHashtags.Where(ph => hashtagIds.Contains(ph.HashtagId)).Select(ph => ph.PhotoId).Distinct().ToArray();

            var photos = _db.Photos
                         .Include(p => p.NRAKOUser)
                         .Include(p => p.PhotosHashtags)
                         .ThenInclude(ph => ph.Hashtag)
                         .AsQueryable();

            if (hashtagIds.Count() != 0)
            {
                photos = photos.Where(p => photoIds.Contains(p.Id));
            }
            photos = photos.Where(p => p.Size >= (filterData.SizeRangeMin * 1024) && p.Size <= (filterData.SizeRangeMax * 1024))
                     .Where(p => p.Width >= filterData.WidthRangeMin && p.Width <= filterData.WidthRangeMax)
                     .Where(p => p.Height >= filterData.HeightRangeMin && p.Height <= filterData.HeightRangeMax)
                     .Where(p => p.NRAKOUser.UserName.Contains(filterData.AuthorFilter))
                     .OrderBy(p => p.DateCreated);

            viewBag.MaxSize   = (_db.Photos.Max(p => p.Size) / 1024) + 1;
            viewBag.MaxWidth  = _db.Photos.Max(p => p.Width);
            viewBag.MaxHeight = _db.Photos.Max(p => p.Height);

            return(photos.ToList());
        }