Private
Public Access
1
0

link to compare from planned session

This commit is contained in:
Sander Roosendaal
2018-11-15 12:11:10 +01:00
parent 1b414dbb30
commit 9921e7d777
4 changed files with 146 additions and 78 deletions

View File

@@ -127,6 +127,10 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
<p>
<a href="/rowers/sessions/{{ psdict.id.1 }}/compare"
title="Compare the workouts of all athletes who did this session">Compare Workouts</a>
</p>
</li> </li>
{% if coursescript %} {% if coursescript %}
<li class="grid_2"> <li class="grid_2">

View File

@@ -112,7 +112,7 @@
<li class="grid_2 maxheight"> <li class="grid_2 maxheight">
{% if workouts %} {% if workouts %}
<form enctype="multipart/form-data" <form enctype="multipart/form-data"
action="/rowers/multi-compare" action="/rowers/multi-compare/"
method="post"> method="post">
<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/> <input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>

View File

@@ -342,8 +342,9 @@ urlpatterns = [
url(r'^workout/(?P<id>\d+)/runkeeperuploadw/$',views.workout_runkeeper_upload_view), url(r'^workout/(?P<id>\d+)/runkeeperuploadw/$',views.workout_runkeeper_upload_view),
url(r'^workout/(?P<id>\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view), url(r'^workout/(?P<id>\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view),
url(r'^workout/(?P<id>\d+)/tpuploadw/$',views.workout_tp_upload_view), url(r'^workout/(?P<id>\d+)/tpuploadw/$',views.workout_tp_upload_view),
url(r'^multi-compare/workout/(?P<id>\d+)$',views.multi_compare_view), url(r'^multi-compare/workout/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.multi_compare_view),
url(r'^multi-compare$',views.multi_compare_view), url(r'^multi-compare/workout/(?P<id>\d+)/$',views.multi_compare_view),
url(r'^multi-compare/$',views.multi_compare_view),
url(r'^user-boxplot/user/(?P<userid>\d+)$',views.boxplot_view), url(r'^user-boxplot/user/(?P<userid>\d+)$',views.boxplot_view),
url(r'^user-boxplot$',views.boxplot_view), url(r'^user-boxplot$',views.boxplot_view),
url(r'^user-boxplot-data$',views.boxplot_view_data), url(r'^user-boxplot-data$',views.boxplot_view_data),
@@ -486,12 +487,14 @@ urlpatterns = [
url(r'^sessions/multicreate/user/(?P<userid>\d+)/$', url(r'^sessions/multicreate/user/(?P<userid>\d+)/$',
views.plannedsession_multicreate_view), views.plannedsession_multicreate_view),
url(r'^sessions/(?P<id>\d+)/edit/$',views.plannedsession_edit_view), url(r'^sessions/(?P<id>\d+)/edit/$',views.plannedsession_edit_view),
url(r'^sessions/(?P<id>\d+)/compare/$',views.plannedsession_compare_view),
url(r'^sessions/(?P<id>\d+)/compare/user/(?P<userid>\d+)/$',views.plannedsession_compare_view),
url(r'^sessions/(?P<id>\d+)/edit/user/(?P<userid>\d+)/$',views.plannedsession_edit_view), url(r'^sessions/(?P<id>\d+)/edit/user/(?P<userid>\d+)/$',views.plannedsession_edit_view),
url(r'^sessions/(?P<id>\d+)/clone/user/(?P<userid>\d+)/$',views.plannedsession_clone_view), url(r'^sessions/(?P<id>\d+)/clone/user/(?P<userid>\d+)/$',views.plannedsession_clone_view),
url(r'^sessions/(?P<id>\d+)/clone/$',views.plannedsession_clone_view), url(r'^sessions/(?P<id>\d+)/clone/$',views.plannedsession_clone_view),
url(r'^sessions/(?P<id>\d+)$',views.plannedsession_view, url(r'^sessions/(?P<id>\d+)/$',views.plannedsession_view,
name='plannedsession_view'), name='plannedsession_view'),
url(r'^sessions/(?P<id>\d+)/user/(?P<userid>\d+)$',views.plannedsession_view, url(r'^sessions/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.plannedsession_view,
name='plannedsession_view'), name='plannedsession_view'),
url(r'^sessions/(?P<pk>\d+)/deleteconfirm$',views.PlannedSessionDelete.as_view()), url(r'^sessions/(?P<pk>\d+)/deleteconfirm$',views.PlannedSessionDelete.as_view()),
url(r'^sessions/(?P<pk>\d+)/delete$',views.PlannedSessionDelete.as_view(), url(r'^sessions/(?P<pk>\d+)/delete$',views.PlannedSessionDelete.as_view(),

View File

@@ -5350,6 +5350,8 @@ def team_comparison_select(request,
r = getrequestrower(request,userid=userid) r = getrequestrower(request,userid=userid)
requestrower = getrower(request.user) requestrower = getrower(request.user)
request.session.pop('ps',None)
if 'waterboattype' in request.session: if 'waterboattype' in request.session:
waterboattype = request.session['waterboattype'] waterboattype = request.session['waterboattype']
else: else:
@@ -5546,10 +5548,53 @@ def team_comparison_select(request,
'teams':get_my_teams(request.user), '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 # Team comparison
@login_required() @login_required()
def multi_compare_view(request,id=0): def multi_compare_view(request,id=0,userid=0):
promember=0 promember=0
if not request.user.is_anonymous(): if not request.user.is_anonymous():
r = getrower(request.user) r = getrower(request.user)
@@ -5574,45 +5619,9 @@ def multi_compare_view(request,id=0):
int(w.id): w.__unicode__() for w in workouts 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: else:
return HttpResponse("Form is not valid") 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) chartform = ChartParamChoiceForm(request.POST)
if chartform.is_valid(): if chartform.is_valid():
xparam = chartform.cleaned_data['xparam'] xparam = chartform.cleaned_data['xparam']
@@ -5626,6 +5635,32 @@ def multi_compare_view(request,id=0):
labeldict = { labeldict = {
int(w.id): w.__unicode__() for w in workouts int(w.id): w.__unicode__() for w in workouts
} }
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
}
)
else:
url = reverse(team_comparison_select,
kwargs={
'id':id,
'teamid':0})
return HttpResponseRedirect(url)
res = interactive_multiple_compare_chart(ids,xparam,yparam, res = interactive_multiple_compare_chart(ids,xparam,yparam,
promember=promember, promember=promember,
@@ -5633,8 +5668,12 @@ def multi_compare_view(request,id=0):
labeldict=labeldict) labeldict=labeldict)
script = res[0] script = res[0]
div = res[1] div = res[1]
errormessage = res[3]
if errormessage != '':
messages.error(request,errormessage)
r = getrower(request.user) r = getrower(request.user)
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts',
@@ -5650,6 +5689,34 @@ def multi_compare_view(request,id=0):
} }
] ]
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', return render(request,'multicompare.html',
{'interactiveplot':script, {'interactiveplot':script,
@@ -5663,12 +5730,6 @@ def multi_compare_view(request,id=0):
'teams':get_my_teams(request.user), 'teams':get_my_teams(request.user),
}) })
else:
url = reverse(team_comparison_select,
kwargs={
'id':id,
'teamid':0})
return HttpResponseRedirect(url)
# Multi Flex Chart with Grouping # Multi Flex Chart with Grouping
@user_passes_test(ispromember,login_url="/rowers/promembership", @user_passes_test(ispromember,login_url="/rowers/promembership",