From 06ecf74cb547eeccfb05f3b0887a1ba2e612d295 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 13 Apr 2018 08:16:46 +0200 Subject: [PATCH 1/4] forbidden saving ad hoc metrics as favorite chart --- rowers/interactiveplots.py | 7 +++++-- rowers/views.py | 13 +++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 90d0ee2a..dd0fa820 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -3468,8 +3468,11 @@ def thumbnail_flex_chart(rowdata,id=0,promember=0, plot.yaxis.axis_label = 'Y' - - yrange1 = Range1d(start=yaxminima[yparam1],end=yaxmaxima[yparam1]) + try: + yrange1 = Range1d(start=yaxminima[yparam1],end=yaxmaxima[yparam1]) + except KeyError: + yrange1 = Range1d(start=yparam1.min(), end=yparam1.max()) + plot.y_range = yrange1 if (xparam != 'time') and (xparam != 'distance') and (xparam != 'cumdist'): diff --git a/rowers/views.py b/rowers/views.py index 69a9a60f..58fd0d60 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -8413,11 +8413,20 @@ def workout_flexchart3_view(request,*args,**kwargs): workstrokesonly = request.POST['workstrokesonlysave'] reststrokes = not workstrokesonly r = getrower(request.user) - f = FavoriteChart(user=r,xparam=xparam, + try: + r = metrics.yaxmaxima[xparam] + if yparam1 is not None: + r = metrics.yaxmaxima[yparam1] + if yparam2 is not None: + r = metrics.yaxmaxima[yparam2] + f = FavoriteChart(user=r,xparam=xparam, yparam1=yparam1,yparam2=yparam2, plottype=plottype,workouttype=workouttype, reststrokes=reststrokes) - f.save() + f.save() + + except KeyError: + messages.error(request,'We cannot save the ad hoc metrics in a favorite chart') if request.method == 'POST' and 'workstrokesonly' in request.POST: workstrokesonly = request.POST['workstrokesonly'] From 50638575a4a9334bb96302d7f09e1520265d97ea Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 13 Apr 2018 08:48:47 +0200 Subject: [PATCH 2/4] changed start date behavior in list_workouts --- rowers/views.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/rowers/views.py b/rowers/views.py index 58fd0d60..61287c06 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -2744,6 +2744,10 @@ def histo_all(request,theuser=0, if enddatestring != "": enddate = iso8601.parse_date(enddatestring) + + startdate = datetime.datetime.combine(startdate,datetime.time()) + enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59)) + if enddate < startdate: s = enddate enddate = startdate @@ -6411,9 +6415,8 @@ def courses_view(request): # List Workouts @login_required() def workouts_view(request,message='',successmessage='', - startdatestring="",enddatestring="", - startdate=timezone.now()-datetime.timedelta(days=365), - enddate=timezone.now(), + startdatestring='', + enddatestring='', teamid=0,rankingonly=False,rowerid=0,userid=0): request.session['referer'] = absolute(request)['PATH'] @@ -6433,13 +6436,26 @@ def workouts_view(request,message='',successmessage='', if not checkaccessuser(request.user,r): raise PermissionDenied("Access denied") + if startdatestring: + startdate = iso8601.parse_date(startdatestring) + else: + startdate = datetime.date.today()-datetime.timedelta(days=365) + + if enddatestring: + enddate = iso8601.parse_date(enddatestring) + else: + enddate = datetime.date.today() + + + startdate = datetime.datetime.combine(startdate,datetime.time()) + enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59)) + + if request.method == 'POST': dateform = DateRangeForm(request.POST) if dateform.is_valid(): startdate = dateform.cleaned_data['startdate'] enddate = dateform.cleaned_data['enddate'] - startdatestring = None - enddatestring = None else: dateform = DateRangeForm(initial={ 'startdate':startdate, @@ -6450,16 +6466,15 @@ def workouts_view(request,message='',successmessage='', enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59)) #enddate = enddate+datetime.timedelta(days=1) - if startdatestring: - startdate = iso8601.parse_date(startdatestring) - if enddatestring: - enddate = iso8601.parse_date(enddatestring) if enddate < startdate: s = enddate enddate = startdate startdate = s + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + # start date for the small graph activity_startdate = enddate-datetime.timedelta(days=15) From 13a673b7c33609dc7494a742af94349a10fac03c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 15 Apr 2018 14:45:17 +0200 Subject: [PATCH 3/4] bug fix --- rowers/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/views.py b/rowers/views.py index 560166d2..40ef97f1 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -7616,7 +7616,7 @@ def cumstats(request,theuser=0, if waterinclude: allergworkouts = workoutse | workoutsw - allergworkouts = workouts.distinct().order_by("-date", "-starttime") + allergworkouts = allergworkouts.distinct().order_by("-date", "-starttime") else: allergworkouts = workoutse.order_by("-date","-starttime") From 496c1efd5bbbcf029c2c46394792d5e38d2588ad Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 16 Apr 2018 07:45:24 +0200 Subject: [PATCH 4/4] hotfix OTW CP chart --- rowers/dataprep.py | 8 +++++++- rowers/forms.py | 2 +- rowers/templates/panel_staticchart.html | 2 +- rowers/templates/workout_form.html | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 7233b84e..d8591acc 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -719,7 +719,13 @@ def fetchcp(rower,theworkouts,table='cpdata'): return pd.Series([]),pd.Series([]),avgpower2 dfgrouped = df.groupby(['workoutid']) - avgpower2 = dict(dfgrouped.mean()['power'].astype(int)) + try: + avgpower2 = dict(dfgrouped.mean()['power'].astype(int)) + except KeyError: + avgpower2 = {} + for id in theids: + avgpower2[id] = 0 + return pd.Series([]),pd.Series([]),avgpower2 cpdf = getcpdata_sql(rower.id,table=table) diff --git a/rowers/forms.py b/rowers/forms.py index df48585f..2c74247a 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -198,7 +198,7 @@ class UploadOptionsForm(forms.Form): plotchoices = ( ('timeplot','Time Plot'), ('distanceplot','Distance Plot'), - ('pieplot','Pie Chart'), + ('pieplot','Heart Rate Pie Chart'), ) make_plot = forms.BooleanField(initial=False,required=False) plottype = forms.ChoiceField(required=False, diff --git a/rowers/templates/panel_staticchart.html b/rowers/templates/panel_staticchart.html index 60da93a4..02172c69 100644 --- a/rowers/templates/panel_staticchart.html +++ b/rowers/templates/panel_staticchart.html @@ -13,7 +13,7 @@
diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index 03a04eff..21161dec 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -137,7 +137,7 @@