public QueryCar[] GetCarsInMonth(string orderBy, QueryCar searchCar) { string plate = searchCar.Plate; string manufacturer = searchCar.Manufacturer; string model = searchCar.Model; string location = searchCar.Location; DateTime?startDate = searchCar.StartDate; DateTime?endDate = searchCar.EndDate; DateTime?monthDate = searchCar.MonthDate; bool isPlateEmpty = string.IsNullOrWhiteSpace(plate); bool isManufacturerEmpty = string.IsNullOrWhiteSpace(manufacturer); bool isModelEmpty = string.IsNullOrWhiteSpace(model); bool isLocationmpty = string.IsNullOrWhiteSpace(location); DateTime today = DateTime.Today; startDate = startDate ?? today; endDate = endDate ?? DateTime.MaxValue; monthDate = monthDate ?? today; var reservationsGroup = from reservation in reservationsList where monthDate.Value.Month == reservation.StartDate.Month && monthDate.Value.Year == reservation.StartDate.Year group reservation by reservation.CarId into g select new { CarId = g.Key, ReservationsCount = g.Count() }; var cars = from carTable in carsList join modelTable in modelsList on carTable.ModelId equals modelTable.Id join manufacturerTable in manufacturersList on carTable.ManufacturerId equals manufacturerTable.Id join locationTable in locationsList on carTable.LocationId equals locationTable.Id join reservationGroup in reservationsGroup on carTable.Id equals reservationGroup.CarId where (!isPlateEmpty && carTable.Plate == plate || isPlateEmpty) && (!isManufacturerEmpty && manufacturerTable.Name == manufacturer || isManufacturerEmpty) && (!isModelEmpty && modelTable.Name == model || isModelEmpty) && (!isLocationmpty && locationTable.Name == location || isLocationmpty) select new QueryCar { Id = carTable.Id, Plate = carTable.Plate, Model = modelTable.Name, Manufacturer = manufacturerTable.Name, Location = locationTable.Name, ReservationsCount = reservationGroup.ReservationsCount, MonthDate = monthDate, StartDate = monthDate, EndDate = monthDate }; return(OrderItems(cars.AsQueryable(), orderBy)); }
public QueryCar[] GetAvailableCars(string orderBy, QueryCar car) { ModelContext modelContext = new ModelContext(); QueryManager queryManager = new QueryManager(new SQLRepo <Car>(modelContext), new SQLRepo <Customer>(modelContext), new SQLRepo <Reservation>(modelContext), new SQLRepo <Location>(modelContext), new SQLRepo <Model>(modelContext), new SQLRepo <Manufacturer>(modelContext)); return(queryManager.GetAvailableCars(orderBy, car)); }
public QueryCarResponse Get(QueryCar request) { var car = _carService.Get(request.Id); if (car == null) { throw HttpError.NotFound($"Invalid CarId"); } return(new QueryCarResponse { Car = car.ConvertTo <CarViewModel>() }); }
public ActionResult RentedCarsInMonth(CarsViewModel<QueryCar> viewModel, string orderBy = "ReservationsCount") { if (!ModelState.IsValid) { return View(new CarsViewModel<QueryCar>() { Cars = new List<QueryCar>() }); } QueryCar car = viewModel.SearchCar ?? new QueryCar(); QueryManager queryManager = new QueryManager(carRepo, customerRepo, reservationRepo, locationRepo, modelRepo, manufacturerRepo); QueryCar[] cars = queryManager.GetCarsInMonth(orderBy, car); viewModel.Cars = cars; return View(viewModel); }
public QueryCar[] GetRecentCars(string orderBy, QueryCar searchCar) { string plate = searchCar.Plate; string manufacturer = searchCar.Manufacturer; string model = searchCar.Model; string location = searchCar.Location; DateTime?startDate = searchCar.StartDate; DateTime?endDate = searchCar.EndDate; bool isPlateEmpty = string.IsNullOrWhiteSpace(plate); bool isManufacturerEmpty = string.IsNullOrWhiteSpace(manufacturer); bool isModelEmpty = string.IsNullOrWhiteSpace(model); bool isLocationmpty = string.IsNullOrWhiteSpace(location); DateTime today = DateTime.Today; startDate = startDate ?? today; endDate = endDate ?? DateTime.MaxValue; var tempCars = (from carTable in carsList join modelTable in modelsList on carTable.ModelId equals modelTable.Id join manufacturerTable in manufacturersList on carTable.ManufacturerId equals manufacturerTable.Id join locationTable in locationsList on carTable.LocationId equals locationTable.Id join reservation in reservationsList on carTable.Id equals reservation.CarId where (!isPlateEmpty && carTable.Plate == plate || isPlateEmpty) && (!isManufacturerEmpty && manufacturerTable.Name == manufacturer || isManufacturerEmpty) && (!isModelEmpty && modelTable.Name == model || isModelEmpty) && (!isLocationmpty && locationTable.Name == location || isLocationmpty) && (reservation.StartDate <= today) select new QueryCar { Id = carTable.Id, Plate = carTable.Plate, Model = modelTable.Name, Manufacturer = manufacturerTable.Name, StartDate = (DateTime)(reservation != null ? reservation.StartDate : startDate), EndDate = (DateTime)(reservation != null ? reservation.EndDate : endDate), Location = locationTable.Name }).OrderByDescending(x => x.StartDate).ToList(); var cars = tempCars.Distinct(new CarComparer()); return(OrderItems(cars.AsQueryable(), orderBy)); }
public List <Car> Search([FromQuery] QueryCar qcar) { List <Car> liste = new List <Car>(); if (qcar.MaxYear == 0) { qcar.MaxYear = int.MaxValue; } foreach (Car car in data) { if (qcar.MinYear <= car.Year && car.Year <= qcar.MaxYear) { liste.Add(car); } } return(liste); }
public List <QueryCar> SelectNearestReservation(List <QueryCar> newCars, List <QueryCar> cars, DateTime startDate) { var orderedCars = cars.OrderBy(x => x.Id); cars = orderedCars.ToList(); QueryCar carToAdd = cars[0]; for (int i = 1; i < cars.Count; ++i) { if (cars[i].Id == cars[i - 1].Id) { if (cars[i].StartDate > startDate) { if (carToAdd.StartDate <= startDate) { carToAdd = cars[i]; } else if (cars[i].StartDate < carToAdd.StartDate) { carToAdd = cars[i]; } } } else { carToAdd.EndDate = carToAdd.StartDate != startDate ? carToAdd.StartDate : DateTime.MaxValue; carToAdd.StartDate = startDate; newCars.Add(carToAdd); carToAdd = cars[i]; } } newCars.Add(carToAdd); return(newCars); }
public QueryCar[] GetAvailableCars(string orderBy, QueryCar searchCar) { string plate = searchCar.Plate; string manufacturer = searchCar.Manufacturer; string model = searchCar.Model; string location = searchCar.Location; DateTime?startDate = searchCar.StartDate; DateTime?endDate = searchCar.EndDate; bool isPlateEmpty = string.IsNullOrWhiteSpace(plate); bool isManufacturerEmpty = string.IsNullOrWhiteSpace(manufacturer); bool isModelEmpty = string.IsNullOrWhiteSpace(model); bool isLocationmpty = string.IsNullOrWhiteSpace(location); bool isStartDateNull = startDate == null; bool isEndDateNull = endDate == null; startDate = !isStartDateNull ? startDate : DateTime.Today; endDate = !isEndDateNull ? endDate : DateTime.MaxValue; var cars = (from carTable in carsList join modelTable in modelsList on carTable.ModelId equals modelTable.Id join manufacturerTable in manufacturersList on carTable.ManufacturerId equals manufacturerTable.Id join locationTable in locationsList on carTable.LocationId equals locationTable.Id join reservation in reservationsList on carTable.Id equals reservation.CarId into leftJoin from reservation in leftJoin.DefaultIfEmpty() where (!isPlateEmpty && carTable.Plate == plate || isPlateEmpty) && (!isManufacturerEmpty && manufacturerTable.Name == manufacturer || isManufacturerEmpty) && (!isModelEmpty && modelTable.Name == model || isModelEmpty) && (!isLocationmpty && locationTable.Name == location || isLocationmpty) select new QueryCar { Id = carTable.Id, Plate = carTable.Plate, Model = modelTable.Name, Manufacturer = manufacturerTable.Name, StartDate = (DateTime)(reservation != null ? reservation.StartDate : startDate), EndDate = (DateTime)(reservation != null ? reservation.EndDate : endDate), Location = locationTable.Name }).ToList(); RemoveNotAvailable(isEndDateNull, cars, (DateTime)startDate, (DateTime)endDate); if (cars.Count == 0) { return(OrderItems(cars.AsQueryable(), orderBy)); } List <QueryCar> newCars = !isEndDateNull?cars.Distinct(new CarComparer()).ToList() : SelectNearestReservation(new List <QueryCar>(), cars, (DateTime)startDate); if (!isEndDateNull) { foreach (QueryCar c in newCars) { c.StartDate = (DateTime)startDate; c.EndDate = (DateTime)endDate; } } return(OrderItems(newCars.AsQueryable(), orderBy)); }