Merge branch 'develop' into feature/workoutslist
This commit is contained in:
@@ -8,6 +8,7 @@ from rowers.views.statements import *
|
||||
import collections
|
||||
import simplejson
|
||||
from jinja2 import Template,Environment,FileSystemLoader
|
||||
from rowers.rower_rules import can_view_session
|
||||
|
||||
def floatformat(x,prec=2): # pragma: no cover
|
||||
return '{x}'.format(x=round(x,prec))
|
||||
@@ -34,7 +35,7 @@ defaultoptions = {
|
||||
message="This functionality requires a Pro plan or higher. If you are already a Pro user, please log in to access this functionality",
|
||||
redirect_field_name=None)
|
||||
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
|
||||
def analysis_new(request,userid=0,function='boxplot',teamid=0,id=''):
|
||||
def analysis_new(request,userid=0,function='boxplot',teamid=0,id='',session=0):
|
||||
r = getrequestrower(request, userid=userid)
|
||||
user = r.user
|
||||
userid = user.id
|
||||
@@ -52,6 +53,13 @@ def analysis_new(request,userid=0,function='boxplot',teamid=0,id=''):
|
||||
except Team.DoesNotExist:
|
||||
theteam = None
|
||||
|
||||
try:
|
||||
thesession = PlannedSession.objects.get(id=session)
|
||||
if not can_view_session(user,thesession):
|
||||
raise PermissionDenied("you cannot view this session")
|
||||
except PlannedSession.DoesNotExist:
|
||||
thesession = None
|
||||
|
||||
|
||||
if 'options' in request.session:
|
||||
options = request.session['options']
|
||||
@@ -199,6 +207,8 @@ def analysis_new(request,userid=0,function='boxplot',teamid=0,id=''):
|
||||
startdatetime__lte=enddate,
|
||||
workouttype__in=modalities,
|
||||
)
|
||||
elif thesession is not None:
|
||||
workouts = get_workouts_session(r,thesession)
|
||||
else:
|
||||
workouts = Workout.objects.filter(user=r,
|
||||
startdatetime__gte=startdate,
|
||||
|
||||
@@ -2024,163 +2024,19 @@ def plannedsession_compare_view(request,id=0,userid=0):
|
||||
request.session['plottype'] = plottype
|
||||
request.session['ps'] = ps.id
|
||||
|
||||
teams = ps.team.all()
|
||||
|
||||
if ids:
|
||||
url = reverse('multi_compare_view',
|
||||
kwargs={'userid':userid,'id':encoder.encode_hex(ids[0])})
|
||||
url = reverse('analysis_new',
|
||||
kwargs={
|
||||
'session':ps.id,
|
||||
'id':encoder.encode_hex(ids[0]),
|
||||
'function':'compare'})
|
||||
else:
|
||||
url = reverse('plannedsession_view',kwargs={'id':ps.id})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Team comparison
|
||||
@login_required()
|
||||
def multi_compare_view(request,id=0,userid=0):
|
||||
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)
|
||||
chartform = ChartParamChoiceForm(request.POST)
|
||||
if form.is_valid() and chartform.is_valid():
|
||||
cd = form.cleaned_data
|
||||
workouts = cd['workouts']
|
||||
xparam = chartform.cleaned_data['xparam']
|
||||
yparam = chartform.cleaned_data['yparam']
|
||||
plottype = chartform.cleaned_data['plottype']
|
||||
teamid = chartform.cleaned_data['teamid']
|
||||
ids = [int(w.id) for w in workouts]
|
||||
request.session['ids'] = ids
|
||||
|
||||
labeldict = {
|
||||
int(w.id): w.__str__() for w in workouts
|
||||
}
|
||||
|
||||
else: # pragma: no cover
|
||||
return HttpResponse("Form is not valid")
|
||||
elif request.method == 'POST' and 'ids' in request.session:
|
||||
chartform = ChartParamChoiceForm(request.POST)
|
||||
if chartform.is_valid():
|
||||
xparam = chartform.cleaned_data['xparam']
|
||||
yparam = chartform.cleaned_data['yparam']
|
||||
plottype = chartform.cleaned_data['plottype']
|
||||
teamid = chartform.cleaned_data['teamid']
|
||||
ids = request.session['ids']
|
||||
request.session['ids'] = ids
|
||||
workouts = []
|
||||
for id in ids:
|
||||
try:
|
||||
workouts.append(Workout.objects.get(id=id))
|
||||
except Workout.DoesNotExist: # pragma: no cover
|
||||
pass
|
||||
|
||||
labeldict = {
|
||||
int(w.id): w.__str__() 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 = []
|
||||
for id in ids:
|
||||
try:
|
||||
workouts.append(Workout.objects.get(id=id))
|
||||
except Workout.DoesNotExist: # pragma: no cover
|
||||
pass
|
||||
|
||||
labeldict = {
|
||||
int(w.id): w.__str__() 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,
|
||||
promember=promember,
|
||||
plottype=plottype,
|
||||
labeldict=labeldict)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
errormessage = res[3]
|
||||
if errormessage != '': # pragma: no cover
|
||||
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: # pragma: no cover
|
||||
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),
|
||||
})
|
||||
|
||||
|
||||
# List Workouts
|
||||
@login_required()
|
||||
|
||||
Reference in New Issue
Block a user