added workflow view
This commit is contained in:
@@ -2499,24 +2499,63 @@ 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]
|
||||
@@ -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)
|
||||
|
||||
11
rowers/templates/flexthumbnails.html
Normal file
11
rowers/templates/flexthumbnails.html
Normal 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 %}
|
||||
15
rowers/templates/panel_editbuttons.html
Normal file
15
rowers/templates/panel_editbuttons.html
Normal 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>
|
||||
8
rowers/templates/panel_statcharts.html
Normal file
8
rowers/templates/panel_statcharts.html
Normal 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 %}
|
||||
20
rowers/templates/panel_staticchart.html
Normal file
20
rowers/templates/panel_staticchart.html
Normal 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>
|
||||
5
rowers/templates/panel_stats.html
Normal file
5
rowers/templates/panel_stats.html
Normal 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>
|
||||
5
rowers/templates/panel_summary.html
Normal file
5
rowers/templates/panel_summary.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<p>
|
||||
<pre>
|
||||
{{ workout.summary }}
|
||||
</pre>
|
||||
</p>
|
||||
@@ -25,17 +25,29 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="workouts" class="grid_12 alpha">
|
||||
{% for chart in charts %}
|
||||
<div class="grid_3 alpha">
|
||||
<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 id="page" class="grid_12 alpha">
|
||||
<div class="grid_10 prefix_2 alpha">
|
||||
<h1>{{ workout.name }}</h1>
|
||||
</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> </p>
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -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:
|
||||
@@ -5877,27 +5879,27 @@ 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 = thumbnails_set(r,id,favorites)
|
||||
|
||||
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,
|
||||
'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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user