diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 4b1847bf..31147923 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -132,6 +132,14 @@ def newtestpowerdate(x): return x['date'] +def workoutname(id): + try: + w = Workout.objects.get(id=id) + except Workout.DoesNotExist: + return '' + + return str(w) + def all_goldmedalstandards(workouts,startdate,enddate): dates = [] testpowers = [] @@ -1824,6 +1832,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): # all workouts alldates,alltestpower,allduration = all_goldmedalstandards(workouts,startdate,enddate) + allids = [w.id for w in workouts] nrdays = (enddate-startdate).days @@ -1832,6 +1841,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): score = [] markerduration = [] duration = [] + workoutid = [] previous = 0 @@ -1845,6 +1855,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): markerduration.append(testduration[i]) score.append(np.nan) duration.append(np.nan) + workoutid.append(id) for i in range(len(alldates)): td.append(arrow.get(alldates[i]).datetime) @@ -1852,6 +1863,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): score.append(alltestpower[i]) markerduration.append(np.nan) duration.append(allduration[i]) + workoutid.append(allids[i]) for i in range(nrdays+1): td.append(arrow.get(startdate+datetime.timedelta(days=i)).datetime) @@ -1859,6 +1871,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): score.append(np.nan) markerduration.append(np.nan) duration.append(np.nan) + workoutid.append(0) df = pd.DataFrame({ @@ -1867,6 +1880,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): 'score':score, 'duration':duration, 'date':td, + 'id':workoutid, }) @@ -1875,6 +1889,9 @@ def goldmedalscorechart(user,startdate=None,enddate=None): df = df.groupby(['date']).max() df['date'] = df.index.values + df['url'] = df['id'].apply(lambda x:settings.SITE_URL+'/rowers/workout/{id}/'.format(id=encoder.encode_hex(x))) + df['workout'] = df['id'].apply(lambda x:workoutname(x)) + source = ColumnDataSource( data = dict( @@ -1884,6 +1901,8 @@ def goldmedalscorechart(user,startdate=None,enddate=None): duration = df['duration'].apply(lambda x:totaltime_sec_to_string(x,shorten=True)), date = df['date'], fdate = df['date'].map(lambda x: x.strftime('%d-%m-%Y')), + url = df['url'], + workout = df['workout'] ) ) @@ -1943,8 +1962,12 @@ def goldmedalscorechart(user,startdate=None,enddate=None): ('Score','@score{int}'), ('Duration', '@duration'), ('Date','@fdate'), + ('Workout','@workout') ]) + taptool = plot.select(type=TapTool) + taptool.callback = OpenURL(url='@url') + script, div = components(plot) return script, div,outids diff --git a/rowers/models.py b/rowers/models.py index aa31934e..0f9e0ab4 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -44,6 +44,7 @@ import datetime #from rules.contrib.models import RulesModel from rowers.rower_rules import * +from rowers.opaque import encoder from rowers.rows import validate_file_extension from collections import OrderedDict @@ -2992,6 +2993,13 @@ class Workout(models.Model): duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout') impeller = models.BooleanField(default=False,verbose_name='Impeller') + def url(self): + str = '/rowers/workout/{id}/'.format( + id = encoder.encode_hex(self.id) + ) + url = settings.SITE_URL+str + return url + def save(self, *args, **kwargs): user = self.user if self.notes is not None and len(self.notes)>1000: diff --git a/rowers/templates/goldmedalscores.html b/rowers/templates/goldmedalscores.html index ab85c47e..2cd05773 100644 --- a/rowers/templates/goldmedalscores.html +++ b/rowers/templates/goldmedalscores.html @@ -80,6 +80,8 @@
  • +

    Hover over the workout to see details, click on the workout to open in a + separate page.

    {{ the_div|safe }}