link to compare from planned session
This commit is contained in:
@@ -127,6 +127,10 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</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>
|
||||
{% if coursescript %}
|
||||
<li class="grid_2">
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<li class="grid_2 maxheight">
|
||||
{% if workouts %}
|
||||
<form enctype="multipart/form-data"
|
||||
action="/rowers/multi-compare"
|
||||
action="/rowers/multi-compare/"
|
||||
method="post">
|
||||
|
||||
<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+)/underarmouruploadw/$',views.workout_underarmour_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$',views.multi_compare_view),
|
||||
url(r'^multi-compare/workout/(?P<id>\d+)/user/(?P<userid>\d+)/$',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$',views.boxplot_view),
|
||||
url(r'^user-boxplot-data$',views.boxplot_view_data),
|
||||
@@ -486,12 +487,14 @@ urlpatterns = [
|
||||
url(r'^sessions/multicreate/user/(?P<userid>\d+)/$',
|
||||
views.plannedsession_multicreate_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+)/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+)$',views.plannedsession_view,
|
||||
url(r'^sessions/(?P<id>\d+)/$',views.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'),
|
||||
url(r'^sessions/(?P<pk>\d+)/deleteconfirm$',views.PlannedSessionDelete.as_view()),
|
||||
url(r'^sessions/(?P<pk>\d+)/delete$',views.PlannedSessionDelete.as_view(),
|
||||
|
||||
207
rowers/views.py
207
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",
|
||||
|
||||
Reference in New Issue
Block a user