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. +

+ +
+ {{ workoutnametemplate_formset.management_form }} + + {{ workoutnametemplate_formset.as_table }} +
+ {% csrf_token %} + +
+

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)