Private
Public Access
1
0

added workflow view

This commit is contained in:
Sander Roosendaal
2017-10-13 14:10:53 +02:00
parent e806089ef7
commit 5ab1152825
9 changed files with 161 additions and 64 deletions

View File

@@ -2499,25 +2499,64 @@ def interactive_flex_chart2(id=0,promember=0,
return [script,div,js_resources,css_resources,workstrokesonly] return [script,div,js_resources,css_resources,workstrokesonly]
def thumbnail_flex_chart(id=0,promember=0, def thumbnails_set(r,id,favorites):
xparam='time', charts = []
yparam1='pace',
yparam2='hr',
plottype='line',
workstrokesonly=False):
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 += ['time']
columns = [xparam,yparam1,yparam2,'time'] rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True)
rowdata.dropna(axis=1,how='all',inplace=True)
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True,
workstrokesonly=workstrokesonly)
if rowdata.empty: if rowdata.empty:
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True, return [
workstrokesonly=False) {'script':"",
workstrokesonly=False '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: try:
tests = rowdata[yparam2] tests = rowdata[yparam2]
except KeyError: except KeyError:
@@ -2528,25 +2567,7 @@ def thumbnail_flex_chart(id=0,promember=0,
except KeyError: except KeyError:
yparam1 = 'None' 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: try:
tseconds = rowdata.ix[:,'time'] 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.yaxis.axis_label_text_font_size = "7pt"
plot.xaxis.major_label_text_font_size = "7pt" plot.xaxis.major_label_text_font_size = "7pt"
plot.yaxis.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': if plottype=='line':
plot.line('x1','y1',source=source) plot.line('x1','y1',source=source)

View File

@@ -0,0 +1,11 @@
{% for chart in charts %}
<div class="grid_3 alpha">
<h4>{{ forloop.counter }}</h4>
<div class="grid_3 tooltip">
<a href="/rowers/workout/{{ workout.id }}/flexchart?favoritechart={{ forloop.counter |add:"-1" }}">
{{ chart.div | safe }}
</a>
<span class="tooltiptext">{{ chart.notes }}</span>
</div>
</div>
{% endfor %}

View File

@@ -0,0 +1,15 @@
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced</a>
</p>
</div>
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
</p>
</div>

View File

@@ -0,0 +1,8 @@
{% for graph in statcharts %}
<div id="thumb-container" class="grid_3 alpha">
<a href="/rowers/graph/{{ graph.id }}/">
<img src="/{{ graph.filename }}"
onerror="this.src='/static/img/waiting.png'"
alt="{{ graph.filename }}" width="180" height="150"></a>
</div>
{% endfor %}

View File

@@ -0,0 +1,20 @@
<div class="grid_2 alpha">
<p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addtimeplot">Add Time Plot</a>
</p>
</div>
<div class="grid_2 alpha">
<p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/adddistanceplot">Add Distance Plot</a>
</p>
</div>
<div class="grid_2 alpha">
<p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addpiechart">Add Pie Chart</a>
</p>
</div>
<div class="grid_2 alpha">
<p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addpowerpiechart">Add Power Pie Chart</a>
</p>
</div>

View File

@@ -0,0 +1,5 @@
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/stats">Workout Stats</a>
</p>
</div>

View File

@@ -0,0 +1,5 @@
<p>
<pre>
{{ workout.summary }}
</pre>
</p>

View File

@@ -25,17 +25,29 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div id="workouts" class="grid_12 alpha"> <div id="page" class="grid_12 alpha">
{% for chart in charts %} <div class="grid_10 prefix_2 alpha">
<div class="grid_3 alpha"> <h1>{{ workout.name }}</h1>
<h2>{{ forloop.counter }}</h2>
<div class="grid_3 tooltip">
<a href="/rowers/workout/{{ workout.id }}/flexchart?favoritechart={{ forloop.counter |add:"-1" }}">
{{ chart.div | safe }}
</a>
<span class="tooltiptext">{{ chart.notes }}</span>
</div>
</div> </div>
{% endfor %} <div id="leftpanel" class="grid_2 alpha">
{% block left_panel %}
{% for templateName in leftTemplates %}
{% include templateName %}
{% endfor %}
{% endblock %}
</div>
<div id="middlepanel" class="grid_9">
{% block middle_panel %}
{% for templateName in middleTemplates %}
<div class="grid_9">
{% include templateName %}
</div>
{% endfor %}
{% endblock %}
</div>
<div id="rightpanel" class="grid_1">
{% block right_panel %}
<p>&nbsp;</p>
{% endblock %}
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -5850,6 +5850,8 @@ def workout_comparison_view2(request,id1=0,id2=0,xparam='distance',
# Flex thumbnails # Flex thumbnails
@login_required() @login_required()
def workout_workflow_view(request,id): def workout_workflow_view(request,id):
request.session['referer'] = absolute(request)['PATH']
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
try: try:
row = Workout.objects.get(id=id) row = Workout.objects.get(id=id)
except Workout.DoesNotExist: except Workout.DoesNotExist:
@@ -5876,28 +5878,28 @@ def workout_workflow_view(request,id):
charts = [] charts = []
if favorites: if favorites:
for f in favorites: charts = thumbnails_set(r,id,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})
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, return render(request,
'workflow.html', 'workflow.html',
{ {
'middleTemplates':middleTemplates,
'leftTemplates':leftTemplates,
'charts':charts, 'charts':charts,
'workout':row, 'workout':row,
}) 'statcharts':statcharts,
})
# The famous flex chart # The famous flex chart
def workout_flexchart3_view(request,*args,**kwargs): def workout_flexchart3_view(request,*args,**kwargs):
@@ -6810,7 +6812,10 @@ def workout_add_chart_view(request,id,plotnr=1):
imagename=imagename) 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) return HttpResponseRedirect(url)