From 9921e7d777440ede0ba801a3206a9223a6a8177e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 15 Nov 2018 12:11:10 +0100 Subject: [PATCH] link to compare from planned session --- rowers/templates/plannedsessionview.html | 4 + rowers/templates/team_compare_select.html | 2 +- rowers/urls.py | 11 +- rowers/views.py | 207 ++++++++++++++-------- 4 files changed, 146 insertions(+), 78 deletions(-) diff --git a/rowers/templates/plannedsessionview.html b/rowers/templates/plannedsessionview.html index fdb42941..662063eb 100644 --- a/rowers/templates/plannedsessionview.html +++ b/rowers/templates/plannedsessionview.html @@ -127,6 +127,10 @@ {% endfor %} +

+ Compare Workouts +

{% if coursescript %}
  • diff --git a/rowers/templates/team_compare_select.html b/rowers/templates/team_compare_select.html index 4b6b2796..63c3ae41 100644 --- a/rowers/templates/team_compare_select.html +++ b/rowers/templates/team_compare_select.html @@ -112,7 +112,7 @@
  • {% if workouts %}
    Toggle All
    diff --git a/rowers/urls.py b/rowers/urls.py index 32a32256..8b00c5fb 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -342,8 +342,9 @@ urlpatterns = [ url(r'^workout/(?P\d+)/runkeeperuploadw/$',views.workout_runkeeper_upload_view), url(r'^workout/(?P\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view), url(r'^workout/(?P\d+)/tpuploadw/$',views.workout_tp_upload_view), - url(r'^multi-compare/workout/(?P\d+)$',views.multi_compare_view), - url(r'^multi-compare$',views.multi_compare_view), + url(r'^multi-compare/workout/(?P\d+)/user/(?P\d+)/$',views.multi_compare_view), + url(r'^multi-compare/workout/(?P\d+)/$',views.multi_compare_view), + url(r'^multi-compare/$',views.multi_compare_view), url(r'^user-boxplot/user/(?P\d+)$',views.boxplot_view), url(r'^user-boxplot$',views.boxplot_view), url(r'^user-boxplot-data$',views.boxplot_view_data), @@ -486,12 +487,14 @@ urlpatterns = [ url(r'^sessions/multicreate/user/(?P\d+)/$', views.plannedsession_multicreate_view), url(r'^sessions/(?P\d+)/edit/$',views.plannedsession_edit_view), + url(r'^sessions/(?P\d+)/compare/$',views.plannedsession_compare_view), + url(r'^sessions/(?P\d+)/compare/user/(?P\d+)/$',views.plannedsession_compare_view), url(r'^sessions/(?P\d+)/edit/user/(?P\d+)/$',views.plannedsession_edit_view), url(r'^sessions/(?P\d+)/clone/user/(?P\d+)/$',views.plannedsession_clone_view), url(r'^sessions/(?P\d+)/clone/$',views.plannedsession_clone_view), - url(r'^sessions/(?P\d+)$',views.plannedsession_view, + url(r'^sessions/(?P\d+)/$',views.plannedsession_view, name='plannedsession_view'), - url(r'^sessions/(?P\d+)/user/(?P\d+)$',views.plannedsession_view, + url(r'^sessions/(?P\d+)/user/(?P\d+)/$',views.plannedsession_view, name='plannedsession_view'), url(r'^sessions/(?P\d+)/deleteconfirm$',views.PlannedSessionDelete.as_view()), url(r'^sessions/(?P\d+)/delete$',views.PlannedSessionDelete.as_view(), diff --git a/rowers/views.py b/rowers/views.py index 98fb7c0c..4530f252 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5350,6 +5350,8 @@ def team_comparison_select(request, r = getrequestrower(request,userid=userid) requestrower = getrower(request.user) + request.session.pop('ps',None) + if 'waterboattype' in request.session: waterboattype = request.session['waterboattype'] else: @@ -5546,10 +5548,53 @@ def team_comparison_select(request, 'teams':get_my_teams(request.user), }) +@login_required() +def plannedsession_compare_view(request,id=0,userid=0): + r = getrequestrower(request,userid=userid) + + try: + ps = PlannedSession.objects.get(id=id) + except PlannedSession.DoesNotExist: + raise Http404("Planned session does not exist") + + m = ps.manager + mm = m.rower + + if ps.manager != request.user: + if r.rowerplan == 'coach': + teams = Team.objects.filter(manager=request.user) + members = Rower.objects.filter(team__in=teams).distinct() + teamusers = [m.user for m in members] + if ps.manager not in teamusers: + raise PermissionDenied("You do not have access to this session") + elif r not in ps.rower.all(): + raise PermissionDenied("You do not have access to this session") + + workouts = Workout.objects.filter(plannedsession=ps) + + ids = [int(w.id) for w in workouts] + + labeldict = { + int(w.id): w.__unicode__() for w in workouts + } + + xparam = 'time' + yparam = 'hr' + plottype = 'line' + + request.session['ids'] = ids + request.session['xparam'] = xparam + request.session['yparam'] = yparam + request.session['plottype'] = plottype + request.session['ps'] = ps.id + + url = reverse(multi_compare_view,kwargs={'userid':userid,'id':ids[0]}) + + return HttpResponseRedirect(url) # Team comparison @login_required() -def multi_compare_view(request,id=0): +def multi_compare_view(request,id=0,userid=0): promember=0 if not request.user.is_anonymous(): r = getrower(request.user) @@ -5574,45 +5619,9 @@ def multi_compare_view(request,id=0): int(w.id): w.__unicode__() for w in workouts } - res = interactive_multiple_compare_chart(ids,xparam,yparam, - promember=promember, - plottype=plottype, - labeldict=labeldict) - script = res[0] - div = res[1] - errormessage = res[3] - if errormessage != '': - messages.error(request,errormessage) - - r = getrower(request.user) - breadcrumbs = [ - { - 'url':'/rowers/list-workouts', - 'name':'Workouts' - }, - { - 'url':reverse(team_comparison_select,kwargs={'teamid':teamid}), - 'name': 'Compare Select' - }, - { - 'url':reverse(multi_compare_view), - 'name': 'Comparison Chart' - } - ] - return render(request,'multicompare.html', - {'interactiveplot':script, - 'the_div':div, - 'breadcrumbs':breadcrumbs, - 'rower':r, - 'active':'nav-workouts', - 'promember':promember, - 'teamid':teamid, - 'chartform':chartform, - 'teams':get_my_teams(request.user), - }) else: return HttpResponse("Form is not valid") - if request.method == 'POST' and 'ids' in request.session: + elif request.method == 'POST' and 'ids' in request.session: chartform = ChartParamChoiceForm(request.POST) if chartform.is_valid(): xparam = chartform.cleaned_data['xparam'] @@ -5626,42 +5635,24 @@ def multi_compare_view(request,id=0): labeldict = { int(w.id): w.__unicode__() for w in workouts } - - res = interactive_multiple_compare_chart(ids,xparam,yparam, - promember=promember, - plottype=plottype, - labeldict=labeldict) - script = res[0] - div = res[1] - - r = getrower(request.user) - breadcrumbs = [ - { - 'url':'/rowers/list-workouts', - 'name':'Workouts' - }, - { - 'url':reverse(team_comparison_select,kwargs={'teamid':teamid}), - 'name': 'Compare Select' - }, - { - 'url':reverse(multi_compare_view), - 'name': 'Comparison Chart' + elif 'ids' in request.session and 'plottype' in request.session: + xparam = request.session['xparam'] + yparam = request.session['yparam'] + plottype = request.session['plottype'] + teamid = 0 + ids = request.session['ids'] + workouts = [Workout.objects.get(id=id) for id in ids] + labeldict = { + int(w.id): w.__unicode__() for w in workouts + } + chartform = ChartParamChoiceForm( + initial = { + 'xparam':xparam, + 'yparam':yparam, + 'plottype':plottype, + 'teamid':teamid } - ] - - - return render(request,'multicompare.html', - {'interactiveplot':script, - 'the_div':div, - 'breadcrumbs':breadcrumbs, - 'rower':r, - 'active':'nav-workouts', - 'promember':promember, - 'teamid':teamid, - 'chartform':chartform, - 'teams':get_my_teams(request.user), - }) + ) else: url = reverse(team_comparison_select, @@ -5670,6 +5661,76 @@ def multi_compare_view(request,id=0): 'teamid':0}) return HttpResponseRedirect(url) + + res = interactive_multiple_compare_chart(ids,xparam,yparam, + promember=promember, + plottype=plottype, + labeldict=labeldict) + script = res[0] + div = res[1] + errormessage = res[3] + if errormessage != '': + messages.error(request,errormessage) + + r = getrower(request.user) + + breadcrumbs = [ + { + 'url':'/rowers/list-workouts', + 'name':'Workouts' + }, + { + 'url':reverse(team_comparison_select,kwargs={'teamid':teamid}), + 'name': 'Compare Select' + }, + { + 'url':reverse(multi_compare_view), + 'name': 'Comparison Chart' + } + ] + + if 'ps' in request.session: + ps = PlannedSession.objects.get(id=int(request.session['ps'])) + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view, + kwargs={'userid':userid}), + 'name': 'Sessions' + }, + { + 'url':reverse(plannedsession_view, + kwargs={ + 'userid':userid, + 'id':ps.id, + } + ), + 'name': ps.id + }, + { + 'url':reverse(plannedsession_compare_view, + kwargs={ + 'userid':userid, + 'id':ps.id, + } + ), + 'name': 'Compare' + } + ] + + + return render(request,'multicompare.html', + {'interactiveplot':script, + 'the_div':div, + 'breadcrumbs':breadcrumbs, + 'rower':r, + 'active':'nav-workouts', + 'promember':promember, + 'teamid':teamid, + 'chartform':chartform, + 'teams':get_my_teams(request.user), + }) + + # Multi Flex Chart with Grouping @user_passes_test(ispromember,login_url="/rowers/promembership", message="This functionality requires a Pro plan or higher",