public ActionResult Search(SearchTrainViewModel trainTicket)
        {
            ViewBag.Errors = new List<string>();

            if (ModelState.IsValid)
            {
                DateTime departureTime =
                    DateTime.Parse(trainTicket.DepartureTime)
                            .AddHours(trainTicket.DepartureTimeHour);

                if (departureTime < DateTime.Now)
                {
                    ModelState.AddModelError("AlreadyDeparted", "The time of departure for your search has already passed.");
                    return View(nameof(this.Index), trainTicket);
                }

                var trainRoute = db.TrainRoutes
                                             .Where(r => r.Arrival.Name == trainTicket.Arrival)
                                             .Where(r => r.Departure.Name == trainTicket.Departure)
                                             .SingleOrDefault();

                if (trainRoute == null)
                {
                    ModelState.AddModelError("InvalidRoute", "Departure and arrival cities should be different.");
                    return View(nameof(this.Index), trainTicket);
                }

                var trains = db.Trains
                                     .Where(t => t.DepartureTime >= departureTime)
                                     .Where(t => t.Route.Arrival.Name == trainRoute.Arrival.Name)
                                     .Where(t => t.Route.Departure.Name == trainRoute.Departure.Name)
                                     .OrderBy(t => t.DepartureTime)
                                     .Take(3)
                                     .Select(tr => new AvailableTrainViewModel()
                                     {
                                         Route = tr.Route,
                                         DepartureTime = tr.DepartureTime,
                                         Id = tr.Id,
                                         BusinessClassPassengersCount = (db.TrainTickets
                                                                              .Where(t => t.TrainId == tr.Id)
                                                                              .Where(t => t.IsConfirmed)
                                                                              .Where(t => t.IsBusinessClass)
                                                                              .Select(t => t.PassengersCount)
                                                                              .DefaultIfEmpty()
                                                                              .Sum()),
                                         EconomicClassPassengersCount = (db.TrainTickets
                                                                              .Where(t => t.TrainId == tr.Id)
                                                                              .Where(t => t.IsConfirmed)
                                                                              .Where(t => !t.IsBusinessClass)
                                                                              .Select(t => t.PassengersCount)
                                                                              .DefaultIfEmpty()
                                                                              .Sum())
                                     })
                                     .ToList();

                return View(trains);
            }

            return View();
        }
        public ActionResult SearchTrains(SearchTrainViewModel searchTrainViewModel)
        {
            if (ModelState.IsValid)
            {
                return(RedirectToAction("GetTrains", new { FromStation = searchTrainViewModel.FromStation, ToStation = searchTrainViewModel.ToStation }));
            }

            return(View(searchTrainViewModel));
        }
Esempio n. 3
0
        public ActionResult DisplayTrainDetails(SearchTrainViewModel searchTrainViewModel)  //based on search result displaying train
        {
            TempData["JourneyDate"] = searchTrainViewModel.JourneyDate;
            List <TrainDetails>          trainDetailsList          = trainDetailsBL.SearchTrain(searchTrainViewModel.Source, searchTrainViewModel.Destination); //fetching train details list based in search result
            List <TrainDetailsViewModel> trainDetailsViewModelList = new List <TrainDetailsViewModel>();

            //IEnumerable<TrainDetails> trainList = TrainDetailsBL.GetTrainDetails();       //Displaying Train Details
            foreach (TrainDetails train in trainDetailsList)
            {
                TrainDetailsViewModel trainDetailsViewModel = AutoMapper.Mapper.Map <TrainDetails, TrainDetailsViewModel>(train);    //Automapping of objects
                trainDetailsViewModelList.Add(trainDetailsViewModel);
            }
            return(View(trainDetailsViewModelList));
        }