diff --git a/rowers/models.py b/rowers/models.py index 5a6052c5..24a5f5be 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -266,7 +266,29 @@ class WorkoutNameTemplateField(models.TextField): value = self._get_val_from_obj(obj) return self.get_deb_prep_value(value) - + +class WorkoutChartStackFavoriteField(models.TextField): + def __init__(self, *args, **kwargs): + super(WorkoutChartStackFavoriteField, self).__init__(*args, **kwargs) + + def to_python(self, value): # pragma: no cover + if not value: + return + return json.loads(value) + + def from_db_value(self, value, expression, connection): + if not value: + return + return json.loads(value) + + def get_db_prep_value(self, value, connection, prepared=False): + if not value: + return + return json.dumps(value) + + def value_to_string(self, obj): # pragma: no cover + value = self._get_val_from_obj(obj) + return self.get_deb_prep_value(value) # model for Planned Session Steps @@ -1177,6 +1199,10 @@ class Rower(models.Model): verbose_name="Title link on workout list") workoutnametemplate = WorkoutNameTemplateField(default=['date','name','distance','ownerfirst','ownerlast','duration','boattype','workouttype']) + chartstacktemplate_x = models.CharField(default='time',verbose_name='X-Axis for Chart Stacked View',max_length=200, + choices=(('time', 'Time'),('distance', 'Distance')),) + chartstacktemplate_y = WorkoutChartStackFavoriteField(default=['pace','power','hr','spm'], + verbose_name='Y-Axis for Chart Stacked View',) # Access tokens training_plan_code = models.CharField(default='', max_length=200, blank=True, null=True) diff --git a/rowers/templates/favoritecharts.html b/rowers/templates/favoritecharts.html index 77f2d3f7..e577454e 100644 --- a/rowers/templates/favoritecharts.html +++ b/rowers/templates/favoritecharts.html @@ -41,6 +41,19 @@
++ Use this form to change the default axes for the stacked workout chart. +
++
+ +diff --git a/rowers/templates/flexchartstacked.html b/rowers/templates/flexchartstacked.html index 58aa7ffb..458ef850 100644 --- a/rowers/templates/flexchartstacked.html +++ b/rowers/templates/flexchartstacked.html @@ -47,6 +47,13 @@
++ +
++ (This saves your preferred X and Y axes for all workouts.) +
diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 288068f6..a180a61b 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py index 9f72a107..991a5c21 100644 --- a/rowers/views/userviews.py +++ b/rowers/views/userviews.py @@ -250,6 +250,27 @@ def rower_favoritecharts_view(request, userid=0): staticchartform = StaticChartRowerForm(instance=r) datasettingsform = DataRowerForm(instance=r) + xparam = 'time' + yparam1 = 'pace' + yparam2 = 'power' + yparam3 = 'hr' + yparam4 = 'spm' + + xparam = r.chartstacktemplate_x + yparam1 = r.chartstacktemplate_y[0] + yparam2 = r.chartstacktemplate_y[1] + yparam3 = r.chartstacktemplate_y[2] + yparam4 = r.chartstacktemplate_y[3] + + initial = { + 'xaxis': xparam, + 'yaxis1': yparam1, + 'yaxis2': yparam2, + 'yaxis3': yparam3, + 'yaxis4': yparam4, + } + stackedchartform = StravaChartForm(request, initial=initial) + favorites = FavoriteChart.objects.filter(user=r).order_by('id') aantal = len(favorites) favorites_data = [{'yparam1': f.yparam1, @@ -272,6 +293,17 @@ def rower_favoritecharts_view(request, userid=0): workoutnametemplate_data = [{'element': element} for element in r.workoutnametemplate] workoutnametemplate_formset = WorkoutNameTemplateFormSet(initial=workoutnametemplate_data, prefix='workoutname') + if request.method == 'POST' and 'yaxis4' in request.POST: + stackedchartform = StravaChartForm(request, request.POST) + if stackedchartform.is_valid(): + r.chartstacktemplate_x = stackedchartform.cleaned_data.get('xaxis') + r.chartstacktemplate_y = [stackedchartform.cleaned_data.get('yaxis1'), + stackedchartform.cleaned_data.get('yaxis2'), + stackedchartform.cleaned_data.get('yaxis3'), + stackedchartform.cleaned_data.get('yaxis4')] + r.save() + messages.info(request, "We have updated your stacked chart settings") + if request.method == 'POST' and 'workoutname-TOTAL_FORMS' in request.POST: if 'defaults_workoutname' in request.POST: r.workoutnametemplate = ['date','name','distance','ownerfirst','ownerlast','duration','boattype','workouttype'] @@ -371,6 +403,7 @@ def rower_favoritecharts_view(request, userid=0): 'favorites_formset': favorites_formset, 'teams': get_my_teams(request.user), 'rower': r, + 'stackedchartform': stackedchartform, 'staticchartform': staticchartform, 'datasettingsform': datasettingsform, 'workoutnametemplate_formset': workoutnametemplate_formset, diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 8f118934..312c0742 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -4240,6 +4240,12 @@ def workout_flexchart_stacked_view(request, *args, **kwargs): yparam3 = 'hr' yparam4 = 'spm' + xparam = r.chartstacktemplate_x + yparam1 = r.chartstacktemplate_y[0] + yparam2 = r.chartstacktemplate_y[1] + yparam3 = r.chartstacktemplate_y[2] + yparam4 = r.chartstacktemplate_y[3] + if request.method == 'POST': flexaxesform = StravaChartForm(request, request.POST) if flexaxesform.is_valid(): @@ -4250,6 +4256,11 @@ def workout_flexchart_stacked_view(request, *args, **kwargs): yparam3 = cd['yaxis3'] yparam4 = cd['yaxis4'] + if 'save' in request.POST: + r.chartstacktemplate_x = xparam + r.chartstacktemplate_y = [yparam1, yparam2, yparam3, yparam4] + r.save() + ( script, div ) = interactive_flexchart_stacked(