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 %}
+
+
+
+
+
+ | On or after |
+ On or before |
+ Name |
+ {% for r in rowers %}
+
+ {{ r.user.first_name }} {{ r.user.last_name }}
+ |
+ {% endfor %}
+
+
+
+ {% for key, thedict in statusdict.items %}
+
+ |
+ {{ thedict|lookup:'startdate'|date:"Y-m-d" }}
+ |
+
+ {{ thedict|lookup:'enddate'|date:"Y-m-d" }}
+ |
+
+
+ {{ thedict|lookup:'name' }}
+
+ |
+ {% for r in rowers %}
+
+ {% 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 %}
+ |
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+
+
+
+
+{% 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)