diff --git a/rowers/templates/menu_workout.html b/rowers/templates/menu_workout.html
index 40cc7f00..5c06f2a4 100644
--- a/rowers/templates/menu_workout.html
+++ b/rowers/templates/menu_workout.html
@@ -291,13 +291,13 @@
- {% if workout.impeller %}• {% else %} {% endif %}Use GPS data
+ {% if workout.impeller %} {% else %}• {% endif %}Use GPS data
- {% if workout.impeller %} {% else %}• {% endif %}Use Impeller data
+ {% if workout.impeller %}• {% else %} {% endif %}Use Impeller data
{% endif %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 5696c0d4..97a45af6 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -283,6 +283,10 @@ urlpatterns = [
re_path(r'^graph/(?P\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails,
name='get_thumbnails'),
+ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/otwuseimpeller/$',views.otw_use_impeller,
+ name='otw_use_impeller'),
+ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/otwusegps/$',views.otw_use_gps,
+ name='otw_use_gps'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking,
name='workout_toggle_ranking'),
re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript,
diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py
index 592cbc14..f72537f9 100644
--- a/rowers/views/workoutviews.py
+++ b/rowers/views/workoutviews.py
@@ -456,18 +456,54 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
'teams':get_my_teams(request.user),
})
-# Test asynchronous tasking and messaging
-#@login_required()
-#def workout_test_task_view(request,id=0):
-# row = Workout.objects.get(id=id)
-# res = myqueue(queuehigh,addcomment2,request.user.id,row.id)#
-#
-#
-# url = reverse('workout_edit_view',
-# kwargs = {
-# 'id':int(id),
-# })
-# return HttpResponseRedirect(url)
+# Switch from GPS to Impeller (only for SpeedCoach 2, if impeller data)
+@login_required
+def otw_use_impeller(request,id=0):
+ w = get_workout(id)
+
+ if (checkworkoutuser(request.user,w)==False):
+ raise PermissionDenied("Access denied")
+
+ row = rdata(w.csvfilename)
+ success = row.use_impellerdata()
+ if success:
+ row.write_csv(w.csvfilename)
+ dataprep.update_strokedata(w.id,row.df)
+ w.impeller = True
+ w.save()
+ messages.info(request,'The distance and speed data are now based on Impeller data')
+ else:
+ messages.error(request,'No impeller data found')
+
+ url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
+
+ return HttpResponseRedirect(url)
+
+
+# Switch from Impeller to GPS (only for SpeedCoach 2, if impeller data)
+@login_required
+def otw_use_gps(request,id=0):
+ w = get_workout(id)
+
+ if (checkworkoutuser(request.user,w)==False):
+ raise PermissionDenied("Access denied")
+
+ row = rdata(w.csvfilename)
+ success = row.use_gpsdata()
+ if success:
+ row.write_csv(w.csvfilename)
+ dataprep.update_strokedata(w.id,row.df)
+ w.impeller = False
+ w.save()
+ messages.info(request,'The distance and speed data are now based on GPS data')
+ else:
+ messages.error(request,'No GPS data found')
+
+ url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
+
+ return HttpResponseRedirect(url)
+
+
# Show Stroke power histogram for a workout
@login_required()