protected override ActionResult DisplayResultsView(RaceFilterViewModel filter) { var viewModel = new TriStatsViewModel(); viewModel.Filter = filter; List <Triathlete> allAthletes = GetAllAthletesForRaces(filter); var selectedAgeGroupIds = AgeGroup.Expand(filter.SelectedAgeGroupIds); var selectedGenderIds = Gender.Expand(filter.SelectedGenderIds); var athletes = new List <Triathlete>(); foreach (string raceId in filter.SelectedRaceIds) { var athletesPerRace = allAthletes.Where( a => a.RequestContext.RaceId.Equals(raceId, System.StringComparison.CurrentCultureIgnoreCase) && selectedAgeGroupIds.Contains(a.RequestContext.AgeGroupId) && selectedGenderIds.Contains(a.RequestContext.GenderId) ).ToList(); // new BasicDurationFilter() { } //bypass the user's duration filter so we can get all athletes, including DNFs athletes.AddRange(athletesPerRace); viewModel.Stats.Add( GetStats(athletesPerRace, filter.AvailableRaces.Single(r => r.RaceId == raceId))); } viewModel.Triathletes = athletes; return(View("Compare", viewModel)); }
public ActionResult Compare() { var viewmodel = new TriStatsViewModel(); viewmodel.Filter = new RaceFilterViewModel(); return(View(viewmodel)); }
/// <summary> /// DisplayReview() - In this version the group of athletes are given to us. We just need to calulate the stats and return the view /// </summary> /// <param name="athletes"></param> /// <param name="filter"></param> /// <returns></returns> protected override ActionResult DisplayResultsView(List <Triathlete> athletes, RaceFilterViewModel filter) { var viewModel = new TriStatsViewModel(); viewModel.Filter = filter; foreach (var raceId in filter.SelectedRaceIds) { var subset = athletes.Where(a => a.Race.RaceId == raceId).ToList(); var stats = GetStats(subset, filter. AvailableRaces.Single(r => r.RaceId == raceId)); //calculate the stats based on each race viewModel.Stats.Add(stats); } return(View("~/Views/TriStats/Details.cshtml", viewModel)); }
/// <summary> /// DisplayResultsView() - In this version we must iterate through each race, get the athletes, and calculate their stats /// </summary> /// <param name="page"></param> /// <param name="raceIds"></param> /// <param name="agegroupIds"></param> /// <param name="genderIds"></param> /// <returns></returns> protected override ActionResult DisplayResultsView(RaceFilterViewModel filter) { var viewModel = new TriStatsViewModel(); viewModel.Filter = filter; List <Triathlete> allAthletes = GetAllAthletesForRaces(filter); var selectedAgeGroupIds = AgeGroup.Expand(filter.SelectedAgeGroupIds); var selectedGenderIds = Gender.Expand(filter.SelectedGenderIds); foreach (string raceId in filter.SelectedRaceIds) //get stats for each race in order to compare them rather than to combine their stats { var athletes = GetFilteredAthletes(raceId, allAthletes, filter); var stats = GetStats(athletes, _DBContext.Races.Include("Conditions").Single(r => r.RaceId.Equals(raceId, StringComparison.CurrentCultureIgnoreCase))); viewModel.Stats.Add(stats); } return(View("~/Views/TriStats/Details.cshtml", viewModel)); }
public ActionResult DisplayResultsViewFromSource() //for admin purposes { var ctx = TempData["requestContext"] as RequestContext; var viewModel = new TriStatsViewModel(); viewModel.Filter = new RaceFilterViewModel(); viewModel.Filter.SelectedRaceIds = new List <string>() { ctx.RaceId }; viewModel.Filter.SelectedAgeGroupIds = new List <int>() { ctx.AgeGroupId }; viewModel.Filter.SelectedGenderIds = new List <int>() { ctx.GenderId }; var athletes = _RaceService.GetAthletesFromSource( new BasicRaceCriteria { SelectedRaceIds = viewModel.Filter.SelectedRaceIds, SelectedAgeGroupIds = viewModel.Filter.SelectedAgeGroupIds, SelectedGenderIds = viewModel.Filter.SelectedGenderIds } ); var stats = GetStats(athletes, _DBContext.Races.Include("Conditions").Single(r => r.RaceId == ctx.RaceId)); viewModel.Stats.Add(stats); return(View("~/Views/TriStats/Details.cshtml", viewModel)); }