+ 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