コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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>()
            });
        }
コード例 #4
0
ファイル: CarController.cs プロジェクト: dendiod/RentC
        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);
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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));
        }