From b82abace6552a9d942e163e40c2f23f26a2f48e6 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 8 Oct 2018 21:18:42 +0200 Subject: [PATCH] otw interactive power plot --- rowers/templates/menu_workout.html | 26 ++++++- rowers/templates/otwinteractive.html | 103 +++++++++------------------ rowers/templatetags/rowerfilters.py | 18 +++++ rowers/views.py | 70 +++++++++++++++--- 4 files changed, 139 insertions(+), 78 deletions(-) diff --git a/rowers/templates/menu_workout.html b/rowers/templates/menu_workout.html index a199264d..db23a003 100644 --- a/rowers/templates/menu_workout.html +++ b/rowers/templates/menu_workout.html @@ -1,3 +1,4 @@ +{% load rowerfilters %}

Workout

  • @@ -5,10 +6,17 @@
    • + {% if user.is_authenticated and workout|may_edit:request %}  View + {% else %} + +  View + + {% endif %}
    • + {% if user.is_authenticated and workout|may_edit:request %}
    •  Edit @@ -19,6 +27,7 @@  Intervals
    • + {% endif %}
    •  Statistics @@ -28,12 +37,14 @@  Compare -
    • + + {% if user.is_authenticated and workout|may_edit:request %}
    •  Delete
    • + {% endif %}
  • @@ -45,13 +56,21 @@  Flex Chart
  • + {% if workout|water %}
  •  Map
  • +
  • + +  OTW Power + +
  • + {% endif %}
+ {% if user.is_authenticated and workout|may_edit:request %}
  • @@ -76,11 +95,13 @@  Heart Rate (Pie)
  • + {% if workout|water %}
  •  OTW Power
  • + {% endif %}
  • @@ -128,6 +149,7 @@
      + {% if workout|water %}
    •  Wind @@ -143,9 +165,11 @@  OTW Power
    • + {% endif %}
    •  In-Stroke Metrics
  • + {% endif %} diff --git a/rowers/templates/otwinteractive.html b/rowers/templates/otwinteractive.html index 66159c5b..33898af5 100644 --- a/rowers/templates/otwinteractive.html +++ b/rowers/templates/otwinteractive.html @@ -1,83 +1,50 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} {% block title %}View Workout {% endblock %} -{% block content %} +{% block main %} - - + + - {{ interactiveplot |safe }} - - - +{{ interactiveplot |safe }} -
    +

    Interactive Plot

    - -

    Interactive Plot

    - - {% if user.is_authenticated and mayedit %} -
    -

    - Edit Workout -

    -
    -
    -

    - Advanced Edit -

    - -
    -
    - Edit Wind Data -
    -
    - Edit Stream Data -
    -
    - OTW Power -
    - {% endif %} -
    -
    +
      +
    • {{ the_div|safe }} -
    + +
  • +

    +

    Notes

    +
      +
    • + Is your erg pace slower than you expected? This may be a sign of room for improvement regarding your technique. An alternative explanation is that your team mates are fatter than they told you! For example, put 80.0 kg if your four consists of 2 70kg guys and 2 90kg guys. +
    • +
    • + In order to speed up the calculation, we are running the calculation only for every 10th datapoint, using interpolation in between. Some very fine pace shifts may disappear. +
    • +
    • + While the wind and stream correction is fairly reliable, the OTW to OTE conversion sometimes throws errors. Those data points are omitted and replaced by interpolated values. We are sorry if this messed up some of your plots. +
    • +
    • + Read more details about the way we calculate things here. +
    • +
    +

    +
  • -
    -

    -

    Notes

    -
      -
    • Is your erg pace slower than you expected? This may be a sign of room for improvement regarding your technique. An alternative explanation is that your team mates are fatter than they told you! For example, put 80.0 kg if your four consists of 2 70kg guys and 2 90kg guys.
    • -
    • In order to speed up the calculation, we are running the calculation only for every 10th datapoint, using interpolation in between. Some very fine pace shifts may disappear.
    • -
    • While the wind and stream correction is fairly reliable, the OTW to OTE conversion sometimes throws errors. Those data points are omitted and replaced by interpolated values. We are sorry if this messed up some of your plots.
    • -
    • Read more details about the way we calculate things here.
    • -
    -

    + -
    +{% endblock %} -{% endblock %} \ No newline at end of file +{% block sidebar %} +{% include 'menu_workout.html' %} +{% endblock %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 3ee73f33..51629331 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -13,6 +13,8 @@ from rowers.plannedsessions import ( race_can_register, race_can_submit,race_rower_status ) +from rowers.types import otwtypes + def strfdelta(tdelta): minutes,seconds = divmod(tdelta.seconds,60) tenths = int(tdelta.microseconds/1e5) @@ -48,6 +50,10 @@ def secondstotimestring(tdelta): return res +@register.filter +def water(workout): + return workout.workouttype in otwtypes + @register.filter def ddays(ddelta): return ddelta.days+1 @@ -120,6 +126,18 @@ def is_session_manager(id,user): return ps.manager == user +from rowers.models import checkworkoutuser + +@register.filter +def may_edit(workout,request): + mayedit = 0 + if request.user == workout.user.user: + mayedit = True + if checkworkoutuser(request.user,workout): + mayedit = True + + return mayedit + @register.filter(name='times') def times(number): return range(number) diff --git a/rowers/views.py b/rowers/views.py index c00d72df..79416dfb 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -7132,6 +7132,12 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): w = get_workout(id) r = getrower(request.user) + mayedit = 0 + if request.user == w.user.user: + mayedit=1 + if checkworkoutuser(request.user,w): + mayedit=1 + if (checkworkoutuser(request.user,w)==False): message = "You are not allowed to edit this workout" messages.error(request,message) @@ -7246,6 +7252,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): 'otwsetpower.html', {'workout':w, 'rower':w, + 'mayedit':mayedit, 'active':'nav-workouts', 'breadcrumbs':breadcrumbs, 'teams':get_my_teams(request.user), @@ -7255,6 +7262,12 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): @login_required() def instroke_view(request,id=0): w = get_workout(id) + r = getrower(request.user) + mayedit = 0 + if request.user == w.user.user: + mayedit=1 + if checkworkoutuser(request.user,w): + mayedit=1 breadcrumbs = [ { @@ -7298,6 +7311,7 @@ def instroke_view(request,id=0): 'rower':r, 'active':'nav-workouts', 'breadcrumbs':breadcrumbs, + 'mayedit':mayedit, 'teams':get_my_teams(request.user), 'instrokemetrics':instrokemetrics, }) @@ -7727,6 +7741,12 @@ def workout_stats_view(request,id=0,message="",successmessage=""): r = getrower(request.user) w = get_workout(id) + mayedit = 0 + if request.user == w.user.user: + mayedit=1 + if checkworkoutuser(request.user,w): + mayedit=1 + breadcrumbs = [ { 'url':'/rowers/list-workouts', @@ -7877,6 +7897,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""): 'teams':get_my_teams(request.user), 'workout':w, 'rower':r, + 'mayedit':mayedit, 'breadcrumbs':breadcrumbs, 'active':'nav-workouts', 'workstrokesonly':workstrokesonly, @@ -8555,14 +8576,31 @@ def workout_biginteractive_view(request,id=0,message="",successmessage=""): # The interactive plot with wind corrected pace for OTW outings def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): - row = get_workout(id) + w = get_workout(id) + r = getrower(request.user) + + breadcrumbs = [ + { + 'url':'/rowers/list-workouts', + 'name':'Workouts' + }, + { + 'url':get_workout_default_page(request,id), + 'name': str(w.id) + }, + { + 'url':reverse(workout_otwpowerplot_view,kwargs={'id':id}), + 'name': 'Interactive OTW Power Plot' + } + + ] # check if user is owner of this workout # create interactive plot - f1 = row.csvfilename - u = row.user.user + f1 = w.csvfilename + u = w.user.user # r = getrower(u) promember=0 @@ -8572,7 +8610,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): result = request.user.is_authenticated() and ispromember(request.user) if result: promember=1 - if request.user == row.user.user: + if request.user == w.user.user: mayedit=1 # create interactive plot @@ -8585,7 +8623,10 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): return render(request, 'otwinteractive.html', - {'workout':row, + {'workout':w, + 'rower':r, + 'active':'nav-workouts', + 'breadcrumbs':breadcrumbs, 'teams':get_my_teams(request.user), 'interactiveplot':script, 'the_div':div, @@ -9354,6 +9395,7 @@ def course_upload_view(request): def workout_add_chart_view(request,id,plotnr=1): w = get_workout(id) + r = getrower(request.user) plotnr = int(plotnr) @@ -9378,10 +9420,9 @@ def workout_add_chart_view(request,id,plotnr=1): except KeyError: request.session['async_tasks'] = [(jobid,'make_plot')] - try: - url = request.session['referer'] - except KeyError: - url = "/rowers/workout/"+str(w.id)+"/edit" + + url = reverse(r.defaultlandingpage,kwargs={'id':str(w.id)}) + return HttpResponseRedirect(url) @@ -14617,11 +14658,22 @@ class WorkoutDelete(DeleteView): } ] + + mayedit=0 + if not self.request.user.is_anonymous(): + r = getrower(self.request.user) + result = self.request.user.is_authenticated() and ispromember(self.request.user) + if result: + promember=1 + if self.request.user == self.object.user.user: + mayedit=1 context['active'] = 'nav-workouts' context['rower'] = getrower(self.request.user) context['breadcrumbs'] = breadcrumbs context['workout'] = self.object + context['mayedit'] = mayedit + context['promember'] = promember return context