Пример #1
0
        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);
        }
Пример #2
0
 private void InitRaceFilterViewModel(ref RaceFilterViewModel filterViewModel, bool isList)
 {
     if (isList)
     {
         InitBaseFilterViewModel(filterViewModel);
     }
 }
Пример #3
0
        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));
        }
Пример #7
0
        //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));
        }
Пример #8
0
        public ActionResult ResetDurations()
        {
            var model = new RaceFilterViewModel();

            // model.FinishHigh = new TimeSpan(10, 0, 0);

            return(PartialView("~/Views/Shared/_FilterByDuration.cshtml", model));
        }
Пример #9
0
        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));
        }
Пример #10
0
        /// <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);
        }
Пример #12
0
        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));
        }
Пример #13
0
        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));
        }
Пример #14
0
        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));
        }
Пример #15
0
        //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));
        }
Пример #16
0
        //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;
            }
        }
Пример #17
0
        //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));
        }
Пример #18
0
        /// <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());
        }
Пример #19
0
        // <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));
        }
Пример #20
0
        /// <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));
        }
Пример #21
0
        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));
        }
Пример #25
0
        /// <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));
        }
Пример #26
0
        // 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));
        }
Пример #29
0
        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"));
        }