From 0480489519aa0ce981a67ead6cfe0a5f3b12a44e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 6 Mar 2017 15:23:13 +0100 Subject: [PATCH] initial nonfunct fusion form and view --- rowers/forms.py | 14 +++++++-- rowers/templates/fusion.html | 44 +++++++++++++++++++++++++++ rowers/urls.py | 1 + rowers/views.py | 59 ++++++++++++++++++++++++------------ 4 files changed, 96 insertions(+), 22 deletions(-) create mode 100644 rowers/templates/fusion.html diff --git a/rowers/forms.py b/rowers/forms.py index c4926376..79db0781 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -260,7 +260,7 @@ class WorkoutMultipleCompareForm(forms.Form): from rowers.interactiveplots import axlabels axlabels.pop('None') -axlabels = list(sorted(axlabels.items(), key = lambda x:x[1])) +parchoices = list(sorted(axlabels.items(), key = lambda x:x[1])) class ChartParamChoiceForm(forms.Form): @@ -268,7 +268,15 @@ class ChartParamChoiceForm(forms.Form): ('line','Line Plot'), ('scatter','Scatter Plot'), ) - xparam = forms.ChoiceField(choices=axlabels,initial='distance') - yparam = forms.ChoiceField(choices=axlabels,initial='hr') + xparam = forms.ChoiceField(choices=parchoices,initial='distance') + yparam = forms.ChoiceField(choices=parchoices,initial='hr') plottype = forms.ChoiceField(choices=plotchoices,initial='scatter') teamid = forms.IntegerField(widget=forms.HiddenInput()) + +axlabels.pop('time') +metricchoices = list(sorted(axlabels.items(), key = lambda x:x[1])) + +class FusionMetricChoiceForm(forms.Form): + columns = forms.MultipleChoiceField(choices=metricchoices, + initial=[], + widget=forms.CheckboxSelectMultiple()) diff --git a/rowers/templates/fusion.html b/rowers/templates/fusion.html new file mode 100644 index 00000000..bb0840d6 --- /dev/null +++ b/rowers/templates/fusion.html @@ -0,0 +1,44 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Workouts{% endblock %} + +{% block content %} + + +
+

Fusion Editor

+
+
+
+

+ Adding sensor data from workout {{ workout2.id }} into workout {{ workout1.id2 }}. + This will create a new workout. After you submit the form, you will be + taken to the newly created workout. If you are happy with the result, you + can delete the two original workouts manually. +

+

+ Workout 1: {{ workout1.name }} +

+

+ Workout 2: {{ workout2.name }} +

+

On the right hand side, please select the columns from workout 2 that + you want to replace the equivalent columns in workout 1.

+
+
+ +
+ + + {{ form.as_table }} +
+ {% csrf_token %} +
+
+ +
+
+ +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 24945f8e..b5a8629c 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -189,6 +189,7 @@ urlpatterns = [ url(r'^workout/(\d+)/interactiveplot$',views.workout_biginteractive_view), url(r'^workout/(\d+)/view$',views.workout_view), url(r'^workout/(\d+)$',views.workout_view), + url(r'^workout/fusion/(?P\d+)/(?P\d+)$',views.workout_fusion_view), url(r'^physics$',TemplateView.as_view(template_name='physics.html'),name='physics'), url(r'^workout/(\d+)/$',views.workout_view), url(r'^workout/(\d+)/addtimeplot$',views.workout_add_timeplot_view), diff --git a/rowers/views.py b/rowers/views.py index c5aaa86f..f32974de 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -26,7 +26,8 @@ from rowers.forms import ( StatsOptionsForm,PredictedPieceForm,DateRangeForm,DeltaDaysForm, EmailForm, RegistrationForm, RegistrationFormTermsOfService, RegistrationFormUniqueEmail,CNsummaryForm,UpdateWindForm, - UpdateStreamForm,WorkoutMultipleCompareForm,ChartParamChoiceForm + UpdateStreamForm,WorkoutMultipleCompareForm,ChartParamChoiceForm, + FusionMetricChoiceForm, ) from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart from rowers.models import ( @@ -2617,7 +2618,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""): # get data f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) # create bearing @@ -2732,7 +2733,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""): # create interactive plot f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) rowdata = rdata(f1) @@ -2892,7 +2893,7 @@ def workout_geeky_view(request,id=0,message="",successmessage=""): # create interactive plot f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) # create interactive plot @@ -3209,7 +3210,7 @@ def workout_advanced_view(request,id=0,message="",successmessage=""): # create interactive plot f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) # create interactive plot @@ -3527,7 +3528,7 @@ def workout_biginteractive_view(request,id=0,message="",successmessage=""): # create interactive plot f1 = row.csvfilename - u = request.user + u = row.user.user # r = Rower.objects.get(user=u) promember=0 @@ -3568,7 +3569,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): # create interactive plot f1 = row.csvfilename - u = request.user + u = row.user.user # r = Rower.objects.get(user=u) promember=0 @@ -3766,6 +3767,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): try: # check if valid ID exists (workout exists) row = Workout.objects.get(id=id) + form = WorkoutForm(instance=row) except Workout.DoesNotExist: raise Http404("Workout doesn't exist") @@ -3815,12 +3817,11 @@ def workout_edit_view(request,id=0,message="",successmessage=""): r.write_csv(row.csvfilename,gzip=True) dataprep.update_strokedata(id,r.df) successmessage = "Changes saved" - url = "/rowers/workout/"+str(row.id)+"/edit" url = reverse(workout_edit_view, kwargs = { 'id':str(row.id), 'successmessage':str(successmessage), - }) + }) response = HttpResponseRedirect(url) else: message = "You are not allowed to change this workout" @@ -3845,7 +3846,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): # create interactive plot f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) rowdata = rdata(f1) hascoordinates = 1 @@ -3914,7 +3915,7 @@ def workout_add_otw_powerplot_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, @@ -3971,7 +3972,7 @@ def workout_add_piechart_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, @@ -4029,7 +4030,7 @@ def workout_add_power_piechart_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, @@ -4085,7 +4086,7 @@ def workout_add_timeplot_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, @@ -4142,7 +4143,7 @@ def workout_add_distanceplot_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, @@ -4197,7 +4198,7 @@ def workout_add_distanceplot2_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, @@ -4254,7 +4255,7 @@ def workout_add_timeplot2_view(request,id): timestr = strftime("%Y%m%d-%H%M%S") imagename = f1+timestr+'.png' fullpathimagename = 'static/plots/'+imagename - u = request.user + u = w.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, @@ -4944,7 +4945,7 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): s = "" # still here - this is a workout we may edit f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, @@ -4984,6 +4985,26 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): ) return HttpResponseRedirect(url) +# Fuse two workouts +@login_required() +def workout_fusion_view(request,id1=0,id2=1): + try: + w1 = Workout.objects.get(id=id1) + w2 = Workout.objects.get(id=id2) + if (checkworkoutuser(request.user,w1)==False) or \ + (checkworkoutuser(request.user,w2)==False): + raise PermissionDenied("You are not allowed to use these workouts") + except Workout.DoesNotExist: + raise Http404("One of the workouts doesn't exist") + + form = FusionMetricChoiceForm() + + return render(request, 'fusion.html', + {'form':form, + 'workout1':w1, + 'workout2':w2, + }) + # Edit the splits/summary @login_required() @@ -4999,7 +5020,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" s = "" # still here - this is a workout we may edit f1 = row.csvfilename - u = request.user + u = row.user.user r = Rower.objects.get(user=u) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1,