diff --git a/rowers/forms.py b/rowers/forms.py
index 8985cf2b..3d9e3e86 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -1,7 +1,8 @@
from rowers.utils import rankingdistances, rankingdurations
from rowers.utils import (
workflowleftpanel, workflowmiddlepanel,
- defaultleft, defaultmiddle
+ defaultleft, defaultmiddle,
+ workout_name_element,
)
from rowers.utils import palettes
from time import strftime
@@ -497,6 +498,15 @@ class WorkFlowMiddlePanelElement(forms.Form):
initial='None',
)
+class WorkoutNameTemplateElement(forms.Form):
+ templatechoices = tuple(list(workout_name_element)+[('None', 'None')])
+
+ element = forms.ChoiceField(
+ label='',
+ choices=templatechoices,
+ initial='None'
+ )
+
# The form to indicate additional actions to be performed immediately
# after a successful upload
diff --git a/rowers/models.py b/rowers/models.py
index bfa22a1c..00095741 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -231,6 +231,34 @@ class AlternativeEmails(models.TextField):
value = self._get_val_from_obj(obj)
return self.get_deb_prep_value(value)
+
+# model for Workout Name template list
+
+class WorkoutNameTemplateField(models.TextField):
+ def __init__(self, *args, **kwargs):
+ super(WorkoutNameTemplateField, 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
@@ -1094,6 +1122,8 @@ class Rower(models.Model):
choices=landingpages2,
verbose_name="Title link on workout list")
+ workoutnametemplate = WorkoutNameTemplateField(default=['date','name','distance','ownerfirst','ownerlast','duration','boattype','workouttype'])
+
# Access tokens
c2token = models.CharField(
default='', max_length=200, blank=True, null=True)
diff --git a/rowers/templates/favoritecharts.html b/rowers/templates/favoritecharts.html
index c34c1973..5841dd0c 100644
--- a/rowers/templates/favoritecharts.html
+++ b/rowers/templates/favoritecharts.html
@@ -41,6 +41,22 @@
+Workout Name Settings of {{ rower.user.first_name }} {{ rower.user.last_name }}
+
+
+ Use this form to change how the workout is named in charts. Our recommendation is name, date, rower first name, rower last name, workout type
+ as a minimum.
+
+
+
+
Change Favorite Charts of {{ rower.user.first_name }} {{ rower.user.last_name }}
diff --git a/rowers/utils.py b/rowers/utils.py
index 49443593..e4de1539 100644
--- a/rowers/utils.py
+++ b/rowers/utils.py
@@ -57,6 +57,18 @@ landingpages2 = (
('workout_delete', 'Remove Workout')
)
+workout_name_element = (
+ ('date', 'Date'),
+ ('name', 'Name'),
+ ('distance', 'Distance'),
+ ('ownerfirst', 'Rower first name'),
+ ('ownerlast', 'Rower last name'),
+ ('duration', 'Duration'),
+ ('boattype','Boat Type'),
+ ('workouttype', 'Workout Type'),
+ ('seatnumber','Seat Number')
+)
+
workflowmiddlepanel = (
('panel_statcharts.html', 'Static Charts'),
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index ac88517b..351ca027 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -103,6 +103,7 @@ from rowers.forms import (
CourseConfirmForm, ResampleForm,
TeamUploadOptionsForm, WorkFlowLeftPanelForm, WorkFlowMiddlePanelForm,
WorkFlowLeftPanelElement, WorkFlowMiddlePanelElement,
+ WorkoutNameTemplateElement,
LandingPageForm, PlannedSessionSelectForm, WorkoutSessionSelectForm,
PlannedSessionTeamForm, PlannedSessionTeamMemberForm,
VirtualRaceSelectForm, WorkoutRaceSelectForm, CourseSelectForm,
diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py
index b03e5eb7..ef42edf0 100644
--- a/rowers/views/userviews.py
+++ b/rowers/views/userviews.py
@@ -322,6 +322,28 @@ def rower_favoritecharts_view(request, userid=0):
FavoriteChartFormSet = formset_factory(
FavoriteForm, formset=BaseFavoriteFormSet, extra=1)
+ workoutnametemplate = r.workoutnametemplate
+ WorkoutNameTemplateFormSet = formset_factory(WorkoutNameTemplateElement, extra=1)
+
+ workoutnametemplate_data = [{'element': element} for element in r.workoutnametemplate]
+ workoutnametemplate_formset = WorkoutNameTemplateFormSet(initial=workoutnametemplate_data, prefix='workoutname')
+
+ if request.method == 'POST' and 'workoutname-TOTAL_FORMS' in request.POST:
+ workoutnametemplate_formset = WorkoutNameTemplateFormSet(request.POST, prefix='workoutname')
+ newworkoutnametemplate = []
+ if workoutnametemplate_formset.is_valid():
+ for form in workoutnametemplate_formset:
+ element = form.cleaned_data.get('element')
+ if element != 'None':
+ newworkoutnametemplate.append(element)
+
+ newworkoutnametemplate = [i for i in newworkoutnametemplate if i is not None]
+ r.workoutnametemplate = newworkoutnametemplate
+ try:
+ r.save()
+ except IntegrityError:
+ messages.error("Something went wrong")
+
if request.method == 'POST' and 'staticgrids' in request.POST: # pragma: no cover
staticchartform = StaticChartRowerForm(request.POST, instance=r)
if staticchartform.is_valid():
@@ -400,6 +422,7 @@ def rower_favoritecharts_view(request, userid=0):
'rower': r,
'staticchartform': staticchartform,
'datasettingsform': datasettingsform,
+ 'workoutnametemplate_formset': workoutnametemplate_formset,
}
return render(request, 'favoritecharts.html', context)