diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index e1495525..6168cb56 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -16,7 +16,7 @@ queuelow = django_rq.get_queue('low') queuehigh = django_rq.get_queue('low') from rowers.models import ( - Rower, Workout, + Rower, Workout,Team, GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle, TrainingPlan,PlannedSession, ) @@ -118,6 +118,9 @@ def get_session_metrics(ps): def is_session_complete(r,ps): status = 'not done' + + if r not in ps.rower.all(): + return 0,'not assigned' ws = Workout.objects.filter(user=r,plannedsession=ps) @@ -253,6 +256,25 @@ def get_dates_timeperiod(timeperiod): return startdate,enddate +def get_sessions_manager(m,teamid=0,startdate=date.today(), + enddate=date.today()+timezone.timedelta(+1000)): + if teamid: + t = Team.objects.get(id=teamid) + sps = PlannedSession.objects.filter( + team__in=[t], + manager=m, + startdate__lte=enddate, + enddate__gte=startdate, + ).order_by("startdate","enddate") + else: + sps = PlannedSession.objects.filter( + manager=m, + startdate__lte=enddate, + enddate__gte=startdate, + ).order_by("startdate","enddate") + + return sps + def get_sessions(r,startdate=date.today(), enddate=date.today()+timezone.timedelta(+1000)): @@ -264,17 +286,6 @@ def get_sessions(r,startdate=date.today(), return sps -def get_sessions_manager(manager,startdate=date.today(), - enddate=date.today()+timezone.timedelta(+1000)): - - sps = PlannedSession.objects.filter( - manager=manager, - startdate__lte=enddate, - enddate__gte=startdate, - ).order_by("startdate","enddate").exclude(team__isnull=True) - - return sps - def get_workouts_session(r,ps): ws = Workout.objects.filter(user=r,plannedsession=ps) diff --git a/rowers/templates/plannedsessionscoach.html b/rowers/templates/plannedsessionscoach.html new file mode 100644 index 00000000..dceb066a --- /dev/null +++ b/rowers/templates/plannedsessionscoach.html @@ -0,0 +1,126 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Planned Sessions{% endblock %} + +{% block content %} +
+ {% include "planningbuttons.html" %} +
+
+ {% if theteam %} +

Coach Overview. Team {{ theteam.name }}

+ {% else %} +

Coach Overview

+ {% endif %} +
+ +{% if user.is_authenticated and user|is_manager %} + + +{% endif %} + +
+ + + + + + + {% for r in rowers %} + + {% endfor %} + + + + {% for key, thedict in statusdict.items %} + + + + + {% for r in rowers %} + + {% endfor %} + + {% endfor %} + +
On or afterOn or beforeName
+ {{ r.user.first_name }} {{ r.user.last_name }} +
+ {{ thedict|lookup:'startdate'|date:"Y-m-d" }} + + {{ thedict|lookup:'enddate'|date:"Y-m-d" }} + + + {{ thedict|lookup:'name' }} + + + {% if thedict|lookup:'results'|lookup:r.id == 'completed' %} +   + {% elif thedict|lookup:'results'|lookup:r.id == 'partial' %} +   + {% elif thedict|lookup:'results'|lookup:r.id == 'not done' %} +   + {% elif thedict|lookup:'results'|lookup:r.id == 'not assigned' %} +   + {% else %} +   + {% endif %} +
+
+ + + + +{% endblock %} diff --git a/rowers/templates/plannedsessionview.html b/rowers/templates/plannedsessionview.html index c01326e3..b15bbde9 100644 --- a/rowers/templates/plannedsessionview.html +++ b/rowers/templates/plannedsessionview.html @@ -9,6 +9,16 @@ {% include "planningbuttons.html" %} +
+
+ {% if user.is_authenticated and psdict.id.1|is_session_manager:user %} + + Edit Session + {% else %} +   + {% endif %} +
+

Session {{ psdict.name.1 }}

diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index bfdf2751..cd9acd8b 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -100,6 +100,16 @@ def ualookup(dict, key): return s +from rowers.models import PlannedSession +@register.filter +def is_session_manager(id,user): + try: + ps = PlannedSession.objects.get(id=id) + except PlannedSession.DoesNotExist: + return False + + return ps.manager == user + @register.filter(name='times') def times(number): return range(number) diff --git a/rowers/urls.py b/rowers/urls.py index d502a7d2..b630c026 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -448,6 +448,11 @@ urlpatterns = [ views.plannedsessions_manage_view), url(r'^sessions/manage/(?P[\w\ ]+.*)$', views.plannedsessions_manage_view), + url(r'^sessions/coach$',views.plannedsessions_coach_view), + url(r'^sessions/coach/(?P[\w\ ]+.*)/team/(?P\d+)$', + views.plannedsessions_coach_view), + url(r'^sessions/coach/(?P[\w\ ]+.*)$', + views.plannedsessions_coach_view), url(r'^sessions/?$',views.plannedsessions_view), url(r'^sessions/rower/(?P\d+)$',views.plannedsessions_view), url(r'^sessions/(?P[\w\ ]+.*)/rower/(?P\d+)$',views.plannedsessions_view), diff --git a/rowers/utils.py b/rowers/utils.py index 27fad934..cdb92131 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -294,6 +294,7 @@ def calculate_age(born): def my_dict_from_instance(instance,model): thedict = {} + thedict['id'] = instance.id for attr, value in instance.__dict__.iteritems(): try: diff --git a/rowers/views.py b/rowers/views.py index 2c9fee76..77cbd9ba 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -11854,6 +11854,58 @@ def plannedsession_teamedit_view(request,timeperiod='thisweek', 'plannedsessions':sps, }) +@user_passes_test(iscoachmember,login_url="/rowers/planmembership/", + redirect_field_name=None) +def plannedsessions_coach_view(request,timeperiod='thisweek', + teamid=0): + + startdate,enddate = get_dates_timeperiod(timeperiod) + + if teamid != 0: + try: + theteam = Team.objects.get(id=teamid) + except Team.DoesNotExist: + theteam = False + else: + theteam = False + + sps = get_sessions_manager(request.user,teamid=teamid, + enddate=enddate, + startdate=startdate) + + rowers = [] + for ps in sps: + rowers += ps.rower.all() + + rowers = list(set(rowers)) + + statusdict = {} + + for ps in sps: + rowerstatus = {} + for r in rowers: + ratio, status = is_session_complete(r,ps) + rowerstatus[r.id] = status + sessiondict = { + 'results':rowerstatus, + 'name': ps.name, + 'startdate': ps.startdate, + 'enddate': ps.enddate, + } + statusdict[ps.id] = sessiondict + + myteams = Team.objects.filter(manager=request.user) + + return render(request,'plannedsessionscoach.html', + { + 'myteams':myteams, + 'plannedsessions':sps, + 'statusdict':statusdict, + 'timeperiod':timeperiod, + 'rowers':rowers, + 'theteam':theteam, + } + ) @login_required() def plannedsessions_view(request,timeperiod='thisweek',rowerid=0): @@ -12181,6 +12233,7 @@ def plannedsession_view(request,id=0,rowerid=0): resultsdict = pd.DataFrame(resultsdict).transpose().to_dict() psdict = my_dict_from_instance(ps,PlannedSession) + print psdict ws = get_workouts_session(r,ps)