private HypotheticalsViewModel GetEstimatedTime(RaceFilterViewModel filter) { var modelView = new HypotheticalsViewModel(); modelView.Filter = filter; string raceId = filter.SelectedRaceIds.First(); var athletes = _RaceService.GetAthletes( new BasicRaceCriteria { SelectedRaceIds = new string[] { raceId }, SelectedAgeGroupIds = AgeGroup.Expand(filter.SelectedAgeGroupIds), SelectedGenderIds = Gender.Expand(filter.SelectedGenderIds) }, filter ); modelView.Triathletes = athletes; modelView.Stats.Add(GetStats(athletes, filter.AvailableRaces.Single(r => r.RaceId == raceId))); modelView.SelectedSkillLevel = filter.SkillLevel; //TO-DO: fix this up so it removes the redundancy return(modelView); }
private void InitRaceFilterViewModel(ref RaceFilterViewModel filterViewModel, bool isList) { if (isList) { InitBaseFilterViewModel(filterViewModel); } }
public PartialViewResult DisplayFinishHistogram(SimpleFilterViewModel model) { var filter = new RaceFilterViewModel(model); var viewModel = GetEstimatedTime(filter); return(PartialView("_FinishHistogram", viewModel)); }
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 JsonResult GetAthletes() { var filter = new RaceFilterViewModel(CurrentFilter); //we may be able to pass this via the datatable options - check it out var search = Request.Form.GetValues("search[value]").FirstOrDefault(); var draw = Request.Form.GetValues("draw").FirstOrDefault(); var start = Request.Form.GetValues("start").FirstOrDefault(); var length = Request.Form.GetValues("length").FirstOrDefault(); int pageSize = length != null?Convert.ToInt32(length) : 0; int skip = start != null?Convert.ToInt32(start) : 0; int recordsTotal = 0; Trace.TraceInformation("GetAthletes-1"); var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault(); if (String.IsNullOrEmpty(sortColumn)) { sortColumn = "Finish"; } var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault(); string sort = null; if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir))) { sort = sortColumn + " " + sortColumnDir; } List <Triathlete> athletes; Trace.TraceInformation("GetAthletes-sort&search:" + sort + "--" + search + " -- "); athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter, sort, search); Trace.TraceInformation("GetAthletes-2"); recordsTotal = athletes.Count(); Trace.TraceInformation("GetAthletes-2.1"); var data = athletes.Skip(skip).Take(pageSize).ToList(); Trace.TraceInformation("GetAthletes-3"); var result = new JsonNetResult(); result.Data = new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data }; Trace.TraceInformation("GetAthletes-4"); return(result); }
public ActionResult Compare(SimpleFilterViewModel model) { RaceFilterViewModel filter; //the following is a workaround for some flawed javascript that doesn't always pass the params we need if (String.IsNullOrEmpty(model.Races)) { var simple = SimpleFilterViewModel.Create(Request.UrlReferrer.Query); if (!String.IsNullOrEmpty(model.selectedAthletes)) { simple.selectedAthletes = model.selectedAthletes; return(RedirectToAction("Compare", simple)); } //this is to keep from a null exception filter = new RaceFilterViewModel(simple); } else { filter = new RaceFilterViewModel(model); } var viewmodel = new TriathletesCompareViewModel(); viewmodel.Filter = filter; //order them from fastest to slowest so the view can know who was first,second, last, etc. viewmodel.Triathletes = _DBContext.Triathletes.Include("RequestContext.Race").OrderBy(t => t.Finish) .Where(t => filter.SelectedAthleteIds.Contains(t.TriathleteId)); viewmodel.Stats = GetStats(viewmodel.Triathletes.ToList()); return(View("~/Views/Triathletes/Compare.cshtml", viewmodel)); }
//called from one controller to another public ActionResult ViewResults(SimpleFilterViewModel model) { CurrentFilter = model; //save for race sort var filter = new RaceFilterViewModel(model); return(DisplayResultsView(filter)); }
public ActionResult ResetDurations() { var model = new RaceFilterViewModel(); // model.FinishHigh = new TimeSpan(10, 0, 0); return(PartialView("~/Views/Shared/_FilterByDuration.cshtml", model)); }
public PartialViewResult DisplaySwimTime(SimpleFilterViewModel model) { model.ClearDuration(); //we do this just in case they have values from the duration filters on the page var filter = new RaceFilterViewModel(model); var modelView = GetEstimatedTime(filter); modelView.Filter = filter; return(PartialView("_EstSwim", modelView)); }
/// <summary> /// Called while paging through athletes. We need to return just the partial view of athletes /// </summary> /// <param name="page"></param> /// <param name="model"></param> /// <returns></returns> // public PartialViewResult DisplayPagedRaces(int page, string sortOrder, SimpleFilterViewModel model) { var filter = new RaceFilterViewModel(model, sortOrder); page = page > 0 ? page : 1; filter.AvailableRaces = filter.AvailableRaces.ToPagedList(page, _PageSize); //max xx per page return(PartialView("~/Views/Shared/_OnePageOfRaces.cshtml", filter)); }
private IPagedList <Triathlete> GetOnePageAthletes(RaceFilterViewModel filter) { int page = 1; int pageSize = 20; var athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter); var onePageOfAthletes = athletes.ToPagedList(page, pageSize); //max xx per page return(onePageOfAthletes); }
public PartialViewResult RaceDistanceToggle(string distance) { var viewModel = new RaceFilterViewModel(distance); int page = 1; viewModel.AvailableRaces = viewModel.AvailableRaces.ToPagedList(page, _PageSize); //max xx per page return(PartialView("~/Views/Shared/_OnePageOfRaces.cshtml", viewModel)); }
public ActionResult List(RaceFilterViewModel filterViewModel) { InitRaceFilterViewModel(ref filterViewModel, true); var filter = Mapper.Map <RaceFilter>(filterViewModel); RaceItems list = _raceRepository.GetRaceItems(UserContext.User.Id, UserContext.User.OrganizationId, filter); RaceItemsViewModel viewModel = Mapper.Map <RaceItemsViewModel>(list); viewModel.Filter = filterViewModel; InitListViewModel(viewModel, list); return(View(Mvc.View.Race.List, viewModel)); }
public PartialViewResult RacesSearchByName(string SelectedRaceNames /*this is the shortname*/) { var races = _RaceService.GetRacesByGroupName(SelectedRaceNames); var viewModel = new RaceFilterViewModel(); viewModel.AvailableRaces = races; int page = 1; viewModel.AvailableRaces = viewModel.AvailableRaces.ToPagedList(page, _PageSize); //max xx per page return(PartialView("~/Views/Shared/_OnePageOfRaces.cshtml", viewModel)); }
//called from actions links in the Action Bar using the GET verb public ActionResult Display(SimpleFilterViewModel simpleFilter) { CurrentFilter = simpleFilter;//save for sort //the following is a workaround for some flawed javascript that doesn't always pass the params we need if (String.IsNullOrEmpty(simpleFilter.Races)) { var parms = HttpUtility.ParseQueryString(Request.UrlReferrer.Query); simpleFilter.Races = parms["RaceId"]; } var viewModel = new RaceFilterViewModel(simpleFilter); return(DisplayResultsView(viewModel)); }
//filter the list of athletes by agegroup, gender, and range protected List <Triathlete> GetFilteredAthletes(List <Triathlete> allAthletes, RaceFilterViewModel filter, string sort = null, string search = null) { try { Trace.TraceInformation("GetFilteredAthletes-1"); var selectedAgeGroupIds = AgeGroup.Expand(filter.SelectedAgeGroupIds); var selectedGenderIds = Gender.Expand(filter.SelectedGenderIds); var athletes = allAthletes.Where( a => selectedAgeGroupIds.Contains(a.RequestContext.AgeGroupId) && selectedGenderIds.Contains(a.RequestContext.GenderId)); Trace.TraceInformation("GetFilteredAthletes-1a"); if (!string.IsNullOrEmpty(sort)) { athletes = athletes.AsQueryable().OrderBy(sort); } Trace.TraceInformation("GetFilteredAthletes-1b"); if (!String.IsNullOrEmpty(search)) { Trace.TraceInformation("GetFilteredAthletes-Search"); athletes = athletes.Where(a => a.Name.ToLower().Contains(search.ToLower())).ToList(); } Trace.TraceInformation(String.Format("GetFilteredAthletes-2 athlete count {0}", athletes.Count())); var list = athletes.ToList(); Trace.TraceInformation("GetFilteredAthletes-3"); var result = new BasicFilterProvider(list, filter).GetAthletes(); return(result); } catch (Exception ex) { Trace.TraceError(ex.Message); throw ex; } }
//search based on race conditions RENAME THIS METHOD public ActionResult SearchRaces(FormCollection form) { var searchString = new StringBuilder(); if (!String.IsNullOrEmpty(form["SelectedSwimTags"])) { searchString.Append(form["SelectedSwimTags"]); } if (!String.IsNullOrEmpty(form["SelectedBikeTags"])) { if (searchString.Length > 0) { searchString.AppendFormat(", {0}", (form["SelectedBikeTags"])); } else { searchString.Append(form["SelectedBikeTags"]); } } if (!String.IsNullOrEmpty(form["SelectedRunTags"])) { if (searchString.Length > 0) { searchString.AppendFormat(", {0}", (form["SelectedRunTags"])); } else { searchString.Append(form["SelectedRunTags"]); } } if (String.IsNullOrEmpty(searchString.ToString())) { return(HttpNotFound()); } var tagIds = searchString.ToString().Split(',').Select(int.Parse).ToList(); var races = _RaceService.GetRacesByTagId(tagIds); var viewModel = new RaceFilterViewModel(); viewModel.AvailableRaces = races.ToPagedList(pageNumber: 1, pageSize: _PageSize); //max xx per page return(PartialView("_SearchResults", viewModel)); }
/// <summary> /// Get the request context Ids for this filter /// </summary> /// <param name="filter"></param> /// <returns></returns> private List <int> GetRequestIds(RaceFilterViewModel filter) { string[] raceIds = filter.SelectedRaceIds.ToArray(); int[] ageGroupIds = filter.SelectedAgeGroupIds.ToArray(); int[] genderIds = filter.SelectedGenderIds.ToArray(); var query = _DBContext.RequestContext .Where(r => raceIds.Contains(r.RaceId)) .Where(r => ageGroupIds.Contains(r.AgeGroupId)) .Where(r => genderIds.Contains(r.GenderId)) .Select(r => r.RequestContextId); return(query.ToList()); }
// <summary> /// Given the run range, provide estimates. /// </summary> /// <param name="model"></param> /// <returns></returns> public PartialViewResult DisplayRunFinish(SimpleFilterViewModel model) { model.bikehightimevalue = null; //clear the values that we want to ignore in this hypothetical (everything but run) model.bikelowtimevalue = null; model.swimhightimevalue = null; model.swimlowtimevalue = null; var filter = new RaceFilterViewModel(model); var modelView = GetEstimatedTime(filter); modelView.Filter = filter; modelView.SelectedSplit = "RunFinish";//this value gets used by the generic _finishHistogram and also Hypotheth/Index to distinguish the Divs return(PartialView("_GivenRunRangeFinish", modelView)); }
/// <summary> /// Given the bike range, provide estimates for run /// </summary> /// <param name="model"></param> /// <returns></returns> public PartialViewResult DisplayBikeRun(SimpleFilterViewModel model) { model.runhightimevalue = null; //clear the values that we want to ignore in this hypothetical (everything but bike) model.runlowtimevalue = null; model.swimhightimevalue = null; model.swimlowtimevalue = null; var filter = new RaceFilterViewModel(model); var modelView = GetEstimatedTime(filter); modelView.SelectedSplit = "BikeRun"; //this value gets used by the generic _finishHistogram modelView.Filter = filter; return(PartialView("_GivenBikeRangeRun", modelView)); }
private HistogramViewModel CreateHistogramViewModel(RaceFilterViewModel filter) { var viewModel = new HistogramViewModel(); viewModel.Filter = filter; var athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter); var calculator = new TriStatsCalculator(athletes); viewModel.SwimMedian = calculator.TimeSpanMedian("Swim"); viewModel.BikeMedian = calculator.TimeSpanMedian("Bike"); viewModel.RunMedian = calculator.TimeSpanMedian("Run"); viewModel.FinishMedian = calculator.TimeSpanMedian("Finish"); viewModel.Triathletes = athletes; return(viewModel); }
private ActionResult DisplayPagedResults(int page, RaceFilterViewModel filter) { page = page > 0 ? page : 1; int pageSize = 20; var athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter); var onePageOfAthletes = athletes.ToPagedList(page, pageSize); //max xx per page var viewmodel = new TriathletesViewModel(); viewmodel.TotalCount = athletes.Count; viewmodel.Triathletes = onePageOfAthletes; viewmodel.Filter = filter; return(PartialView("_TriathletesList", viewmodel)); }
protected override ActionResult DisplayResultsView(RaceFilterViewModel filter) { int page = 1; int pageSize = 20; var athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter); var onePageOfAthletes = athletes.ToPagedList(page, pageSize); //max xx per page var viewmodel = new TriathletesViewModel(); viewmodel.TotalCount = athletes.Count; viewmodel.Triathletes = onePageOfAthletes; viewmodel.Filter = filter; return(View("List", viewmodel)); }
/// <summary> /// Called while paging through athletes. We need to return just the partial view of athletes /// </summary> /// <param name="page"></param> /// <param name="model"></param> /// <returns></returns> // public PartialViewResult DisplayPagedAthletes(int page, SimpleFilterViewModel model) { var filter = new RaceFilterViewModel(model); page = page > 0 ? page : 1; int pageSize = 20; var athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter); var onePageOfAthletes = athletes.ToPagedList(page, pageSize); //max xx per page var viewmodel = new TriathletesViewModel(); viewmodel.TotalCount = athletes.Count; viewmodel.Triathletes = onePageOfAthletes; viewmodel.Filter = filter; return(PartialView("~/Views/Shared/_OnePageOfAthletesImproved.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)); }
// GET: Races public ActionResult Index(string sortOrder, string distance) { int page = 1; //default to 140.6 if (String.IsNullOrEmpty(distance)) { distance = "140.6"; } var viewModel = new RaceFilterViewModel(distance: distance, sortOrder: sortOrder); var races = viewModel.AvailableRaces; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; viewModel.AvailableRaces = races.ToPagedList(page, _PageSize); //max xx per page return(View(viewModel)); }
private ActionResult DisplayResultsView(RaceFilterViewModel filter, string viewName) { var viewModel = new CompareBikeRunViewModel(); viewModel.Filter = filter; var athletes = GetFilteredAthletes(GetAllAthletesForRaces(filter), filter); var calc = new TriStatsCalculator(athletes); viewModel.BikeMedian = calc.TimeSpanMedian("Bike"); viewModel.RunMedian = calc.TimeSpanMedian("Run"); viewModel.Triathletes = athletes; PartitionAthletes(viewModel); viewModel.Stats.Add(GetStats(athletes)); return(View(viewName, viewModel)); }
protected override ActionResult DisplayResultsView(RaceFilterViewModel filter) { var viewModel = new AgeGroupCompareViewModel(); viewModel.Filter = filter; List <Triathlete> allAthletes = GetAllAthletesForRaces(filter); var stopwatch = new Stopwatch(); stopwatch.Start(); var selectedGenderIds = Gender.Expand(filter.SelectedGenderIds); var resultingAthletes = new List <Triathlete>(); //calculating each selected age groups so that we can do the same when we draw the chart foreach (var agId in AgeGroup.Expand(viewModel.Filter.SelectedAgeGroupIds)) //collect the stats for each age group { var athletesPerAG = allAthletes.Where( a => a.RequestContext.AgeGroupId == agId && selectedGenderIds.Contains(a.RequestContext.GenderId)).ToList(); var filteredAthletes = new BasicFilterProvider(athletesPerAG, filter).GetAthletes(); resultingAthletes.AddRange(filteredAthletes); var stats = GetStats(filteredAthletes); stats.AgeGroupId = agId; viewModel.Stats.Add(stats); } Trace.TraceInformation("AgeGroupCompare Calulating all took: " + stopwatch.Elapsed); stopwatch.Stop(); viewModel.Triathletes = resultingAthletes; return(View("Compare", viewModel)); }
protected List <Triathlete> GetAllAthletesForRaces(RaceFilterViewModel filter) { var stopwatch = new Stopwatch(); stopwatch.Start(); var allAthletes = new List <Triathlete>(); var allAgeGroupIds = AgeGroup.Expand(new int[] { 0 }); var allGenderIds = Gender.Expand(new int[] { 0 }); //assuming a cache contains athletes for each race, get all athletes for each racfil foreach (var raceId in filter.SelectedRaceIds) { if (String.IsNullOrEmpty(raceId))//i've seen this occassionally with a back button { continue; } var athletes = _RaceService.GetAthletes( new BasicRaceCriteria { SelectedRaceIds = { raceId }, SelectedAgeGroupIds = allAgeGroupIds, SelectedGenderIds = allGenderIds } ); if (athletes.Count > 0) { allAthletes.AddRange(athletes); } } Trace.TraceInformation("BaseCcontroller GetAllRaceInfo took: " + stopwatch.Elapsed); stopwatch.Reset(); return(allAthletes); }
//called from actions links in the Action Bar public ActionResult DisplayQuartiles(SimpleFilterViewModel model) { var filter = new RaceFilterViewModel(model); return(DisplayResultsView(filter, "Quartiles")); }