diff --git a/rowers/dataprep.py b/rowers/dataprep.py
index fe27de20..3e145f1f 100644
--- a/rowers/dataprep.py
+++ b/rowers/dataprep.py
@@ -916,6 +916,16 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
w.startdatetime = timezone.now()
w.save()
+
+ if privacy == 'visible':
+ ts = Team.objects.filter(rower=r)
+ for t in ts:
+ w.team.add(t)
+
+ # put stroke data in database
+ res = dataprep(row.df, id=w.id, bands=True,
+ barchart=True, otwpower=True, empower=True, inboard=inboard)
+
isbreakthrough = False
ishard = False
if workouttype == 'water':
@@ -981,14 +991,6 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
else:
pass
- if privacy == 'visible':
- ts = Team.objects.filter(rower=r)
- for t in ts:
- w.team.add(t)
-
- # put stroke data in database
- res = dataprep(row.df, id=w.id, bands=True,
- barchart=True, otwpower=True, empower=True, inboard=inboard)
return (w.id, message)
@@ -1150,14 +1152,6 @@ def new_workout_from_file(r, f2,
a = MessageAttachment(message=msg,document=f3)
a.save()
-# res = myqueue(
-# queuelow,
-# handle_zip_file,
-# r.user.email,
-# title,
-# f2
-# )
-
return -1, message, f2
# Some people try to upload Concept2 logbook summaries
@@ -1564,7 +1558,7 @@ def getsmallrowdata_db(columns, ids=[], doclean=True, workstrokesonly=True):
cdata2 = savgol_filter(cdata.values,windowsize,3)
print len(cdata),len(cdata2),'mies'
- data[c] = cdata
+ data[c] = cdata2
except KeyError:
data[c] = 0
@@ -1642,12 +1636,14 @@ def read_cols_df_sql(ids, columns, convertnewtons=True):
axx = [f.name for f in StrokeData._meta.get_fields()]
extracols = []
+
for c in columns:
if not c in axx:
columns.remove(c)
extracols.append(c)
+
columns = list(columns) + ['distance', 'spm', 'workoutid']
columns = [x for x in columns if x != 'None']
columns = list(set(columns))
diff --git a/rowers/templates/flexchart3otw.html b/rowers/templates/flexchart3otw.html
index c7f2517a..29934302 100644
--- a/rowers/templates/flexchart3otw.html
+++ b/rowers/templates/flexchart3otw.html
@@ -94,7 +94,15 @@
{% endif %}
{% endfor %}
{% endif %}
-
+ {% if promember %}
+ {% for key, value in extrametrics.items %}
+ {{ value }}
+ {% endfor %}
+ {% else %}
+ {% for key, value in extrametrics.items %}
+ {{ value }} (Pro)
+ {% endfor %}
+ {% endif %}
@@ -119,6 +127,15 @@
{% endif %}
{% endfor %}
{% endif %}
+ {% if promember %}
+ {% for key, value in extrametrics.items %}
+ {{ value }}
+ {% endfor %}
+ {% else %}
+ {% for key, value in extrametrics.items %}
+ {{ value }} (Pro)
+ {% endfor %}
+ {% endif %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 0ecd420a..244a6b0d 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -363,12 +363,12 @@ urlpatterns = [
url(r'^register/thankyou/$', TemplateView.as_view(template_name='registerthankyou.html'), name='registerthankyou'),
url(r'^workout/(?P\d+)/workflow$',views.workout_workflow_view,
name='workout_workflow_view'),
- url(r'^workout/(?P\d+)/flexchart/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)/(?P\w+)/$',views.workout_flexchart3_view),
- url(r'^workout/(?P\d+)/flexchart/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)$',views.workout_flexchart3_view),
- url(r'^workout/(?P\d+)/flexchart/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)$',views.workout_flexchart3_view),
+ url(r'^workout/(?P\d+)/flexchart/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)/(?P\w+)/$',views.workout_flexchart3_view),
+ url(r'^workout/(?P\d+)/flexchart/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)/(?P\w+.*)$',views.workout_flexchart3_view),
+ url(r'^workout/(?P\d+)/flexchart/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)$',views.workout_flexchart3_view),
url(r'^workout/(?P\d+)/flexchart$',views.workout_flexchart3_view),
- url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)$',views.workout_comparison_view2),
- url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/$',views.workout_comparison_view2),
+ url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)$',views.workout_comparison_view2),
+ url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P[\w\ ]+.*)/$',views.workout_comparison_view2),
url(r'^test\_callback',views.rower_process_testcallback),
url(r'^workout/(?P\d+)/test\_strokedata$',views.strokedataform),
]
diff --git a/rowers/views.py b/rowers/views.py
index 470ed0bd..d86d4dbe 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -6455,7 +6455,10 @@ def instroke_view(request,id=0):
return HttpResponseRedirect(url)
rowdata = rrdata(csvfile=row.csvfilename)
- instrokemetrics = rowdata.get_instroke_columns()
+ try:
+ instrokemetrics = rowdata.get_instroke_columns()
+ except AttributeError:
+ instrokemetrics = []
return render(request,
@@ -7491,7 +7494,12 @@ def workout_flexchart3_view(request,*args,**kwargs):
if yparam2 == name:
yparam2 = 'spm'
messages.info(request,'To use '+d['verbose_name']+', you have to be Pro member')
-
+
+ # bring back slashes
+ yparam1 = yparam1.replace('_slsh_','/')
+ yparam2 = yparam2.replace('_slsh_','/')
+ xparam = xparam.replace('_slsh_','/')
+
# create interactive plot
try:
script,div,js_resources,css_resources,workstrokesonly = interactive_flex_chart2(id,xparam=xparam,yparam1=yparam1,
@@ -7517,55 +7525,61 @@ def workout_flexchart3_view(request,*args,**kwargs):
if d['mode'] == 'erg':
axchoicespro.pop(name)
- return render(request,
- 'flexchart3otw.html',
- {'the_script':script,
- 'the_div':div,
- 'js_res': js_resources,
- 'css_res':css_resources,
- 'id':int(id),
- 'teams':get_my_teams(request.user),
- 'xparam':xparam,
- 'yparam1':yparam1,
- 'yparam2':yparam2,
- 'plottype':plottype,
- 'favoritechartnotes':favoritechartnotes,
- 'mayedit':mayedit,
- 'promember':promember,
- 'axchoicesbasic':axchoicesbasic,
- 'axchoicespro':axchoicespro,
- 'noylist':noylist,
- 'workstrokesonly': not workstrokesonly,
- 'favoritenr':favoritenr,
- 'maxfav':maxfav,
- })
else:
for name,d in rowingmetrics:
if d['mode'] == 'water':
axchoicespro.pop(name)
-
- return render(request,
- 'flexchart3otw.html',
- {'the_script':script,
- 'the_div':div,
- 'js_res': js_resources,
- 'css_res':css_resources,
- 'teams':get_my_teams(request.user),
- 'id':int(id),
- 'xparam':xparam,
- 'yparam1':yparam1,
- 'yparam2':yparam2,
- 'plottype':plottype,
- 'axchoicesbasic':axchoicesbasic,
- 'axchoicespro':axchoicespro,
- 'favoritechartnotes':favoritechartnotes,
- 'noylist':noylist,
- 'mayedit':mayedit,
- 'promember':promember,
- 'workstrokesonly': not workstrokesonly,
- 'favoritenr':favoritenr,
- 'maxfav':maxfav,
- })
+
+
+ rowdata = rdata(row.csvfilename)
+ additionalmetrics = rowdata.get_additional_metrics()
+
+
+ extrametrics = {m.replace('/','_slsh_'):m for m in additionalmetrics}
+
+ try:
+ extrametrics.pop('originalvelo')
+ except KeyError:
+ pass
+
+ try:
+ extrametrics.pop('cumdist')
+ except KeyError:
+ pass
+
+ try:
+ extrametrics.pop(' Cadence (strokes_slsh_min)')
+ except KeyError:
+ pass
+
+ try:
+ extrametrics.pop(' WorkPerStroke (joules)')
+ except KeyError:
+ pass
+
+ return render(request,
+ 'flexchart3otw.html',
+ {'the_script':script,
+ 'the_div':div,
+ 'js_res': js_resources,
+ 'css_res':css_resources,
+ 'teams':get_my_teams(request.user),
+ 'id':int(id),
+ 'xparam':xparam,
+ 'yparam1':yparam1,
+ 'yparam2':yparam2,
+ 'plottype':plottype,
+ 'axchoicesbasic':axchoicesbasic,
+ 'axchoicespro':axchoicespro,
+ 'extrametrics':extrametrics,
+ 'favoritechartnotes':favoritechartnotes,
+ 'noylist':noylist,
+ 'mayedit':mayedit,
+ 'promember':promember,
+ 'workstrokesonly': not workstrokesonly,
+ 'favoritenr':favoritenr,
+ 'maxfav':maxfav,
+ })
# The interactive plot with the colored Heart rate zones