link to compare from planned session
This commit is contained in:
@@ -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">
|
||||||
|
|||||||
@@ -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/>
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
149
rowers/views.py
149
rowers/views.py
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user