示例#1
0
        public void PopulateTotalDistances(IndividualMetrics metrics)
        {
            //Total Distances by Season
            var startDate = new DateTime(2010, 1, 1);

            DistanceTotals = new List <TrainingSeason>();
            while (startDate < DateTime.Now)
            {
                var seasonMiles = metrics.Runs.Where(r => r.Date >= startDate && r.Date < startDate.AddMonths(6)).Select(r => r.Distance.ToMiles(r.Unit.Name)).ToList().Sum();
                seasonMiles += metrics.TreadmillRuns.Where(r => r.Date >= startDate && r.Date < startDate.AddMonths(6)).Select(r => r.Distance.ToMiles(r.Unit.Name)).ToList().Sum();
                if (seasonMiles > 0)
                {
                    var trainingSeason =
                        new TrainingSeason {
                        Miles = seasonMiles.ToString(CultureInfo.InvariantCulture)
                    };

                    var season = startDate.Month < 6 ? "Spring" : "Fall";
                    trainingSeason.Season = season + " " + startDate.Year;

                    DistanceTotals.Add(trainingSeason);
                }
                startDate = startDate.AddMonths(6);
            }
            DistanceTotals.Reverse();
        }
示例#2
0
        public void PopulateFastestRuns(IndividualMetrics metrics)
        {
            //5k Calculations
            var fastest5k = metrics.FastestRun(RaceDistance.Miles5k);

            Fastest5kRace = fastest5k.Title;
            Fastest5kDate = fastest5k.Date.ToShortDateString();
            Fastest5kTime = fastest5k.Duration;

            //10k Calculations
            var fastest10k = metrics.FastestRun(RaceDistance.Miles10k);

            Fastest10kRace = fastest10k.Title;
            Fastest10kDate = fastest10k.Date.ToShortDateString();
            Fastest10kTime = fastest10k.Duration;

            //Half Calculations
            var fastestHalf = metrics.FastestRun(RaceDistance.MilesHalfMarathon);

            FastestHalfRace = fastestHalf.Title;
            FastestHalfDate = fastestHalf.Date.ToShortDateString();
            FastestHalfTime = fastestHalf.Duration;

            //Marathon Calculations
            var fastestMarathon = metrics.FastestRun(RaceDistance.MilesMarathon);

            FastestMarathonRace = fastestMarathon.Title;
            FastestMarathonDate = fastestMarathon.Date.ToShortDateString();
            FastestMarathonTime = fastestMarathon.Duration;



            //Goals
            decimal Total5kMinutesDifference   = Starting5kTime.ToMinutes() - Goal5kTime.ToMinutes();
            decimal Current5kMinutesDifference = fastest5k.Duration.ToMinutes() - Goal5kTime.ToMinutes();

            Current5kMinutesDifference = Current5kMinutesDifference < 0 ? 0 : Current5kMinutesDifference;
            Fastest5kGoalPercent       = Convert.ToInt32((1 - (Current5kMinutesDifference / Total5kMinutesDifference)) * 100);

            decimal Total10kMinutesDifference   = Starting10kTime.ToMinutes() - Goal10kTime.ToMinutes();
            decimal Current10kMinutesDifference = fastest10k.Duration.ToMinutes() - Goal10kTime.ToMinutes();

            Current10kMinutesDifference = Current10kMinutesDifference < 0 ? 0 : Current10kMinutesDifference;
            Fastest10kGoalPercent       = Convert.ToInt32((1 - (Current10kMinutesDifference / Total10kMinutesDifference)) * 100);

            decimal TotalHalfMinutesDifference   = StartingHalfTime.ToMinutes() - GoalHalfTime.ToMinutes();
            decimal CurrentHalfMinutesDifference = fastestHalf.Duration.ToMinutes() - GoalHalfTime.ToMinutes();

            CurrentHalfMinutesDifference = CurrentHalfMinutesDifference < 0 ? 0 : CurrentHalfMinutesDifference;
            FastestHalfGoalPercent       = Convert.ToInt32((1 - (CurrentHalfMinutesDifference / TotalHalfMinutesDifference)) * 100);

            decimal TotalMarathonMinutesDifference   = StartingMarathonTime.ToMinutes() - GoalMarathonTime.ToMinutes();
            decimal CurrentMarathonMinutesDifference = fastestMarathon.Duration.ToMinutes() - GoalMarathonTime.ToMinutes();

            CurrentMarathonMinutesDifference = CurrentMarathonMinutesDifference < 0 ? 0 : CurrentMarathonMinutesDifference;
            FastestMarathonGoalPercent       = Convert.ToInt32((1 - (CurrentMarathonMinutesDifference / TotalMarathonMinutesDifference)) * 100);
        }
        // GET: Profile
        public ActionResult Index(string name)
        {
            var viewModel = new ProfileViewModel {
                ProfileName = name
            };

            var metrics = new IndividualMetrics(name);

            viewModel.PopulateFastestRuns(metrics);
            viewModel.PopulateTotalDistances(metrics);
            viewModel.PopulateBestPaces(metrics);
            viewModel.PopulateTimeline(metrics);

            return(View(viewModel));
        }
示例#4
0
        public void PopulateTimeline(IndividualMetrics metrics)
        {
            //TODO: pull these out somewhere
            //Timeline views
            var races = metrics.Activities.Where(e => !String.IsNullOrEmpty(e.Title) && e.Date < DateTime.Now && !String.IsNullOrEmpty(e.Duration)).OrderByDescending(e => e.Date).Take(10);

            RecentRaces = new List <TimelineEvent>();
            foreach (var race in races)
            {
                var myEvent = new TimelineEvent();
                var speed   = Math.Round((race.Duration.ToMinutes() / race.Distance.ToMiles(race.Unit.Name)), 2);
                myEvent.Pace     = speed.ToDuration();
                myEvent.Time     = race.Duration;
                myEvent.Distance = race.Distance.ToMiles(race.Unit.Name).ToFriendlyDistance();
                myEvent.Race     = race.Title;
                myEvent.Notes    = race.Notes;

                RecentRaces.Add(myEvent);
            }
        }
示例#5
0
        public void PopulateBestPaces(IndividualMetrics metrics)
        {
            //Best Paces calculations
            BestPaces = new List <PaceEvent>();
            double[] importantDistances = { 3.1, 5, 6.2, 8, 9.3, 10, 12.4, 13.1, 15.5, 20, 26.2, 31.1, 50, 100 };
            foreach (var distance in importantDistances)
            {
                var myEvent = new PaceEvent {
                    Distance = distance.ToString(CultureInfo.InvariantCulture)
                };

                var bestRun = metrics.Runs.Where(r => r.Distance.ToMiles(r.Unit.Name) >= (decimal)distance).OrderBy(r => r.Duration.ToMinutes() / r.Distance.ToMiles(r.Unit.Name)).FirstOrDefault();
                if (bestRun != null)
                {
                    var speed = Math.Round((bestRun.Duration.ToMinutes() / bestRun.Distance.ToMiles(bestRun.Unit.Name)), 2);
                    myEvent.Pace = speed.ToDuration();
                    myEvent.Time = (distance * (double)speed).ToDuration();
                    BestPaces.Add(myEvent);
                }
            }
        }