Skip to content

Commit 78ca39f

Browse files
committed
checkpoint: start of a view showing all sessions associated with a document
- Legacy-Id: 10844
1 parent 8b87125 commit 78ca39f

7 files changed

Lines changed: 150 additions & 29 deletions

File tree

ietf/doc/urls_material.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
urlpatterns = patterns('ietf.doc.views_material',
44
url(r'^(?P<action>state|title|abstract|revise)/$', "edit_material", name="material_edit"),
5+
url(r'^meetings/$', "all_presentations", name="all_presentations"),
56
url(r'^sessions/$', "material_presentations", name="material_presentations"),
67
(r'^sessions/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
78
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/edit/$', "edit_material_presentations"),

ietf/doc/views_material.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from ietf.group.models import Group
1919
from ietf.group.utils import can_manage_materials
2020
from ietf.meeting.models import Session
21+
from ietf.meeting.utils import group_sessions
2122

2223
@login_required
2324
def choose_material_type(request, acronym):
@@ -318,3 +319,19 @@ def material_presentations(request, name, acronym=None, date=None, seq=None, wee
318319
'date': date,
319320
'week_day': week_day,
320321
})
322+
323+
def all_presentations(request, name):
324+
doc = get_object_or_404(Document, name=name)
325+
326+
327+
sessions = doc.session_set.filter(status__in=['sched','schedw','appr','canceled'],
328+
type__in=['session','plenary','other'])
329+
330+
future, in_progress, past = group_sessions(sessions)
331+
332+
return render(request, 'doc/material/all_presentations.html', {
333+
'doc': doc,
334+
'future': future,
335+
'in_progress': in_progress,
336+
'past' : past,
337+
})

ietf/group/info.py

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
from ietf.settings import MAILING_LIST_INFO_URL
6161
from ietf.mailtrigger.utils import gather_relevant_expansions
6262
from ietf.ietfauth.utils import has_role
63+
from ietf.meeting.utils import group_sessions
6364

6465
def roles(group, role_name):
6566
return Role.objects.filter(group=group, name=role_name).select_related("email", "person")
@@ -737,35 +738,7 @@ def meetings(request, acronym=None, group_type=None):
737738
meeting__date__gt=four_years_ago,
738739
type__in=['session','plenary','other'])
739740

740-
def sort_key(session):
741-
if session.meeting.type.slug=='ietf':
742-
official_sessions = session.timeslotassignments.filter(schedule=session.meeting.agenda)
743-
if official_sessions:
744-
return official_sessions.first().timeslot.time
745-
elif session.meeting.date:
746-
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
747-
else:
748-
return session.requested
749-
else:
750-
# TODO: use timeslots for interims once they have them
751-
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
752-
753-
for s in sessions:
754-
s.time=sort_key(s)
755-
756-
sessions = sorted(sessions,key=lambda s:s.time,reverse=True)
757-
758-
today = datetime.date.today()
759-
future = []
760-
in_progress = []
761-
past = []
762-
for s in sessions:
763-
if s.meeting.date > today:
764-
future.append(s)
765-
elif s.meeting.end_date() >= today:
766-
in_progress.append(s)
767-
else:
768-
past.append(s)
741+
future, in_progress, past = group_sessions(sessions)
769742

770743
can_edit = has_role(request.user,["Secretariat","Area Director"]) or group.has_role(request.user,["Chair","Secretary"])
771744

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django import template
2+
3+
register = template.Library()
4+
5+
@register.filter
6+
def presented_versions(session,doc):
7+
sp = session.sessionpresentation_set.filter(document=doc)
8+
if not sp:
9+
return "Document not in session"
10+
else:
11+
rev = sp.first().rev
12+
return rev if rev else "(current)"

ietf/meeting/utils.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import datetime
2+
3+
def group_sessions(sessions):
4+
5+
def sort_key(session):
6+
if session.meeting.type.slug=='ietf':
7+
official_sessions = session.timeslotassignments.filter(schedule=session.meeting.agenda)
8+
if official_sessions:
9+
return official_sessions.first().timeslot.time
10+
elif session.meeting.date:
11+
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
12+
else:
13+
return session.requested
14+
else:
15+
# TODO: use timeslots for interims once they have them
16+
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
17+
18+
for s in sessions:
19+
s.time=sort_key(s)
20+
21+
sessions = sorted(sessions,key=lambda s:s.time,reverse=True)
22+
23+
today = datetime.date.today()
24+
future = []
25+
in_progress = []
26+
past = []
27+
for s in sessions:
28+
if s.meeting.date > today:
29+
future.append(s)
30+
elif s.meeting.end_date() >= today:
31+
in_progress.append(s)
32+
else:
33+
past.append(s)
34+
35+
return future, in_progress, past
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{% extends "base.html" %}
2+
{# Copyright The IETF Trust 2015, All Rights Reserved #}
3+
{% load origin %}
4+
5+
{% block title %}Sessions linked to {{doc.name}}{% endblock %}
6+
7+
{% block content %}
8+
{% origin %}
9+
<h1>Sessions linked to {{doc.name}}{% if doc.title %}<br><small>{{doc.title}}</small>{% endif %}</h1>
10+
11+
{% if in_progress %}
12+
<div class="panel panel-default" id="inprogressmeets">
13+
<div class="panel-heading">Meetings in progress</div>
14+
<div class="panel-body">
15+
{% with sessions=in_progress %}
16+
{% include "doc/material/presentations-row.html" %}
17+
{% endwith %}
18+
</div>
19+
</div>
20+
{% endif %}
21+
22+
{% if future %}
23+
<div class="panel panel-default" id="futuremeets">
24+
<div class="panel-heading">Future meetings</div>
25+
<div class="panel-body">
26+
{% with sessions=future %}
27+
{% include "doc/material/presentations-row.html" %}
28+
{% endwith %}
29+
</div>
30+
</div>
31+
{% endif %}
32+
33+
{% if past %}
34+
<div class="panel panel-default" id="pastmeets">
35+
<div class="panel-heading">Past meetings</div>
36+
<div class="panel-body">
37+
{% with sessions=past %}
38+
{% include "doc/material/presentations-row.html" %}
39+
{% endwith %}
40+
</div>
41+
</div>
42+
{% endif %}
43+
44+
{% endblock content %}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{% load session_filters %}
2+
<table class="table table-condensed table-striped">
3+
<thead>
4+
<tr>
5+
<th class="col-md-1">Revision</th>
6+
<th class="col-md-2">Meeting</th>
7+
<th class="col-md-2">Session</th>
8+
<th class="col-md-1"></th>
9+
<th class="col-md-1"></th>
10+
<th class="col-md-5"></th>
11+
</tr>
12+
</thead>
13+
<tbody>
14+
{% for s in sessions %}
15+
<tr>
16+
<td>{{s|presented_versions:doc}}</td>
17+
<td>{% ifchanged s.meeting %}{% if s.meeting.type.slug == 'ietf' %}IETF{% endif %}{{s.meeting.number}}{% endifchanged %}</td>
18+
<td>
19+
{% if s.name %}{{ s.name }}<br>{% endif %}
20+
{% if s.status.slug == "sched" %}
21+
{% if s.meeting.type.slug == 'ietf' %}{{s.time|date:"D M d, Y Hi"}}{% else %}{{s.time|date:"D M d, Y"}}{% endif %}
22+
{% else %}
23+
{{s.status}}
24+
{% endif %}
25+
{% comment %}
26+
{% if show_request and s.meeting.type.slug == 'ietf' %}
27+
{% if can_edit %}
28+
<br>
29+
<a class="btn btn-default btn-xs" href="{% url 'sessions_view' num=s.meeting.number acronym=s.group.acronym %}">Edit Session Request</a>
30+
{% endif %}
31+
{% endif %}
32+
{% endcomment %}
33+
</td>
34+
<td>{% if s.agenda %}<a href="{{ s.agenda.get_absolute_url }}">Agenda</a>{% endif %}</td>
35+
<td>{% if s.minutes %}<a href="{{ s.minutes.get_absolute_url }}">Minutes</a>{% endif %}</td>
36+
<td><a href="{% url 'ietf.meeting.views.session_details' num=s.meeting.number acronym=s.group.acronym %}">Materials</a></td>
37+
{% endfor %}
38+
</tbody>
39+
</table>

0 commit comments

Comments
 (0)