From 618e64579cee9a4e7f780833a4b3127b9c0ed5ea Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 22 Nov 2017 18:06:45 +0100 Subject: [PATCH] join working but needs improvement (form with title) --- rowers/dataprep.py | 63 +++++++++ rowers/templates/team_compare_select.html | 2 +- rowers/templates/workout_join_select.html | 164 ++++++++++++++++++++++ rowers/urls.py | 1 + rowers/views.py | 42 +++++- 5 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 rowers/templates/workout_join_select.html diff --git a/rowers/dataprep.py b/rowers/dataprep.py index f99a9468..d8002909 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -158,6 +158,69 @@ def filter_df(datadf, fieldname, value, largerthan=True): return datadf +# joins workouts +def join_workouts(r,ids,title='Joined Workout', + parent=None, + setprivate=False, + forceunit='lbs'): + + message = None + + summary = '' + if parent: + oarlength = parent.oarlength + inboard = parent.inboard + workouttype = parent.workouttype + notes = parent.notes + summary = parent.summary + if parent.privacy == 'hidden': + makeprivate = True + else: + makeprivate = False + + startdatetime = parent.startdatetime + else: + oarlength = 2.89 + inboard = 0.88 + workouttype = 'rower' + notes = '' + summary = '' + makeprivate = False + startdatetime = timezone.now() + + if setprivate: + makeprivate = True + + # reorder in chronological order + ws = Workout.objects.filter(id__in=ids).order_by("date", "starttime") + files = [w.csvfilename for w in ws] + + row = rdata(files[0]) + + files = files[1:] + + while len(files): + row2 = rdata(files[0]) + if row2 != 0: + row = row+row2 + files = files[1:] + + timestr = strftime("%Y%m%d-%H%M%S") + csvfilename = 'media/df_' + timestr + '.csv' + + row.write_csv(csvfilename,gzip=True) + id, message = save_workout_database(csvfilename, r, + workouttype=workouttype, + title=title, + notes=notes, + oarlength=oarlength, + inboard=inboard, + makeprivate=makeprivate, + dosmooth=False, + consistencychecks=False) + + return (id, message) + def df_resample(datadf): # time stamps must be in seconds diff --git a/rowers/templates/team_compare_select.html b/rowers/templates/team_compare_select.html index 3a7dd211..176f5c69 100644 --- a/rowers/templates/team_compare_select.html +++ b/rowers/templates/team_compare_select.html @@ -146,7 +146,7 @@

Warning: You are on an experimental part of the site. Use at your own risk.

Select two or more workouts on the left, set your plot settings below, - and press submit"

+ and press submit

{% csrf_token %} {{ chartform.as_table }} diff --git a/rowers/templates/workout_join_select.html b/rowers/templates/workout_join_select.html new file mode 100644 index 00000000..10af25ea --- /dev/null +++ b/rowers/templates/workout_join_select.html @@ -0,0 +1,164 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Workouts{% endblock %} + +{% block content %} + + + + + + +
+ {% include "teambuttons.html" with teamid=team.id team=team %} +
+
+

{{ team.name }} Team Workouts

+
+
+
+ + {% if team %} +
+ {% else %} + + {% endif %} +
+
+ {{ dateform.as_table }} +
+ {% csrf_token %} +
+
+ +
+ + {% if team %} +
+ {% else %} + + {% endif %} +
+ + {{ modalityform.as_table }} +
+ {% csrf_token %} +
+
+ +
+
+ +
+ {% if team %} +
+ {% else %} + +{% endif %} +
+ +
+
+ +
+
+
+ + + + +
+
+ + + {% if workouts %} + + Toggle All
+ + + {{ form.as_table }} +
+ +{% else %} +

No workouts found

+{% endif %} +
+
+

Warning: You are on an experimental part of the site. Use at your own risk.

+

Select two or more workouts on the left, + and press submit

+
+

+ {% csrf_token %} + +

+
+
+

You can use the date and search forms above to search through all + workouts from this team.

+
+
+
+ + +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 287d34af..193b2a2e 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -132,6 +132,7 @@ urlpatterns = [ url(r'^team-compare-select/(?P\w+.*)/(?P\w+.*)$',views.team_comparison_select), url(r'^team-compare-select/$',views.team_comparison_select), url(r'^workouts-join-select/team/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.workouts_join_select), + url(r'^workouts-join$',views.workouts_join_view), url(r'^workouts-join-select/team/(?P\d+)/$',views.workouts_join_select), url(r'^workouts-join-select/(?P\w+.*)/(?P\w+.*)$',views.workouts_join_select), url(r'^workouts-join-select/$',views.workouts_join_select), diff --git a/rowers/views.py b/rowers/views.py index bb22d952..74ea0e9c 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4191,6 +4191,43 @@ def workout_setprivate_view(request,id, return HttpResponseRedirect(url) # Joining workout +@user_passes_test(ispromember,login_url="/",redirect_field_name=None) +def workouts_join_view(request): + promember=0 + if not request.user.is_anonymous(): + r = getrower(request.user) + result = request.user.is_authenticated() and ispromember(request.user) + if result: + promember=1 + + + if request.method == 'POST' and 'workouts' in request.POST: + form = WorkoutMultipleCompareForm(request.POST) + if form.is_valid(): + cd = form.cleaned_data + workouts = cd['workouts'] + ids = [int(w.id) for w in workouts] + request.session['ids'] = ids + + + id,message = dataprep.join_workouts(r,ids) + + if message: + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) + + return HttpResponseRedirect(url) + + else: + return HttpResponse("Form is not valid") + else: + url = reverse(workouts_join_select) + return HttpResponseRedirect(url) + @user_passes_test(ispromember,login_url="/",redirect_field_name=None) def workouts_join_select(request, startdatestring="", @@ -4337,7 +4374,7 @@ def workouts_join_select(request, messages.info(request,successmessage) messages.error(request,message) - return render(request, 'team_compare_select.html', + return render(request, 'workout_join_select.html', {'workouts': workouts, 'dateform':dateform, 'startdate':startdate, @@ -8816,7 +8853,8 @@ def workout_upload_view(request, optionsform = UploadOptionsForm(request.POST) if form.is_valid(): - f = request.FILES['file'] +# f = request.FILES['file'] + f = form.cleaned_data['file'] res = handle_uploaded_file(f) t = form.cleaned_data['title']