diff --git a/rowers/templates/menu_other.html b/rowers/templates/menu_other.html index 71789d84..f56facfa 100644 --- a/rowers/templates/menu_other.html +++ b/rowers/templates/menu_other.html @@ -10,9 +10,11 @@
  • {% if team %} -  Compare + +  Compare {% else %} -  Compare + +  Compare {% endif %}
  • diff --git a/rowers/templates/menu_workouts.html b/rowers/templates/menu_workouts.html index 93b4d31a..24c0bc8f 100644 --- a/rowers/templates/menu_workouts.html +++ b/rowers/templates/menu_workouts.html @@ -10,10 +10,10 @@
  • {% if team %} - +  Compare {% else %} - +  Compare {% endif %}
  • diff --git a/rowers/templates/team_compare_select.html b/rowers/templates/team_compare_select.html deleted file mode 100644 index 19140d18..00000000 --- a/rowers/templates/team_compare_select.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "newbase.html" %} -{% load static %} -{% load rowerfilters %} - -{% block title %}Workouts{% endblock %} - -{% block main %} - - - - - -

    {{ team.name }} Compare Workouts

    - - -
      -
    • -

      Select two or more workouts on the left, set your plot settings, - and press submit

      -

      - You can use the date and search forms to search through all - workouts from this team. -

      -

      - TIP: Agree with your team members to put tags (e.g. '8x500m') - in the notes section of - your workouts. That makes it easy to search. -

      -
    • -
    • -
      - - {{ dateform.as_table }} -
      - - {{ modalityform.as_table }} -
      - {% csrf_token %} -

      - -

      -
      -
    • -
    • -
      - {{ searchform }} - -
      -
    • -
    • - {% if workouts %} -
      - - Toggle All
      - - - {{ form.as_table }} -
      - - {% else %} -

      No workouts found

      - {% endif %} -
    • -
    • -

      - {% csrf_token %} - - {{ chartform.as_table }} -
      -

      -

      - -

      - -
    • -
    - -{% endblock %} - -{% block sidebar %} -{% include 'menu_workouts.html' %} -{% endblock %} diff --git a/rowers/templates/teambuttons.html b/rowers/templates/teambuttons.html index e45b807e..828d1769 100644 --- a/rowers/templates/teambuttons.html +++ b/rowers/templates/teambuttons.html @@ -6,7 +6,7 @@

    - Multi Compare + Multi Compare

    diff --git a/rowers/tests/test_plans.py b/rowers/tests/test_plans.py index f6f5b73f..cc5de299 100644 --- a/rowers/tests/test_plans.py +++ b/rowers/tests/test_plans.py @@ -16,6 +16,7 @@ from django.db import transaction import json from rowers.views.workoutviews import plannedsession_compare_view +from rowers.views.analysisviews import analysis_new from rowers.views.otherviews import download_fit from rowers.opaque import encoder from django.utils.crypto import get_random_string @@ -443,7 +444,11 @@ class SessionLinkTest(TestCase): url = reverse(plannedsession_compare_view,kwargs={'id':ps.id,'userid':self.u.id}) response = self.c.get(url,follow=True) - expected_url = reverse('multi_compare_view',kwargs={'userid':self.u.id,'id':encoder.encode_hex(w.id)}) + expected_url = reverse('analysis_new', + kwargs={'function':'compare', + 'id':encoder.encode_hex(w.id), + 'session':ps.id, + }) self.assertRedirects(response,expected_url=expected_url, status_code=302,target_status_code=200) @@ -473,7 +478,7 @@ class SessionLinkTest(TestCase): session.save() request.user = self.u - response = multi_compare_view(request,id=str(w.id)) + response = analysis_new(request,id=encoder.encode_hex(w.id)) self.assertEqual(response.status_code,200) # and adding a get @@ -491,7 +496,7 @@ class SessionLinkTest(TestCase): session.save() request.user = self.u - response = multi_compare_view(request,id=str(w.id)) + response = analysis_new(request,id=encoder.encode_hex(w.id)) self.assertEqual(response.status_code,200) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 168c1261..d0b9235f 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/urls.py b/rowers/urls.py index 6f55af06..cffc7775 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -316,9 +316,12 @@ urlpatterns = [ re_path(r'^workouts-join/user/(?P\d+)$',views.workouts_join_view,name='workouts_join_view'), re_path(r'^workouts-join-select/$',views.workouts_join_select,name='workouts_join_select'), re_path(r'^workouts-join-select/user/(?P\d+)/$',views.workouts_join_select,name='workouts_join_select'), + re_path(r'^user-analysis-select/(?P\w.*)/team/(?P\d+)/workout/(?P\b[0-9A-Fa-f]+\b)/$',views.analysis_new,name='analysis_new'), + re_path(r'^user-analysis-select/(?P\w.*)/session/(?P\d+)/workout/(?P\b[0-9A-Fa-f]+\b)/$',views.analysis_new,name='analysis_new'), re_path(r'^user-analysis-select/(?P\w.*)/workout/(?P\b[0-9A-Fa-f]+\b)/$',views.analysis_new,name='analysis_new'), re_path(r'^user-analysis-select/(?P\w.*)/user/(?P\d+)/$',views.analysis_new,name='analysis_new'), re_path(r'^user-analysis-select/(?P\w.*)/team/(?P\d+)/$',views.analysis_new,name='analysis_new'), + re_path(r'^user-analysis-select/team/(?P\d+)/workout/(?P\b[0-9A-Fa-f]+\b)/$',views.analysis_new,name='analysis_new'), re_path(r'^user-analysis-select/user/(?P\d+)/$',views.analysis_new,name='analysis_new'), re_path(r'^user-analysis-select/team/(?P\d+)/$',views.analysis_new,name='analysis_new'), re_path(r'^user-analysis-select/(?P\w.*)/$',views.analysis_new,name='analysis_new'), diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 9f62d9bf..03af6174 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -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)) @@ -35,7 +36,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 @@ -53,6 +54,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'] @@ -211,6 +219,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, diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 2a8b783d..5bdc17ef 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -2047,9 +2047,14 @@ 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})