예제 #1
0
        private ColumnChart GetLastWeekPace(int x)
        {
            if (x > Activities.Count)
            {
                x = Activities.Count;
            }

            ColumnChart chart = new ColumnChart("weekpace", 200);
            var         weeks = Activities.OrderByDescending(run => run.Date).GroupBy(run => new { run.Date.Year, run.Week }).Take(x).Reverse().ToList();

            ColumnChart.DataSet pace = new ColumnChart.DataSet("pace");

            foreach (var week in weeks)
            {
                double avg_speed = week.Average <HalbotActivity>(run => run.Speed);
                pace.Add(week.First <HalbotActivity>().Week.ToString(), $"{HalbotActivity.PaceForSpeed(avg_speed)}", avg_speed * avg_speed * avg_speed * avg_speed);
            }

            chart.AddDataSet(pace);
            return(chart);
        }
예제 #2
0
        public string DistanceCategory(HalbotActivity activity)
        {
            var category = "xshort";

            if (activity.Distance > 5000)
            {
                category = "short";
            }
            if (activity.Distance > 12000)
            {
                category = "medium";
            }
            if (activity.Distance > 22000)
            {
                category = "long";
            }
            if (activity.Distance > 35000)
            {
                category = "xlong";
            }

            return(category);
        }
예제 #3
0
        /// <summary>
        /// helper for getting weekly stats
        /// </summary>
        private void _buildWeekStats()
        {
            DateTime now = DateTime.Now;

            //get selection of activities per week
            var this_week_selection = Activities.Where(a => a.Date.Year == now.Year).Where(b => b.Week == HalbotActivity.WeekOfYear(now));
            var last_week_selection = Activities.Where(a => a.Date.Year == now.Year).Where(b => b.Week == HalbotActivity.WeekOfYear(now) - 1);

            if (HalbotActivity.WeekOfYear(now) == 1)
            {
                last_week_selection = Activities.Where(a => a.Date.Year == now.Year - 1).Where(b => b.Week == 52);
            }

            //create list and populate
            Week = new List <Tuple <string, string, string> >();
            Week.Add(new Tuple <String, String, String>("Activities:", last_week_selection.Count().ToString(), this_week_selection.Count().ToString()));
            Week.Add(new Tuple <string, string, string>("Total effort:", $"{last_week_selection.Sum(e => e.Effort)}",
                                                        $"{this_week_selection.Sum(e => e.Effort)}"));
            Week.Add(new Tuple <String, String, String>("Total distance:",
                                                        $"{Math.Round(last_week_selection.Sum(c => c.Distance) / 1000, 2)}km",
                                                        $"{Math.Round(this_week_selection.Sum(c => c.Distance) / 1000, 2)}km"));
            Week.Add(new Tuple <String, String, String>("Total climb:",
                                                        $"{Math.Round(last_week_selection.Sum(c => c.Climb))}m",
                                                        $"{Math.Round(this_week_selection.Sum(c => c.Climb))}m"));
            Week.Add(new Tuple <String, String, String>("Average effort:", _averageEffort(last_week_selection), _averageEffort(this_week_selection)));
            Week.Add(new Tuple <String, String, String>("Average pace:", _averagePace(last_week_selection), _averagePace(this_week_selection)));
            Week.Add(new Tuple <String, String, String>("Average heartrate:", _averageHeartrate(last_week_selection), _averageHeartrate(this_week_selection)));
            Week.Add(new Tuple <String, String, String>("Average distance:", _averageDistance(last_week_selection), _averageDistance(this_week_selection)));
        }
예제 #4
0
        public ChartsWorkloadModel(List <HalbotActivity> activities)
        {
            //initialize data
            Activities = activities;
            var now = DateTime.Now;

            // create chart
            CircleChart = new CircleChart("TestCircle", 900, 600);

            // create dataset
            var data1 = new CircleChart.DataSet("dataset", 120, 160, 250, 450);     // heartrate bounds: 110 - 190, speed bounds 2(m/s) - 5(m/s)

            // previous weeks
            var previousWeeksSelection = Activities.Where(a => a.Date.Year == now.Year).Where(b => b.Week < HalbotActivity.WeekOfYear(now) - 1);

            foreach (var activity in previousWeeksSelection)
            {
                data1.Add(Convert.ToInt32(activity.Heartrate == 0 ? 140 : activity.Heartrate), Convert.ToInt32(activity.Speed * 100), Convert.ToInt32(activity.Distance * 0.002), "#cccccc");
            }

            // add last week
            var lastWeekSelection = Activities.Where(a => a.Date.Year == now.Year).Where(b => b.Week == HalbotActivity.WeekOfYear(now) - 1);

            foreach (var activity in lastWeekSelection)
            {
                data1.Add(Convert.ToInt32(activity.Heartrate == 0 ? 140 : activity.Heartrate), Convert.ToInt32(activity.Speed * 100), Convert.ToInt32(activity.Distance * 0.002), "#0099cc");
            }

            // add the current week
            var thisWeekSelection = Activities.Where(a => a.Date.Year == now.Year).Where(b => b.Week == HalbotActivity.WeekOfYear(now));

            foreach (var activity in thisWeekSelection)
            {
                data1.Add(Convert.ToInt32(activity.Heartrate == 0 ? 140 : activity.Heartrate), Convert.ToInt32(activity.Speed * 100), Convert.ToInt32(activity.Distance * 0.002), "gold");
            }

            // redraw the last activity in a highlighted color
            var lastActivity = Activities.OrderByDescending(a => a.Date).FirstOrDefault();

            if (lastActivity != null)
            {
                data1.Add(Convert.ToInt32(lastActivity.Heartrate == 0 ? 140 : lastActivity.Heartrate), Convert.ToInt32(lastActivity.Speed * 100), Convert.ToInt32(lastActivity.Distance * 0.002), "#2db92d");
            }

            CircleChart.SetDataSet(data1);
        }