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 @@
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 @@
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']