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)); }
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()); }
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); }
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); }