Esempio n. 1
0
        public async Task <IActionResult> Search(CarsSearchInputModel car, int id = 1)
        {
            if (id <= 0)
            {
                return(this.NotFound());
            }

            var user = await this.userManager.GetUserAsync(this.User);

            var userId = user != null ? user.Id : string.Empty;

            const int ItemsPerPage = 12;

            var result = this.carsService.SearchCars(car, userId, id, ItemsPerPage);

            var viewModel = new CarsSearchInputModel
            {
                ItemsPerPage = ItemsPerPage,
                PageNumber   = id,
                CarsCount    = result.Count,
                Cars         = result.Cars,
                Make         = car.Make,
                Model        = car.Model,
                Year         = car.Year,
                MinPrice     = car.MinPrice,
                MaxPrice     = car.MaxPrice,
                EngineType   = car.EngineType,
                Gearbox      = car.Gearbox,
                Order        = car.Order,
            };

            return(this.View(viewModel));
        }
Esempio n. 2
0
        public IEnumerable <CarInListViewModel> GetAllDealershipCars(int page, string dealershipId, string userId, string order, int itemsPerPage)
        {
            var dbCar = this.carsRepository.AllAsNoTracking().Where(x => x.UserId == dealershipId);
            var query = dbCar
                        .Select(x => new CarInListViewModel
            {
                Id              = x.Id,
                IsInWatchlist   = userId == string.Empty ? false : this.watchlistRepository.All().Any(d => d.UserId == userId && d.CarId == x.Id),
                MakeName        = x.Make.Name,
                ModelName       = x.Model.Name,
                Modification    = x.Modification,
                Year            = x.Year,
                Location        = x.Location,
                Mileage         = x.Mileage,
                ColorName       = x.Color.Name,
                UserPhoneNumber = x.User.PhoneNumber,
                CreatedOn       = x.CreatedOn,
                Price           = x.Price,
                PriceOrder      = x.Currency == Currency.EUR ? (x.Price * 1.96M) : x.Currency == Currency.USD ? (x.Price * 1.61M) : x.Price,
                Currency        = x.Currency.ToString(),
                Description     = x.Description,
                PictureUrl      = x.ImageUrl != null ? x.ImageUrl : "/images/cars/" + x.Pictures.OrderBy(x => x.CreatedOn).FirstOrDefault().Id + "." + x.Pictures.OrderBy(x => x.CreatedOn).FirstOrDefault().Extension,
            })
                        .AsQueryable();

            var orderModel = new CarsSearchInputModel {
                Order = order
            };

            query = this.commonService.Filter(query, orderModel, page, itemsPerPage);

            return(query.Take(itemsPerPage).ToList());
        }
Esempio n. 3
0
        public (IEnumerable <CarInListViewModel> Cars, int Count) SearchCars(CarsSearchInputModel car, string userId, int page, int itemsPerPage)
        {
            var query = this.carRepository.AllAsNoTracking()
                        .Select(x => new CarInListViewModel
            {
                Id              = x.Id,
                IsInWatchlist   = userId == string.Empty ? false : this.watchlistRepository.All().Any(d => d.UserId == userId && d.CarId == x.Id),
                MakeName        = x.Make.Name,
                ModelName       = x.Model.Name,
                Modification    = x.Modification,
                Year            = x.Year,
                Location        = x.Location,
                Mileage         = x.Mileage,
                ColorName       = x.Color.Name,
                UserPhoneNumber = x.User.PhoneNumber,
                EngineType      = x.EngineType,
                Gearbox         = x.Gearbox,
                Currency        = x.Currency.ToString(),
                CreatedOn       = x.CreatedOn,
                Price           = x.Price,
                PriceOrder      = x.Currency == Currency.EUR ? (x.Price * 1.96M) : x.Currency == Currency.USD ? (x.Price * 1.61M) : x.Price,
                Description     = x.Description,
                PictureUrl      = x.ImageUrl != null ? x.ImageUrl : "/images/cars/" + x.Pictures.OrderBy(x => x.CreatedOn).FirstOrDefault().Id + "." + x.Pictures.OrderBy(x => x.CreatedOn).FirstOrDefault().Extension,
            })
                        .AsQueryable();

            query = this.commonService.Filter(query, car, page, itemsPerPage);

            return(query.Take(itemsPerPage).ToList(), query.ToList().Count);
        }
Esempio n. 4
0
        public IQueryable <CarInListViewModel> Filter(IQueryable <CarInListViewModel> query, CarsSearchInputModel car, int page, int itemsPerPage)
        {
            if (!string.IsNullOrWhiteSpace(car.Make) && car.Make != "All")
            {
                query = query.Where(x => x.MakeName == car.Make);
            }

            if (!string.IsNullOrWhiteSpace(car.Model) && car.Model != "All")
            {
                query = query.Where(x => x.ModelName == car.Model);
            }

            if (car.EngineType != EngineType.Unknown)
            {
                query = query.Where(x => x.EngineType.ToString() == car.EngineType.ToString());
            }

            if (car.Gearbox != Gearbox.None)
            {
                query = query.Where(x => x.Gearbox == car.Gearbox);
            }

            if (car.MinPrice > 0 && car.MaxPrice > 0)
            {
                query = query.Where(x => x.Price >= car.MinPrice && x.Price <= car.MaxPrice);
            }
            else if (car.MinPrice > 0)
            {
                query = query.Where(x => x.Price >= car.MinPrice);
            }
            else if (car.MaxPrice > 0)
            {
                query = query.Where(x => x.Price <= car.MaxPrice);
            }

            if (car.Year > 0)
            {
                query = query.Where(x => x.Year > car.Year);
            }

            if (car.Order == "Make/Model/Price")
            {
                query = query.OrderBy(x => x.MakeName)
                        .ThenBy(x => x.ModelName)
                        .ThenBy(x => x.Price)
                        .Skip((page - 1) * itemsPerPage);
            }
            else if (car.Order == "Price Asc.")
            {
                query = query.OrderBy(x => x.PriceOrder)
                        .Skip((page - 1) * itemsPerPage);
            }
            else if (car.Order == "Price Desc.")
            {
                query = query.OrderByDescending(x => x.PriceOrder)
                        .Skip((page - 1) * itemsPerPage);
            }
            else if (car.Order == "Mileage")
            {
                query = query.OrderBy(x => x.Mileage)
                        .Skip((page - 1) * itemsPerPage);
            }

            return(query);
        }