private void BuildWeightPerWorkout() { var data = new Dictionary <Exercise, List <DataPoint> > (); // prepare data foreach (var workout in Workouts) { var exercise = Exercises.FirstOrDefault(x => x.ExerciseId == workout.ExerciseId); if (exercise == null) { continue; } var defaultValue = default(KeyValuePair <Exercise, List <DataPoint> >); var item = data.FirstOrDefault(x => x.Key == exercise); if (item.Equals(defaultValue)) { data.Add(exercise, new List <DataPoint> ()); item = data.FirstOrDefault(x => x.Key == exercise); } item.Value.Add( new DataPoint(DateTimeAxis.ToDouble(workout.Created), WeightMetricToImperialConverter.GetWeightAsDouble(workout.Weight)) ); } // create charts var list = new List <PlotView>(); foreach (var item in data) { var plotModel = GetWeightPerWorkoutModel(item); var plotView = new PlotView { HeightRequest = 300, Model = plotModel, VerticalOptions = LayoutOptions.Fill, HorizontalOptions = LayoutOptions.Fill }; list.Add(plotView); } _messagingService.Send(this, Messages.ChartBuilt, list); }
public async Task <string> ExportToCsv() { try { var sb = new StringBuilder(); var workouts = await _workoutsRepository.AllAsync(); workouts = workouts.OrderBy(x => x.Created).ToList(); var exercises = await _exercisesRepository.AllAsync(); sb.AppendLine( $"\"{"Date"}\",\"{"Exercise"}\",\"{"Reps"}\",\"{"Weight"}\",\"{"Target Reps"}\",\"{"Target Weight"}\",\"{"Trophies"}\",\"{"Workout Notes"}\""); foreach (var workout in workouts) { var exercise = exercises.FirstOrDefault(x => x.ExerciseId == workout.ExerciseId); if (exercise == null) { continue; } var line = $"{workout.Created.Date.ToString("d")},\"{exercise.Name}\",{workout.Reps},{WeightMetricToImperialConverter.GetWeightAsDouble(workout.Weight)},{workout.TargetReps},{WeightMetricToImperialConverter.GetWeightAsDouble(workout.TargetWeight)},{workout.Trophies},\"{workout.Notes}\""; sb.AppendLine(line); } return(_textStorage.Save(sb, "oneset.csv")); } catch (Exception ex) { App.ShowErrorPage(this, ex); } return(string.Empty); }
private void BuildRepsPerWorkout() { var data = from w in Workouts group w by w.ExerciseId into workoutsPerExercise from nestedGroup in ( from a in workoutsPerExercise group a by a.Weight ) group nestedGroup by workoutsPerExercise.Key; var list = new List <PlotView>(); foreach (var exerciseGroup in data) { var exercise = Exercises.FirstOrDefault(x => x.ExerciseId == exerciseGroup.Key); var plotModel = new PlotModel { Title = exercise.Name, Background = OxyColors.LightYellow, PlotAreaBackground = OxyColors.LightGray, }; var count = 0; foreach (var weightGroup in exerciseGroup) { var series = new LineSeries { Title = $"{WeightMetricToImperialConverter.GetWeightAsDouble(weightGroup.Key)} {L10n.GetWeightUnit()}" }; plotModel.Series.Add(series); var weightData = new List <DataPoint>(); foreach (var workout in weightGroup) { weightData.Add(new DataPoint(DateTimeAxis.ToDouble(workout.Created), workout.Reps)); count++; } series.ItemsSource = weightData; } var dateAxis = GetDateTimeAxis(count); plotModel.Axes.Add(dateAxis); var valueAxis = new LinearAxis { Position = AxisPosition.Left, MinimumPadding = 0, Title = "Resps" }; plotModel.Axes.Add(valueAxis); var plotView = new PlotView { HeightRequest = 300, Model = plotModel, VerticalOptions = LayoutOptions.Fill, HorizontalOptions = LayoutOptions.Fill }; list.Add(plotView); } _messagingService.Send(this, Messages.ChartBuilt, list); }