From 5ab1152825d8ec2c83f1911d2e07d4e4937d50d7 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Fri, 13 Oct 2017 14:10:53 +0200
Subject: [PATCH] added workflow view
---
rowers/interactiveplots.py | 90 +++++++++++++++----------
rowers/templates/flexthumbnails.html | 11 +++
rowers/templates/panel_editbuttons.html | 15 +++++
rowers/templates/panel_statcharts.html | 8 +++
rowers/templates/panel_staticchart.html | 20 ++++++
rowers/templates/panel_stats.html | 5 ++
rowers/templates/panel_summary.html | 5 ++
rowers/templates/workflow.html | 34 +++++++---
rowers/views.py | 37 +++++-----
9 files changed, 161 insertions(+), 64 deletions(-)
create mode 100644 rowers/templates/flexthumbnails.html
create mode 100644 rowers/templates/panel_editbuttons.html
create mode 100644 rowers/templates/panel_statcharts.html
create mode 100644 rowers/templates/panel_staticchart.html
create mode 100644 rowers/templates/panel_stats.html
create mode 100644 rowers/templates/panel_summary.html
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 }}
+
+
+ {% 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 @@
+
+
+
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 %}
+
+
+ 
+
+{% 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 @@
+
+
+
+
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 @@
+
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 }}
-
+
+
+
{{ 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)