diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 242e6a53..12c0a1ec 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -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: diff --git a/rowers/templates/advancededit.html b/rowers/templates/advancededit.html index a79ebad3..0df1fff3 100644 --- a/rowers/templates/advancededit.html +++ b/rowers/templates/advancededit.html @@ -24,7 +24,12 @@ Edit Workout

-
+
+

+ Workflow View +

+
+

Export

diff --git a/rowers/templates/advancedotw.html b/rowers/templates/advancedotw.html index 7bd5340b..3c4999fc 100644 --- a/rowers/templates/advancedotw.html +++ b/rowers/templates/advancedotw.html @@ -23,7 +23,12 @@ Edit Workout

-
+
+

+ Workflow View +

+
+

Export

diff --git a/rowers/templates/export.html b/rowers/templates/export.html index 6ccd0bb6..b01ee514 100644 --- a/rowers/templates/export.html +++ b/rowers/templates/export.html @@ -15,7 +15,12 @@ Edit Workout

-
+
+

+ Workflow View +

+
+

Advanced Edit

diff --git a/rowers/templates/flexchart3otw.html b/rowers/templates/flexchart3otw.html index 5da6e48c..02e698d3 100644 --- a/rowers/templates/flexchart3otw.html +++ b/rowers/templates/flexchart3otw.html @@ -32,7 +32,12 @@ Edit Workout

-
+
+

+ Workflow View +

+
+

Advanced Edit

diff --git a/rowers/templates/flexthumbnails.html b/rowers/templates/flexthumbnails.html index 24d88ffc..e036ad44 100644 --- a/rowers/templates/flexthumbnails.html +++ b/rowers/templates/flexthumbnails.html @@ -1,5 +1,6 @@ {% if charts %}

Flex Charts

+

Click on the thumbnails to view the full chart.

{% for chart in charts %}
{{ forloop.counter }} diff --git a/rowers/templates/map_view.html b/rowers/templates/map_view.html index e48ec411..cde62d7f 100644 --- a/rowers/templates/map_view.html +++ b/rowers/templates/map_view.html @@ -43,7 +43,13 @@ Edit Workout

-
+
+

+ Workflow View +

+ +
+

Advanced Edit

diff --git a/rowers/templates/otwsetpower.html b/rowers/templates/otwsetpower.html index 30ad309d..51218c6a 100644 --- a/rowers/templates/otwsetpower.html +++ b/rowers/templates/otwsetpower.html @@ -14,7 +14,13 @@ Edit Workout

-
+
+

+ Workflow View +

+ +
+

Advanced Edit

@@ -62,4 +68,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/templates/panel_comments.html b/rowers/templates/panel_comments.html new file mode 100644 index 00000000..99de3bbc --- /dev/null +++ b/rowers/templates/panel_comments.html @@ -0,0 +1,31 @@ +{% load rowerfilters %} +{% load tz %} +
+ + +{% localtime on %} + +{% endlocaltime %} + + + + + + + + + + + + + + +
Date/Time:{{ workout.startdatetime|localtime}}
Distance:{{ workout.distance }}m
Duration:{{ workout.duration |durationprint:"%H:%M:%S.%f" }}
Public link to this workout + https://rowsandall.com/rowers/workout/{{ workout.id }} +
Comments + Comment ({{ aantalcomments }}) +
Public link to interactive chart + https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot + +
+
diff --git a/rowers/templates/panel_delete.html b/rowers/templates/panel_delete.html new file mode 100644 index 00000000..1668a635 --- /dev/null +++ b/rowers/templates/panel_delete.html @@ -0,0 +1,5 @@ +
+

+ Delete +

+
diff --git a/rowers/templates/panel_export.html b/rowers/templates/panel_export.html new file mode 100644 index 00000000..543df100 --- /dev/null +++ b/rowers/templates/panel_export.html @@ -0,0 +1,5 @@ + diff --git a/rowers/templates/panel_map.html b/rowers/templates/panel_map.html new file mode 100644 index 00000000..9fd40d8a --- /dev/null +++ b/rowers/templates/panel_map.html @@ -0,0 +1,9 @@ +
+ {{ mapdiv|safe }} + + + {{ mapscript|safe }} +
+ + + diff --git a/rowers/templates/panel_mapview.html b/rowers/templates/panel_mapview.html new file mode 100644 index 00000000..0d819ffa --- /dev/null +++ b/rowers/templates/panel_mapview.html @@ -0,0 +1,5 @@ +
+

+ Map View +

+
diff --git a/rowers/templates/panel_middlesocial.html b/rowers/templates/panel_middlesocial.html new file mode 100644 index 00000000..b1c917d2 --- /dev/null +++ b/rowers/templates/panel_middlesocial.html @@ -0,0 +1,14 @@ +
+
+
+ Share +
+
+
+ +
+ + diff --git a/rowers/templates/panel_social.html b/rowers/templates/panel_social.html new file mode 100644 index 00000000..a1c993de --- /dev/null +++ b/rowers/templates/panel_social.html @@ -0,0 +1,14 @@ +
+
+ Share +
+
+
+

 

+ +
+ + diff --git a/rowers/templates/streamedit.html b/rowers/templates/streamedit.html index 1e4ba1a0..b12def3c 100644 --- a/rowers/templates/streamedit.html +++ b/rowers/templates/streamedit.html @@ -29,7 +29,10 @@
- diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 8c3cf177..2d49567a 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -23,7 +23,7 @@
diff --git a/rowers/templates/windedit.html b/rowers/templates/windedit.html index d49dd272..e0eb56bb 100644 --- a/rowers/templates/windedit.html +++ b/rowers/templates/windedit.html @@ -28,7 +28,10 @@
- diff --git a/rowers/templates/workflow.html b/rowers/templates/workflow.html index 01a0d55c..87bae1e9 100644 --- a/rowers/templates/workflow.html +++ b/rowers/templates/workflow.html @@ -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 %} -
-

Click on the thumbnails to view the full chart

-
{% block middle_panel %} diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index 37cd8956..26edc221 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -44,7 +44,12 @@
-
+
+

+ Workflow View +

+
+

Map View

diff --git a/rowers/templates/workoutstats.html b/rowers/templates/workoutstats.html index 75dc0f8c..3a02f214 100644 --- a/rowers/templates/workoutstats.html +++ b/rowers/templates/workoutstats.html @@ -18,7 +18,7 @@
diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 12cd75b1..123faa9e 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -118,7 +118,6 @@ def user_teams(user): return teams - @register.filter def has_teams(user): try: diff --git a/rowers/utils.py b/rowers/utils.py index 205c74e9..23a04080 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -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 = [ diff --git a/rowers/views.py b/rowers/views.py index 0faed633..09238cbc 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -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, })