/// <summary> /// /// </summary> /// <param name="search"></param> /// <returns></returns> public async Task <ListInfo <CarModel> > Search(CarSearch search) { ListInfo <CarModel> result = null; try { var query = from car in CarModelQuery(Context) where ( !search.ModelIds.Any() || search.ModelIds.Any(x => x == car.ModelId) ) && ( !search.Years.Any() || search.Years.Any(x => x == car.Year) ) && ( string.IsNullOrEmpty(search.Search) || car.ModelName.Contains(search.Search) || car.BrandName.Contains(search.Search) || car.License.Contains(search.Search) ) select car; result = new ListInfo <CarModel> { Count = await query.CountAsync(), Data = await query.Paginate(search).ToListAsync() }; } catch (Exception ex) { throw; } return(result); }
public IHttpActionResult PutCarSearch(int id, CarSearch carSearch) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != carSearch.id) { return(BadRequest()); } db.Entry(carSearch).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!CarSearchExists(id)) { return(NotFound()); } else { throw; } } return(StatusCode(HttpStatusCode.NoContent)); }
public async Task <IActionResult> SearchCars([FromQuery] CarSearch model) { if (ModelState.IsValid) { var vehicles = await VehicleService.GetVehiclesBySearch(model); List <VehicleDTO> vehicleDTOs = new List <VehicleDTO>(); foreach (Vehicle v in vehicles) { vehicleDTOs.Add(new VehicleDTO() { VehicleId = v.VehicleId, Additional = v.Additional, Baggage = v.Baggage, CarType = v.CarType, CostPerDay = v.CostPerDay, Doors = v.Doors, Fuel = v.Fuel, Name = v.Name, Passangers = v.Passangers, Transmission = v.Transmission, Rating = await VehicleService.GetVehicleRatingAsInteger(v.VehicleId) }); } return(Ok(vehicleDTOs)); } ModelState.AddModelError("", "Cannot retrieve user data."); return(BadRequest(ModelState)); }
public ViewResult BusList(CarSearch searchModel, int page = 1) { var car = repository.Cars; var cars = new List <Car>(); foreach (var c in car) { if (c.Category.Equals("C")) { cars.Add(c); } } var model = new CarsListViewModel { Cars = cars, PagingInfo = new PagingInfo { CurrentPage = page, CarsPerPage = PageSize, TotalCars = repository.Cars.Count() } }; return(View(model)); }
/// <summary> /// Starts search and stores results using unique key for future retrieval /// </summary> /// <param name="uniqueKey"></param> /// <param name="carSearch"></param> public ScrapeResult StartCarSearch(Guid uniqueKey, CarSearch carSearch) { var start = DateTime.Now; try { var prefs = new List <ProcessingPreferences>(); var prefsDealerCom = new ProcessingPreferences(new DealerComSelector(carSearch.Make, carSearch.Model, carSearch.IsLoaner ? InventoryType.Loaner : InventoryType.New)); var prefsDealerOn = new ProcessingPreferences(new DealerOnSelector(carSearch.Make, carSearch.Model, carSearch.IsLoaner ? InventoryType.Loaner : InventoryType.New)); var prefsDealerInspire = new ProcessingPreferences(new DealerInspireSelector(carSearch.Make, carSearch.Model, carSearch.IsLoaner ? InventoryType.Loaner : InventoryType.New)); switch (carSearch.DealerType) { case DealerType.DealerCom: prefs.Add(prefsDealerCom); break; case DealerType.DealerOn: prefs.Add(prefsDealerOn); break; case DealerType.DealerInspire: prefs.Add(prefsDealerInspire); break; default: prefs.AddRange(new[] { prefsDealerCom, prefsDealerInspire, prefsDealerOn }); break; } var processor = new Processor(prefs.ToArray()); var scrapeResults = processor.Scrap(); return(new ScrapeResult { ScrapeResults = scrapeResults, RuntimeException = null, DurationInSeconds = (decimal)(DateTime.Now - start).TotalSeconds }); } catch (Exception e) { return(new ScrapeResult { ScrapeResults = new List <CarInfo> { new CarInfo { Make = "Search Error" } }, RuntimeException = e, DurationInSeconds = (decimal)(DateTime.Now - start).TotalSeconds }); } }
public async Task <List <CarDto> > Search(CarSearch search) { if (string.IsNullOrWhiteSpace(search.CarNumber) && !search.CarModelid.HasValue) { return(_mapper.Map <List <Car>, List <CarDto> >(await _repository.GetAllAsync())); } return(_mapper.Map <List <Car>, List <CarDto> >(await _repository.Search(search))); }
public List <Car> FindCars(CarSearchModel searchModel) {//takes search model, makes instance of another class CarSearch, //and uses a method in the class to return a list of cars that //fit the search criteria var search = new CarSearch(); var list = search.SearchCars(searchModel).ToList(); return(list); }
public IHttpActionResult PostCarSearch(CarSearch carSearch) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } db.CarSearches.Add(carSearch); db.SaveChanges(); return(CreatedAtRoute("DefaultApi", new { id = carSearch.id }, carSearch)); }
public ActionResult <PagedResponse <CarShowDto> > Get([FromQuery] CarSearch query) { try { return(Ok(_getCars.Execute(query))); } catch (Exception e) { Console.WriteLine(e.Message); return(StatusCode(500)); } }
//[ResponseType(typeof(List<CarItem>))] public List <CarItem> GetAllCarsByDistance([FromUri] CarSearch carSearch) { var userIdentity = System.Web.HttpContext.Current.User.Identity; string loggedInUser = userIdentity.GetUserId().ToString(); ApplicationUser user = db.Users.Find(loggedInUser); carSearch.lat = user.Lat; carSearch.aLong = user.Long; List <CarItem> carList = HelperClass.GetCarsByDistance(db, carSearch); return(carList); }
public IHttpActionResult DeleteCarSearch(int id) { CarSearch carSearch = db.CarSearches.Find(id); if (carSearch == null) { return(NotFound()); } db.CarSearches.Remove(carSearch); db.SaveChanges(); return(Ok(carSearch)); }
public async Task <List <Car> > Search(CarSearch search) { var query = _dbContext.Cars.AsNoTracking().AsQueryable(); if (!string.IsNullOrWhiteSpace(search.CarNumber)) { query = query.Where(c => c.CarNumber.Contains(search.CarNumber, StringComparison.InvariantCultureIgnoreCase)); } if (search.CarModelid.HasValue) { query = query.Where(c => c.CarModelid == search.CarModelid.Value); } return(await query.OrderBy(c => c.CarNumber).ToListAsync()); }
public void Can_Search_Numeric() { //przygotowanie Mock <ICarRepository> mock = new Mock <ICarRepository>(); mock.Setup(m => m.Cars).Returns(new Car[] { new Car { CarID = 1, Model = "P1", Brand = "B1", Category = "", PricePerDay = 100, Year = 2001, Capacity = 2 }, new Car { CarID = 2, Model = "P2", Brand = "B2", Category = "", PricePerDay = 200, Year = 2002, Capacity = 2 }, new Car { CarID = 3, Model = "P3", Brand = "B3", Category = "", PricePerDay = 300, Year = 2003, Capacity = 2 }, new Car { CarID = 4, Model = "P4", Brand = "B4", Category = "", PricePerDay = 400, Year = 1990, Capacity = 1 }, new Car { CarID = 5, Model = "P5", Brand = "B5", Category = "", PricePerDay = 500, Year = 1991, Capacity = 1 }, new Car { CarID = 6, Model = "P6", Brand = "B6", Category = "", PricePerDay = 600, Year = 1993, Capacity = 2 }, new Car { CarID = 7, Model = "P7", Brand = "B7", Category = "", PricePerDay = 700, Year = 1999, Capacity = 2 }, new Car { CarID = 8, Model = "P8", Brand = "B8", Category = "", PricePerDay = 800, Year = 2001, Capacity = 2 }, }); CarController controller = new CarController(mock.Object); CarSearch carSearch = new CarSearch { MinPrice = 200, MaxPrice = 600, MinYear = 1990, MaxYear = 2000, MinCapacity = 1, MaxCapacity = (decimal)1.6 }; //działanie CarsListMainModel result = (CarsListMainModel)controller.List(carSearch, 1).Model; Car[] carArray = result.CarListViewModel.Cars.ToArray(); //asercje Assert.IsTrue(carArray.Length == 2); Assert.AreEqual(carArray[0].CarID, 4); Assert.AreEqual(carArray[1].CarID, 5); }
public void Can_Sort_Numeric() { //przygotowanie Mock <ICarRepository> mock = new Mock <ICarRepository>(); mock.Setup(m => m.Cars).Returns(new Car[] { new Car { CarID = 1, Model = "F", Brand = "B1", Category = "", PricePerDay = 200 }, new Car { CarID = 2, Model = "B", Brand = "B2", Category = "", PricePerDay = 100 }, new Car { CarID = 3, Model = "D", Brand = "B3", Category = "", PricePerDay = 50 }, new Car { CarID = 4, Model = "A", Brand = "B1", Category = "", PricePerDay = 500 }, new Car { CarID = 5, Model = "G", Brand = "B5", Category = "", PricePerDay = 150 } }); CarController controller = new CarController(mock.Object); CarSearch carSearch = new CarSearch { Sort = "PriceUp" }; //działanie CarsListMainModel result = (CarsListMainModel)controller.List(carSearch, 1).Model; Car[] carArray = result.CarListViewModel.Cars.ToArray(); //asercje Assert.IsTrue(carArray.Length == 5); Assert.AreEqual(carArray[0].CarID, 3); Assert.AreEqual(carArray[1].CarID, 2); Assert.AreEqual(carArray[2].CarID, 5); Assert.AreEqual(carArray[3].CarID, 1); Assert.AreEqual(carArray[4].CarID, 4); }
public void Can_Search_Strings() { //przygotowanie Mock <ICarRepository> mock = new Mock <ICarRepository>(); mock.Setup(m => m.Cars).Returns(new Car[] { new Car { CarID = 1, Model = "P1", Brand = "B1", Category = "" }, new Car { CarID = 2, Model = "P1", Brand = "B2", Category = "" }, new Car { CarID = 3, Model = "P2", Brand = "B3", Category = "" }, new Car { CarID = 4, Model = "P1", Brand = "B1", Category = "" }, new Car { CarID = 5, Model = "P2", Brand = "B5", Category = "" } }); CarController controller = new CarController(mock.Object); CarSearch carSearch = new CarSearch { NameSearch = "P1", BrandSearch = "B1" }; //działanie CarsListMainModel result = (CarsListMainModel)controller.List(carSearch, 1).Model; Car[] carArray = result.CarListViewModel.Cars.ToArray(); //asercje Assert.IsTrue(carArray.Length == 2); Assert.AreEqual(carArray[0].CarID, 1); Assert.AreEqual(carArray[1].CarID, 4); }
public ActionResult <SearchTicket> Post([FromBody] CarSearch carSearch, [FromServices] IConfiguration config) { //assign searchresult var uniqueKey = Guid.NewGuid(); //start async search here Task.Run(() => { var results = new SearchHandler(_context).StartCarSearch(carSearch); string data = JsonConvert.SerializeObject(results.ScrapeResults, Formatting.None); var searchData = new SearchData { Key = uniqueKey, Data = data, Exception = results.RuntimeException?.Message, SearchDurationInSec = results.DurationInSeconds }; var util = new Util(config); using (var db = util.GetDbContext()) { db.SearchData.Add(searchData); db.SaveChanges(); } }); var returnTicket = new SearchTicket { SearchKey = uniqueKey.ToString(), RetryAfter = Duration.ThirtySeconds, KeyRetrievalEndpoint = string.Format("{0}://{1}{2}{3}", Request.Scheme, Request.Host, Request.Path, Request.QueryString)?.ToLower().Replace("startsearch", "getresults") }; return(new AcceptedResult("", returnTicket)); }
public PagedResponse <CarShowDto> Execute(CarSearch request) { var query = Context.Cars.AsQueryable(); if (request.Name != null) { query.Where(c => c.Name.Contains(request.Name)); } if (request.MinPrice != null && request.MaxPrice != null) { query.Where(c => c.Price >= request.MinPrice && c.Price <= request.MaxPrice); } if (request.ModelId != null) { query.Where(c => c.ModelId == request.ModelId); } if (request.TransmissionId != null) { query.Where(c => c.TransmissionId == request.TransmissionId); } if (request.FuelId != null) { query.Where(c => c.FuelId == request.FuelId); } if (request.EngineId != null) { query.Where(c => c.EngineId == request.EngineId); } query.Include(c => c.Engine) .Include(c => c.Model) .Include(c => c.Fuel) .Include(c => c.Transmission) .Include(c => c.CarEquipment) .ThenInclude(ce => ce.Equipment); query.Skip((request.PageNumber - 1) * request.PerPage).Take(request.PerPage); var totalCount = query.Count(); var pagesCount = (int)Math.Ceiling((double)totalCount / request.PerPage); return(new PagedResponse <CarShowDto> { CurrentPage = request.PageNumber, PagesCount = pagesCount, TotalCount = totalCount, Data = query.Select(c => new CarShowDto { Id = c.Id, Name = c.Name, Price = c.Price, Model = c.Model.Name, Engine = c.Engine.Name, Fuel = c.Fuel.Type, Src = c.Src, Alt = c.Alt, Transmission = c.Transmission.Type, EquipmentNames = c.CarEquipment.Select(ce => ce.Equipment.Name) }) }); }
public ViewResult Search(CarSearch searchModel) { return(View(searchModel)); }
public ActionResult SearchPost(CarSearch searchModel) { return(RedirectToAction("List", searchModel)); }
public Fsm(long chatId, Message msg, TelegramBotClient bot, Context db) { User state; lock (Locker) { state = db.Users.FirstOrDefault(x => x.ChatId == chatId); } if (state == null) { User user = new User { ChatId = chatId, State = StateChatEnum.StartMain }; db.Users.Add(user); db.SaveChanges(); } if (state != null) { IUpdateState updateState; switch (state.State) { case StateChatEnum.StartMain: var uid = db.Users.FirstOrDefault(x => x.ChatId == chatId); if (uid == null) { User user = new User { ChatId = chatId, State = StateChatEnum.StartText }; db.Users.Add(user); db.SaveChanges(); } updateState = new StartMain(); break; case StateChatEnum.EndAddress: updateState = new EndAddress(); break; case StateChatEnum.StartText: updateState = new StartText(); break; case StateChatEnum.SendingTime: updateState = new SendingTime(); break; case StateChatEnum.SendingNumberPhone: updateState = new SendingNumberPhone(); break; case StateChatEnum.PaymentMethod: updateState = new PaymentMethod(); break; case StateChatEnum.CarSearch: updateState = new CarSearch(); break; //case StateChatEnum.CarSearch: // updateState = new CarSearch(); // break; default: throw new AggregateException(); } updateState.UpdateAsync(msg, bot, chatId, db); } }
public Task <IList <Car> > Search(CarSearch search) { throw new NotImplementedException(); }
public ViewResult List(CarSearch searchModel, int page = 1) { var cars = repository.Cars; if (ModelState.IsValid) { if (searchModel.NameSearch == null) { searchModel.NameSearch = ""; } if (searchModel.BrandSearch == null) { searchModel.BrandSearch = ""; } if (searchModel.MaxPrice == 0) { searchModel.MaxPrice = decimal.MaxValue; } if (searchModel.MaxYear == 0) { searchModel.MaxYear = int.MaxValue; } if (searchModel.MaxMileage == 0) { searchModel.MaxMileage = decimal.MaxValue; } if (searchModel.MaxCapacity == 0) { searchModel.MaxCapacity = decimal.MaxValue; } if (searchModel.Category == null) { searchModel.Category = ""; } cars = from i in repository.Cars where i.Model.Contains(searchModel.NameSearch) && i.Brand.Contains(searchModel.BrandSearch) && i.PricePerDay >= searchModel.MinPrice && i.PricePerDay <= searchModel.MaxPrice && i.Mileage >= searchModel.MinMileage && i.Mileage <= searchModel.MaxMileage && i.Year >= searchModel.MinYear && i.Year <= searchModel.MaxYear && i.Capacity >= searchModel.MinCapacity && i.Capacity <= searchModel.MaxCapacity select i; if (searchModel.Hired == "false") { cars = cars.Where(p => p.Hired == true); } else if (searchModel.Hired == "true") { cars = cars.Where(p => p.Hired == false); } if (searchModel.Category != "") { cars = cars.Where(p => p.Category.Equals(searchModel.Category)); } if (searchModel.Sort == "ModelUp") { cars = cars.OrderBy(p => p.Model); } else if (searchModel.Sort == "ModelDown") { cars = cars.OrderByDescending(p => p.Model); } else if (searchModel.Sort == "BrandUp") { cars = cars.OrderBy(p => p.Brand); } else if (searchModel.Sort == "BrandDown") { cars = cars.OrderByDescending(p => p.Brand); } else if (searchModel.Sort == "PriceUp") { cars = cars.OrderBy(p => p.PricePerDay); } else if (searchModel.Sort == "PriceDown") { cars = cars.OrderByDescending(p => p.PricePerDay); } else if (searchModel.Sort == "YearUp") { cars = cars.OrderBy(p => p.Year); } else if (searchModel.Sort == "YearDown") { cars = cars.OrderByDescending(p => p.Year); } else if (searchModel.Sort == "MileageUp") { cars = cars.OrderBy(p => p.Mileage); } else if (searchModel.Sort == "MileageDown") { cars = cars.OrderByDescending(p => p.Mileage); } else if (searchModel.Sort == "CapacityUp") { cars = cars.OrderBy(p => p.Capacity); } else if (searchModel.Sort == "CapacityDown") { cars = cars.OrderByDescending(p => p.Capacity); } else { cars = cars.OrderBy(p => p.CarID); } } var totalCars = cars.Count(); cars = cars.Skip((page - 1) * PageSize); cars = cars.Take(PageSize); var model = new CarsListMainModel { CarListViewModel = new CarsListViewModel { Cars = cars, PagingInfo = new PagingInfo { CurrentPage = page, CarsPerPage = PageSize, TotalCars = totalCars } }, CarSearch = searchModel }; return(View(model)); }
public async Task <Object> GetSearchedCars(CarSearch carSearch) { List <Vehicle> cars = new List <Vehicle>(); try { if (carSearch.RentacarID != null) { if (carSearch.BranchID != null) { cars = _dataBase.Vehicles.Where(v => v.RentacarID == carSearch.RentacarID && v.BranchID == carSearch.BranchID).Include(v => v.DatesTaken).ToList(); } else { cars = _dataBase.Vehicles.Where(v => v.RentacarID == carSearch.RentacarID).Include(v => v.DatesTaken).ToList(); } } else { cars = _dataBase.Vehicles.Include(v => v.DatesTaken).ToList(); } } catch (Exception ex) { return(BadRequest(ex.Message)); } await Task.Run(() => { int counter = 0; if (carSearch.CityOT != null) { cars.RemoveAll(v => !carSearch.CityOT.ToLower().Contains(_dataBase.Locations.Find(_dataBase.Branches.Find(v.BranchID).LocationID).NameOfCity.ToLower())); } if (carSearch.DateOR != null) { for (var d = DateTime.Parse(carSearch.DateOT); d <= DateTime.Parse(carSearch.DateOR); d = d.AddDays(1)) { ++counter; cars.RemoveAll(v => v.DatesTaken.ToList().Find(date => date.DateTime == d) != null); } } else if (carSearch.DateOT != null) { cars.RemoveAll(v => v.DatesTaken.ToList().Find(date => date.DateTime == DateTime.Parse(carSearch.DateOT)) != null); } counter = counter != 0 ? counter : 1; if (carSearch.MPrice != null) { cars.RemoveAll(v => carSearch.MPrice < v.PricePerDay *counter); } if (carSearch.Type != null) { cars.RemoveAll(v => carSearch.Type != v.TypeOfVehicle); } if (carSearch.Seats != null) { cars.RemoveAll(v => carSearch.Seats != v.NumberOfSeats); } }); return(Ok(cars)); }
public async Task <List <Vehicle> > GetVehiclesBySearch(CarSearch searchParameters) { List <Vehicle> retVal = new List <Vehicle>(); if (searchParameters.PickUpDate < DateTime.Now) { return(retVal); } if (searchParameters.PickUpDate > searchParameters.ReturnDate) { return(retVal); } if (searchParameters.PickUpDate == searchParameters.ReturnDate) { if (searchParameters.PickUpTime >= searchParameters.ReturnTime) { return(retVal); } } var vehicles = await _repository.GetAllVehicles(); foreach (Vehicle v in vehicles) { if (v.CarType == searchParameters.CarType && v.Passangers >= searchParameters.Passangers) { var company = await _companyRepository.GetCompany(v.CarCompanyId); var pickUpLocationExists = company.Offices.SingleOrDefault(o => o.Location.Name == searchParameters.PickUpLocation) != null; var returnLocationExists = company.Offices.SingleOrDefault(o => o.Location.Name == searchParameters.ReturnLocation) != null; if (pickUpLocationExists && returnLocationExists) { var allCarReservations = await _companyRepository.GetCarReservationsByCompanyId(v.CarCompanyId); if (allCarReservations != null) { var reservations = allCarReservations.Where(cr => cr.VehicleId == v.VehicleId); DateTime pickUpDate = searchParameters.PickUpDate.Add(searchParameters.PickUpTime.TimeOfDay); DateTime returnDate = searchParameters.ReturnDate.Add(searchParameters.ReturnTime.TimeOfDay); bool available = true; foreach (CarReservation r in reservations) { // rp p rr r if (r.PickUpDate < pickUpDate && r.ReturnDate > pickUpDate) { available = false; break; } // p rp r rr if (r.PickUpDate > pickUpDate && r.PickUpDate < returnDate) { available = false; break; } if (r.PickUpDate == pickUpDate && r.ReturnDate == returnDate) { available = false; break; } } if (available) { retVal.Add(v); } } else { retVal.Add(v); } } } } return(retVal); }