public async Task <IActionResult> Routes(int origin, int destination, DateTime dateTime, bool isDepart) { try { GetRoutesResponse getRoutesResponse = await _rail.GetRoutes((E_Station)origin, (E_Station)destination, dateTime, isDepart); IEnumerable <TrainAvailableChairsResponse> chairsResponses = await GetChairsResponses(getRoutesResponse); IEnumerable <Models.ViewModels.Route> routes = _railRouteBuilder.BuildRoutes(getRoutesResponse, chairsResponses); if (routes == null || !routes.Any()) { return(PartialView("_NoRoutes")); } Models.ViewModels.Route routeToShow = Tools.SelectRoute(routes, dateTime, isDepart); ViewBag.ToShow = routeToShow != null ? routeToShow.Index : 0; return(PartialView("_Routes", routes)); } catch (Exception ex) { _logger.LogCritical(ex, $"Failed Routes({origin}, {destination}, {dateTime:yyyy-MM-ddTHH:mm}, {isDepart})"); return(PartialView("Error", new ErrorViewModel() { Exception = ex })); } }
public async Task <IActionResult> Advanced(int origin, int destination, DateTime dateTime, bool isDepart) { try { DateTime nextWeek = dateTime.AddDays(7); GetRoutesResponse getNextWeekRoutesResponse = await _rail.GetRoutes((E_Station)origin, (E_Station)destination, nextWeek, isDepart); IEnumerable <TrainAvailableChairsResponse> nextWeekChairsResponses = await GetChairsResponses(getNextWeekRoutesResponse); IEnumerable <Models.ViewModels.Route> nextWeekRoutes = _railRouteBuilder.BuildRoutes(getNextWeekRoutesResponse, nextWeekChairsResponses); if (nextWeekRoutes == null || !nextWeekRoutes.Any()) { return(PartialView("_NoRoutes")); } Models.ViewModels.Route selectedRoute = Tools.SelectRoute(nextWeekRoutes, nextWeek, isDepart); DateTime nowNextWeek = _time.NowInLocal().AddDays(7); Models.ViewModels.Train selectedTrain = selectedRoute.Trains.FirstOrDefault(x => x.DestinationStop.StopTime.FirstOrDefault() >= nowNextWeek); Stop selectedStop = selectedTrain.Stops.FirstOrDefault(x => x.StopTime.FirstOrDefault() >= nowNextWeek); E_Station currentOrigin = selectedStop.Station; if (currentOrigin == (E_Station)destination) { int selectedIndex = selectedTrain.Stops.IndexOf(selectedStop); selectedStop = selectedTrain.Stops.ElementAtOrDefault(selectedIndex - 1); currentOrigin = selectedStop.Station; } GetRoutesResponse getRoutesResponse = await _rail.GetRoutes(currentOrigin, (E_Station)destination, dateTime, isDepart); IEnumerable <TrainAvailableChairsResponse> chairsResponses = await GetChairsResponses(getRoutesResponse); IEnumerable <Models.ViewModels.Route> routes = _railRouteBuilder.BuildRoutes(getRoutesResponse, chairsResponses); routes = routes.Where(x => nextWeekRoutes.Contains(x)); if (routes == null || !routes.Any()) { return(PartialView("_NoRoutes")); } foreach (Models.ViewModels.Route route in routes) { Stop ori = route.Trains.FirstOrDefault().Stops.FirstOrDefault(x => x.Station == (E_Station)origin); if (ori != null) { route.Trains.FirstOrDefault().OrigintStop = ori; } } Models.ViewModels.Route routeToShow = Tools.SelectRoute(routes, dateTime, isDepart); ViewBag.ToShow = routeToShow != null ? routeToShow.Index : 0; return(PartialView("_Routes", routes)); } catch (Exception ex) { _logger.LogCritical(ex, $"Failed Advanced({origin}, {destination}, {dateTime:yyyy-MM-ddTHH:mm}, {isDepart})"); return(PartialView("Error", new ErrorViewModel() { Exception = ex })); } }