diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 9732440c..2cc207c0 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2499,25 +2499,64 @@ def interactive_flex_chart2(id=0,promember=0, return [script,div,js_resources,css_resources,workstrokesonly] -def thumbnail_flex_chart(id=0,promember=0, - xparam='time', - yparam1='pace', - yparam2='hr', - plottype='line', - workstrokesonly=False): +def thumbnails_set(r,id,favorites): + charts = [] + columns = [f.xparam for f in favorites] + columns += [f.yparam1 for f in favorites] + columns += [f.yparam2 for f in favorites] - #rowdata,row = dataprep.getrowdata_db(id=id) - columns = [xparam,yparam1,yparam2,'time'] - - rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True, - workstrokesonly=workstrokesonly) + columns += ['time'] + rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True) + rowdata.dropna(axis=1,how='all',inplace=True) if rowdata.empty: - rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True, - workstrokesonly=False) - workstrokesonly=False + return [ + {'script':"", + 'div':"", + 'notes':"" + }] + else: + try: + rowdata.sort_values(by='time',ascending=True,inplace=True) + except KeyError: + pass + + l = len(rowdata) + maxlength = 50 + if l > maxlength: + bins = np.linspace(rowdata['time'].min(),rowdata['time'].max(),maxlength) + groups = rowdata.groupby(np.digitize(rowdata['time'],bins)) + rowdata = groups.mean() + for f in favorites: + workstrokesonly = not f.reststrokes + script,div = thumbnail_flex_chart( + rowdata, + id=id, + xparam=f.xparam, + yparam1=f.yparam1, + yparam2=f.yparam2, + plottype=f.plottype, + ) + + + charts.append({ + 'script':script, + 'div':div, + 'notes':f.notes}) + + return charts + + +def thumbnail_flex_chart(rowdata,id=0,promember=0, + xparam='time', + yparam1='pace', + yparam2='hr', + plottype='line', + workstrokesonly=False): + + try: tests = rowdata[yparam2] except KeyError: @@ -2528,25 +2567,7 @@ def thumbnail_flex_chart(id=0,promember=0, except KeyError: yparam1 = 'None' - rowdata.dropna(axis=1,how='all',inplace=True) - if rowdata.empty: - return "","No valid data" - else: - try: - rowdata.sort_values(by='time',ascending=True,inplace=True) - except KeyError: - pass - - workoutstateswork = [1,4,5,8,9,6,7] - workoutstatesrest = [3] - workoutstatetransition = [0,2,10,11,12,13] - - if workstrokesonly: - try: - rowdata = rowdata[~rowdata['workoutstate'].isin(workoutstatesrest)] - except KeyError: - pass try: tseconds = rowdata.ix[:,'time'] @@ -2620,11 +2641,6 @@ def thumbnail_flex_chart(id=0,promember=0, plot.yaxis.axis_label_text_font_size = "7pt" plot.xaxis.major_label_text_font_size = "7pt" plot.yaxis.major_label_text_font_size = "7pt" - # add watermark - plot.extra_y_ranges = {"watermark": watermarkrange} - plot.extra_x_ranges = {"watermark": watermarkrange} - - if plottype=='line': plot.line('x1','y1',source=source) diff --git a/rowers/templates/flexthumbnails.html b/rowers/templates/flexthumbnails.html new file mode 100644 index 00000000..d6a5016a --- /dev/null +++ b/rowers/templates/flexthumbnails.html @@ -0,0 +1,11 @@ + {% for chart in charts %} +
+

{{ forloop.counter }}

+
+ + {{ chart.div | safe }} + + {{ chart.notes }} +
+
+ {% endfor %} diff --git a/rowers/templates/panel_editbuttons.html b/rowers/templates/panel_editbuttons.html new file mode 100644 index 00000000..e2c836ea --- /dev/null +++ b/rowers/templates/panel_editbuttons.html @@ -0,0 +1,15 @@ +
+

+ Edit Workout +

+
+
+

+ Advanced +

+
+
+

+ Edit Intervals +

+
diff --git a/rowers/templates/panel_statcharts.html b/rowers/templates/panel_statcharts.html new file mode 100644 index 00000000..141fd15e --- /dev/null +++ b/rowers/templates/panel_statcharts.html @@ -0,0 +1,8 @@ +{% for graph in statcharts %} +
+ + {{ graph.filename }} +
+{% endfor %} diff --git a/rowers/templates/panel_staticchart.html b/rowers/templates/panel_staticchart.html new file mode 100644 index 00000000..90095d8d --- /dev/null +++ b/rowers/templates/panel_staticchart.html @@ -0,0 +1,20 @@ +
+

+ Add Time Plot +

+
+
+

+ Add Distance Plot +

+
+
+

+ Add Pie Chart +

+
+
+

+ Add Power Pie Chart +

+
diff --git a/rowers/templates/panel_stats.html b/rowers/templates/panel_stats.html new file mode 100644 index 00000000..248127f8 --- /dev/null +++ b/rowers/templates/panel_stats.html @@ -0,0 +1,5 @@ +
+

+ Workout Stats +

+
diff --git a/rowers/templates/panel_summary.html b/rowers/templates/panel_summary.html new file mode 100644 index 00000000..759fd39b --- /dev/null +++ b/rowers/templates/panel_summary.html @@ -0,0 +1,5 @@ +

+

+    {{ workout.summary }}
+  
+

diff --git a/rowers/templates/workflow.html b/rowers/templates/workflow.html index 2a454179..a4fe822f 100644 --- a/rowers/templates/workflow.html +++ b/rowers/templates/workflow.html @@ -25,17 +25,29 @@ {% endblock %} {% block content %} -
- {% for chart in charts %} -
-

{{ forloop.counter }}

-
- - {{ chart.div | safe }} - - {{ chart.notes }} -
+
+
+

{{ workout.name }}

- {% endfor %} +
+ {% block left_panel %} + {% for templateName in leftTemplates %} + {% include templateName %} + {% endfor %} + {% endblock %} +
+
+ {% block middle_panel %} + {% for templateName in middleTemplates %} +
+ {% include templateName %} +
+ {% endfor %} + {% endblock %} +
+
+ {% block right_panel %} +

 

+ {% endblock %}
{% endblock %} diff --git a/rowers/views.py b/rowers/views.py index 630970c4..88ed6029 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5850,6 +5850,8 @@ def workout_comparison_view2(request,id1=0,id2=0,xparam='distance', # Flex thumbnails @login_required() def workout_workflow_view(request,id): + request.session['referer'] = absolute(request)['PATH'] + request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE try: row = Workout.objects.get(id=id) except Workout.DoesNotExist: @@ -5876,28 +5878,28 @@ def workout_workflow_view(request,id): charts = [] - if favorites: - for f in favorites: - workstrokesonly = not f.reststrokes - script,div = thumbnail_flex_chart(id=id,promember=promember, - xparam=f.xparam, - yparam1=f.yparam1, - yparam2=f.yparam2, - plottype=f.plottype, - workstrokesonly=workstrokesonly) - - charts.append({ - 'script':script, - 'div':div, - 'notes':f.notes}) + if favorites: + charts = thumbnails_set(r,id,favorites) + statcharts = GraphImage.objects.filter(workout=row) + + # This will be user configurable in the future + middleTemplates = ['panel_statcharts.html','flexthumbnails.html', + 'panel_summary.html'] + leftTemplates = [ + 'panel_editbuttons.html','panel_staticchart.html', + 'panel_stats.html' + ] return render(request, 'workflow.html', { + 'middleTemplates':middleTemplates, + 'leftTemplates':leftTemplates, 'charts':charts, 'workout':row, - }) + 'statcharts':statcharts, + }) # The famous flex chart def workout_flexchart3_view(request,*args,**kwargs): @@ -6810,7 +6812,10 @@ def workout_add_chart_view(request,id,plotnr=1): imagename=imagename) - url = "/rowers/workout/"+str(w.id)+"/edit" + try: + url = request.session['referer'] + except KeyError: + url = "/rowers/workout/"+str(w.id)+"/edit" return HttpResponseRedirect(url)