Private
Public Access
1
0

Merge branch 'feature/backtoworkflow' into develop

This commit is contained in:
Sander Roosendaal
2017-10-20 21:40:18 +02:00
24 changed files with 220 additions and 26 deletions
+10 -1
View File
@@ -2510,7 +2510,16 @@ def thumbnails_set(r,id,favorites):
columns += [f.yparam2 for f in favorites]
columns += ['time']
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True)
try:
rowdata = dataprep.getsmallrowdata_db(columns,ids=[id],doclean=True)
except:
return [
{'script':"",
'div':"",
'notes':""
}]
rowdata.dropna(axis=1,how='all',inplace=True)
if rowdata.empty:
+6 -1
View File
@@ -24,7 +24,12 @@
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 suffix_2 omega">
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2 omega">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
</p>
+6 -1
View File
@@ -23,7 +23,12 @@
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 suffix_2 omega">
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2 omega">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
</p>
+6 -1
View File
@@ -15,7 +15,12 @@
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 suffix_2 omega">
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2 omega">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced Edit</a>
</p>
+6 -1
View File
@@ -32,7 +32,12 @@
<a class="button gray small" href="/rowers/workout/{{ id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 suffix_8 omega">
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2 suffix_6 omega">
<p>
<a class="button gray small" href="/rowers/workout/{{ id }}/advanced">Advanced Edit</a>
</p>
+1
View File
@@ -1,5 +1,6 @@
{% if charts %}
<h2>Flex Charts</h2>
<p>Click on the thumbnails to view the full chart.</p>
{% for chart in charts %}
<div class="grid_3 alpha">
<big>{{ forloop.counter }}</big>
+7 -1
View File
@@ -43,7 +43,13 @@
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 suffix_2 omega">
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2 omega">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced Edit</a>
</p>
+8 -2
View File
@@ -14,7 +14,13 @@
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</p>
</div>
<div class="grid_2 suffix_2 omega">
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2 omega">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced Edit</a>
</p>
@@ -62,4 +68,4 @@
{% endblock %}
{% endblock %}
+31
View File
@@ -0,0 +1,31 @@
{% load rowerfilters %}
{% load tz %}
<div class="grid_6 suffix_3 alpha">
<table width=100%>
<tr>
{% localtime on %}
<th>Date/Time:</th><td>{{ workout.startdatetime|localtime}}</td>
{% endlocaltime %}
</tr><tr>
<th>Distance:</th><td>{{ workout.distance }}m</td>
</tr><tr>
<th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td>
</tr><tr>
<th>Public link to this workout</th>
<td>
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
</td>
</tr><tr>
<th>Comments</th>
<td>
<a href="/rowers/workout/{{ workout.id }}/comment">Comment ({{ aantalcomments }})</a>
</td>
</tr><tr>
<th>Public link to interactive chart</th>
<td>
<a href="/rowers/workout/{{ workout.id }}/interactiveplot">https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot</a>
<td>
</tr>
</table>
</div>
+5
View File
@@ -0,0 +1,5 @@
<div class="grid_2 alpha">
<p>
<a class="button red small" href="/rowers/workout/{{ workout.id }}/deleteconfirm">Delete</a>
</p>
</div>
+5
View File
@@ -0,0 +1,5 @@
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export Workout</a>
</p>
</div>
+9
View File
@@ -0,0 +1,9 @@
<div style="height:100%;" id="theplot" class="grid_9 alpha flexplot">
{{ mapdiv|safe }}
{{ mapscript|safe }}
</div>
+5
View File
@@ -0,0 +1,5 @@
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/map">Map View</a>
</p>
</div>
+14
View File
@@ -0,0 +1,14 @@
<div class="grid_9">
<div class="grid_1 alpha">
<div class="fb-share-button" data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}" data-layout="button" data-size="small" data-mobile-iframe="false">
<a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a>
</div>
</div>
<div class="grid_1 suffix_7 omega">
<a class="twitter-share-button"
href="https://twitter.com/intent/tweet"
data-url="https://rowsandall.com/rowers/workout/{{ workout.id }}"
data-text="@rowsandall #rowingdata">Tweet</a>
</div>
+14
View File
@@ -0,0 +1,14 @@
<div class="grid_2 alpha">
<div class="fb-share-button" data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}" data-layout="button" data-size="small" data-mobile-iframe="false">
<a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a>
</div>
</div>
<div class="grid_2 alpha">
<p>&nbsp;</p>
<a class="twitter-share-button"
href="https://twitter.com/intent/tweet"
data-url="https://rowsandall.com/rowers/workout/{{ workout.id }}"
data-text="@rowsandall #rowingdata">Tweet</a>
</div>
+4 -1
View File
@@ -29,7 +29,10 @@
</div>
</div>
<div class="grid_6 alpha">
<div class="grid_2 prefix_4 alpha">
<div class="grid_2 prefix_2 alpha">
<p><a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a></p>
</div>
<div class="grid_2 omega">
<p><a class="button blue small" href="/rowers/workout/{{ workout.id }}/wind">Wind Edit</a></p>
</div>
</div>
+1 -1
View File
@@ -23,7 +23,7 @@
</div>
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
+4 -1
View File
@@ -28,7 +28,10 @@
</div>
</div>
<div class="grid_6 alpha">
<div class="grid_2 prefix_4 alpha">
<div class="grid_2 prefix_2 alpha">
<p><a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a></p>
</div>
<div class="grid_2 omega">
<p><a class="button blue small" href="/rowers/workout/{{ workout.id }}/stream">Stream Edit</a></p>
</div>
</div>
-4
View File
@@ -3,7 +3,6 @@
{% load rowerfilters %}
{% load tz %}
{% get_current_timezone as TIME_ZONE %}
{% block title %}{{ workout.name }}{% endblock %}
@@ -40,9 +39,6 @@
{% include templateName %}
{% endfor %}
{% endblock %}
<div class="grid_2 alpha">
<p>Click on the thumbnails to view the full chart</p>
</div>
</div>
<div id="middlepanel" class="grid_9">
{% block middle_panel %}
+6 -1
View File
@@ -44,7 +44,12 @@
</div>
</div>
<div class="grid_6 alpha">
<div class="grid_2 prefix_2 alpha">
<div class="grid_2 alpha">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/map">Map View</a>
</p>
+1 -1
View File
@@ -18,7 +18,7 @@
</div>
<div class="grid_2">
<p>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
</p>
</div>
-1
View File
@@ -118,7 +118,6 @@ def user_teams(user):
return teams
@register.filter
def has_teams(user):
try:
+12 -3
View File
@@ -9,15 +9,23 @@ workflowmiddlepanel = (
('panel_statcharts.html','Static Charts'),
('flexthumbnails.html','Flex Charts'),
('panel_summary.html','Summary'),
('panel_map.html','Map'),
('panel_comments.html','Basic Info and Links'),
('panel_middlesocial.html','Social Media Share Buttons'),
)
defaultmiddle = ['panel_statcharts.html',
defaultmiddle = ['panel_middlesocial.html',
'panel_statcharts.html',
'flexthumbnails.html',
'panel_summary.html']
'panel_summary.html',
'panel_map.html']
workflowleftpanel = (
('panel_navigationheader.html','Navigation Header'),
('panel_editbuttons.html','Edit Workout Button'),
('panel_delete.html','Delete Workout Button'),
('panel_export.html','Export Workout Button'),
('panel_social.html','Social Media Share Buttons'),
('panel_advancededit.html','Advanced Workout Edit Button'),
('panel_editintervals.html','Edit Intervals Button'),
('panel_stats.html','Workout Statistics Button'),
@@ -25,7 +33,8 @@ workflowleftpanel = (
('panel_geekyheader.html','Geeky Header'),
('panel_editwind.html','Edit Wind Data'),
('panel_editstream.html','Edit Stream Data'),
('panel_otwpower.html','Run OTW Power Calculations')
('panel_otwpower.html','Run OTW Power Calculations'),
('panel_mapview.html','Map'),
)
defaultleft = [
+59 -5
View File
@@ -12,6 +12,7 @@ from PIL import Image
from numbers import Number
from django.views.generic.base import TemplateView
from django.db.models import Q
from django import template
from django.db import IntegrityError, transaction
from django.shortcuts import render
from django.http import (
@@ -157,6 +158,27 @@ from interactiveplots import *
# Define the API documentation
schema_view = get_swagger_view(title='Rowsandall API')
# Test if row data include candidates
def rowhascoordinates(row):
# create interactive plot
f1 = row.csvfilename
u = row.user.user
r = getrower(u)
rowdata = rdata(f1)
hascoordinates = 1
if rowdata != 0:
try:
latitude = rowdata.df[' latitude']
if not latitude.std():
hascoordinates = 0
except KeyError,AttributeError:
hascoordinates = 0
else:
hascoordinates = 0
return hascoordinates
# Custom error pages with Rowsandall headers
def error500_view(request):
response = render_to_response('500.html', {},
@@ -5231,7 +5253,11 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
kwargs = {
'id':int(id)}
url = reverse(workout_advanced_view,kwargs=kwargs)
try:
url = request.session['referer']
except KeyError:
url = reverse(workout_advanced_view,kwargs=kwargs)
response = HttpResponseRedirect(url)
return response
@@ -6006,16 +6032,42 @@ def workout_workflow_view(request,id):
charts = []
if favorites:
if favorites and 'flexthumbnails.html' in r.workflowmiddlepanel:
charts = thumbnails_set(r,id,favorites)
if charts[0]['script'] == '':
charts = []
if 'panel_map.html' in r.workflowmiddlepanel and rowhascoordinates(row):
rowdata = rdata(row.csvfilename)
mapscript,mapdiv = leaflet_chart2(rowdata.df[' latitude'],
rowdata.df[' longitude'],
row.name)
else:
mapscript = ''
mapdiv = ''
statcharts = GraphImage.objects.filter(workout=row)
# This will be user configurable in the future
middleTemplates = r.workflowmiddlepanel
leftTemplates = r.workflowleftpanel
middleTemplates = []
for t in r.workflowmiddlepanel:
try:
template.loader.get_template(t)
middleTemplates.append(t)
except template.TemplateDoesNotExist:
pass
leftTemplates = []
for t in r.workflowleftpanel:
try:
template.loader.get_template(t)
leftTemplates.append(t)
except template.TemplateDoesNotExist:
pass
return render(request,
'workflow.html',
{
@@ -6023,6 +6075,8 @@ def workout_workflow_view(request,id):
'leftTemplates':leftTemplates,
'charts':charts,
'workout':row,
'mapscript':mapscript,
'mapdiv':mapdiv,
'statcharts':statcharts,
})