diff --git a/rowers/dataprep.py b/rowers/dataprep.py index e9a077cc..f54cf9d7 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -721,7 +721,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 8b8015db..98d88124 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/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/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 @@

- Add Pie Chart + Add HR Pie Chart

diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index a2692ca7..5160aec2 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -137,7 +137,7 @@

- Add Pie Chart + Add HR Pie Chart

diff --git a/rowers/views.py b/rowers/views.py index 1eb6b0cd..64062076 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -2747,6 +2747,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 @@ -6414,9 +6418,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'] @@ -6436,13 +6439,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, @@ -6453,16 +6469,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) @@ -7650,7 +7665,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") @@ -8416,11 +8431,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']