diff --git a/rowers/templates/menu_workout.html b/rowers/templates/menu_workout.html
index 1a10cc85..b46f79c2 100644
--- a/rowers/templates/menu_workout.html
+++ b/rowers/templates/menu_workout.html
@@ -26,6 +26,18 @@
Intervals
+ {% if workout|water %}
+
+
+ Measured Courses
+
+
+ {% endif %}
+
+
+ Intervals
+
+
{% endif %}
{% if user.is_authenticated %}
+
+
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_workout.html' %}
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 2a30043a..7e07eeb3 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -650,6 +650,8 @@ urlpatterns = [
re_path(r'^register/thankyou/$', TemplateView.as_view(template_name='registerthankyou.html'), name='registerthankyou'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/workflow/$',views.workout_workflow_view,
name='workout_workflow_view'),
+ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/courses/$',views.workout_course_view,
+ name='workout_course_view'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/flexchart/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)/(?P\w+)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/flexchart/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)/(?P\w+.*)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/flexchart/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py
index 06b7e6d5..3d43e00f 100644
--- a/rowers/views/workoutviews.py
+++ b/rowers/views/workoutviews.py
@@ -6058,6 +6058,54 @@ def workout_fusion_view(request,id1=0,id2=1):
'workout2':w2,
})
+# See attached courses
+@login_required()
+@permission_required('workout.change_workout',fn=get_workout_by_opaqueid, raise_exception=True)
+def workout_course_view(request, id):
+ row = get_workout_by_opaqueid(request,id)
+ r = getrower(request.user)
+ breadcrumbs = [
+ {
+ 'url':'/rowers/list-workouts/',
+ 'name':'Workouts'
+ },
+ {
+ 'url':get_workout_default_page(request,encoder.encode_hex(row.id)),
+ 'name': row.name
+ },
+ {
+ 'url':reverse('workout_course_view',kwargs={'id':id}),
+ 'name': 'Measured Courses'
+ }
+
+ ]
+
+ courses = []
+ courseselecform = CourseSelectForm()
+ has_latlon,lat_mean,lon_mean = dataprep.workout_has_latlon(row.id)
+ if has_latlon:
+ courses = getnearestcourses([lat_mean,lon_mean],GeoCourse.objects.all(),whatisnear=25,
+ strict=True)
+ courseselectform = CourseSelectForm(choices=courses)
+
+ # get results
+ records = VirtualRaceResult.objects.filter(
+ course__isnull=False,
+ workoutid=row.id,
+ coursecompleted=True).order_by("duration","-distance")
+
+
+ return render(request, 'workout_courses.html',
+ {'workout':row,
+ 'rower':r,
+ 'breadcrumbs':breadcrumbs,
+ 'active':'nav-workouts',
+ 'teams':get_my_teams(request.user),
+ 'courses':courses,
+ 'courseselectform':courseselectform,
+ 'records':records,
+ })
+
# Edit the splits/summary
@login_required()