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); }
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); }
/// <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))); }
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); }