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..6edc4c92 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) @@ -3667,25 +3697,38 @@ class Workout(models.Model): def __str__(self): - date = self.date - name = self.name - distance = str(self.distance) - ownerfirst = self.user.user.first_name - ownerlast = self.user.user.last_name - duration = self.duration - boattype = self.boattype - workouttype = self.workouttype + elements = dict( + date = self.date.strftime('%Y-%m-%d'), + name = self.name, + distance = str(self.distance), + ownerfirst = self.user.user.first_name, + ownerlast = self.user.user.last_name, + duration = self.duration.strftime("%H:%M:%S"), + boattype = self.boattype, + workouttype = self.workouttype, + seatnumber = 'seat '+str(self.seatnumber), + boatname = 'boat '+str(self.boatname), + empowerside = self.empowerside, + inboard = self.inboard, + oarlength = self.oarlength + ) - if workouttype not in ['water','rower']: + if len(self.user.workoutnametemplate): try: - stri = u'{d} {n} {dist}m {duration} {workouttype} {ownerfirst} {ownerlast}'.format( - d=date.strftime('%Y-%m-%d'), - n=name, - dist=distance, - duration=duration.strftime("%H:%M:%S"), - workouttype=workouttype, - ownerfirst=ownerfirst, - ownerlast=ownerlast, + stri = u'' + for element in self.user.workoutnametemplate: + stri += u'{'+u'{element}'.format(element=element)+u'} ' + stri = stri[:-1] + return stri.format(**elements) + except ValueError: + return self.name + except AttributeError: + return "No workout" + + if self.workouttype not in ['water','rower']: + try: + stri = u'{date} {name} {distance}m {duration} {workouttype} {ownerfirst} {ownerlast}'.format( + **elements ) except ValueError: stri = self.name @@ -3693,15 +3736,8 @@ class Workout(models.Model): return "No workout" else: try: - stri = u'{d} {n} {dist}m {duration} {workouttype} {boattype} {ownerfirst} {ownerlast}'.format( - d=date.strftime('%Y-%m-%d'), - n=name, - dist=distance, - duration=duration.strftime("%H:%M:%S"), - workouttype=workouttype, - boattype=boattype, - ownerfirst=ownerfirst, - ownerlast=ownerlast, + stri = u'{date} {name} {distance}m {duration} {workouttype} {boattype} {ownerfirst} {ownerlast}'.format( + **elements ) except (ValueError, AttributeError): stri = self.name diff --git a/rowers/templates/favoritecharts.html b/rowers/templates/favoritecharts.html index c34c1973..77f2d3f7 100644 --- a/rowers/templates/favoritecharts.html +++ b/rowers/templates/favoritecharts.html @@ -41,6 +41,27 @@
++ 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. +
+ + +