Skip to content

Commit 72b85fc

Browse files
committed
checkpoint: views by type working
- Legacy-Id: 9592
1 parent 1e30120 commit 72b85fc

7 files changed

Lines changed: 144 additions & 3 deletions

File tree

ietf/meeting/migrations/0005_auto_20150318_1116.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def backfill_91_other_meetings(apps, schema_editor):
6767
( 9, 17, 0, 120, 'offagenda', [secr], sea_pearl_12, 'Reception', "Companion's Reception"), # Should this appear on agenda?
6868
( 9, 19, 0, 180, 'offagenda', [isocfell], rainbow_23, 'Dinner', 'ISOC Fellows Reception/Dinner'),
6969
( 9, 19, 0, 180, 'offagenda', [secr], lehua_suite, 'Meeting', 'Huawei'),
70-
( 9, 21, 0, 180, 'lead', [secr], sea_pearl_12, 'Gathering', 'AMS/IESG/IABIAOC Gathering'),
70+
( 9, 21, 0, 180, 'lead', [secr], sea_pearl_12, 'Gathering', 'AMS/IESG/IAB/IAOC Gathering'),
7171
( 10, 0, 0, 1440, 'offagenda', [secr], south_pacific_1, 'Terminal Room', 'Terminal Room Open to Attendees'),
7272
( 10, 7, 0, 120, 'lead', [iesg,iab], south_pacific_2, 'Breakfast', 'IESG/IAB Breakfast'),
7373
( 10, 7, 0, 120, 'lead', [nomcom], iolani_67, 'Breakfast', 'Nomcom Breakfast'),
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import models, migrations
5+
6+
def extract_session_type_values(apps, schema_editor):
7+
8+
Session = apps.get_model('meeting', 'Session')
9+
10+
for s in Session.objects.all():
11+
t = s.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')).first()
12+
if t and t.timeslot.type.slug != 'session':
13+
s.type = t.timeslot.type
14+
s.save()
15+
16+
class Migration(migrations.Migration):
17+
18+
dependencies = [
19+
('name', '0004_auto_20150318_1140'),
20+
('meeting', '0005_auto_20150318_1116'),
21+
]
22+
23+
operations = [
24+
migrations.AddField(
25+
model_name='session',
26+
name='type',
27+
field=models.ForeignKey(default='session', to='name.TimeSlotTypeName'),
28+
preserve_default=False,
29+
),
30+
migrations.RunPython(extract_session_type_values),
31+
]
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import models, migrations
5+
6+
def extract_room_session_type_values(apps, schema_editor):
7+
8+
Room = apps.get_model('meeting', 'Room')
9+
10+
for r in Room.objects.all():
11+
for ts in r.timeslot_set.all():
12+
if ts.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')):
13+
r.session_types.add(ts.type)
14+
15+
class Migration(migrations.Migration):
16+
17+
dependencies = [
18+
('name', '0004_auto_20150318_1140'),
19+
('meeting', '0006_auto_20150429_1224'),
20+
]
21+
22+
operations = [
23+
migrations.AddField(
24+
model_name='room',
25+
name='session_types',
26+
field=models.ManyToManyField(to='name.TimeSlotTypeName', blank=True),
27+
preserve_default=True,
28+
),
29+
migrations.RunPython(extract_room_session_type_values),
30+
]

ietf/meeting/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
3535
(r'^(?P<num>\d+)/agenda(?P<ext>.csv)$', views.agenda),
3636
(r'^(?P<num>\d+)/agenda/by-room$', views.agenda_by_room),
37+
(r'^(?P<num>\d+)/agenda/by-type$', views.agenda_by_type),
38+
(r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)$', views.agenda_by_type),
39+
(r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)/ics$', views.agenda_by_type_ics),
3740
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),
3841
(r'^(?P<num>\d+)/timeslots/edit$', views.edit_timeslots),
3942
(r'^(?P<num>\d+)/rooms$', ajax.timeslot_roomsurl),

ietf/meeting/views.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,6 @@ def agenda(request, num=None, name=None, base=None, ext=None):
388388

389389
#TODO - let the IAB in
390390
@role_required('Area Director','Secretariat')
391-
@ensure_csrf_cookie
392391
def agenda_by_room(request,num=None):
393392
meeting = get_meeting(num)
394393
schedule = get_schedule(meeting)
@@ -400,6 +399,25 @@ def agenda_by_room(request,num=None):
400399
ss_by_day[day].append(ss)
401400
return render(request,"meeting/agenda_by_room.html",{"meeting":meeting,"ss_by_day":ss_by_day})
402401

402+
@role_required('Area Director','Secretariat')
403+
def agenda_by_type(request,num=None,type=None):
404+
meeting = get_meeting(num)
405+
schedule = get_schedule(meeting)
406+
scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
407+
if type:
408+
scheduledsessions = scheduledsessions.filter(session__type__slug=type)
409+
return render(request,"meeting/agenda_by_type.html",{"meeting":meeting,"scheduledsessions":scheduledsessions})
410+
411+
@role_required('Area Director','Secretariat')
412+
def agenda_by_type_ics(request,num=None,type=None):
413+
meeting = get_meeting(num)
414+
schedule = get_schedule(meeting)
415+
scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
416+
if type:
417+
scheduledsessions = scheduledsessions.filter(session__type__slug=type)
418+
updated = meeting_updated(meeting)
419+
return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":scheduledsessions},content_type="text/calendar")
420+
403421
def read_agenda_file(num, doc):
404422
# XXXX FIXME: the path fragment in the code below should be moved to
405423
# settings.py. The *_PATH settings should be generalized to format()

ietf/secr/meetings/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,15 @@ def build_timeslots(meeting,room=None):
5353
or adding a room.
5454
'''
5555
slots = meeting.timeslot_set.filter(type='session')
56+
57+
# Don't do anything if the room is not capable of handling sessions
58+
if not room.session_types.filter(slug='session'):
59+
return
60+
5661
if room:
5762
rooms = [room]
5863
else:
59-
rooms = meeting.room_set.all()
64+
rooms = meeting.room_set.filter(session_types__slug='session')
6065
if not slots or room:
6166
# if we are just building timeslots for a new room, the room argument was passed,
6267
# then we need to use current meeting times as a template, not the last meeting times
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{% extends "base.html" %}
2+
{% block morecss %}
3+
4+
ul.typelist { list-style:none; padding-left:0; }
5+
li.typelistentry { font-size:162%; font-weight:700; }
6+
li.even { background-color:#EDF5FF; }
7+
li.odd { background-color:white; }
8+
ul.daylist {list-style:none; padding-left:0; margin-bottom:20px;}
9+
li.daylistentry { margin-left:2em; font-weight: 400; }
10+
11+
.sessiontable {margin-left:2em; font-size:62%;}
12+
.sessiontable td {padding-right: 1em;}
13+
14+
.typelabel { font-size:162%; font-weight:700; }
15+
.daylabel { font-size:162%; font-weight:400; }
16+
.even { background-color:#EDF5FF; }
17+
.odd { background-color:white; }
18+
{% comment %}li.sessionlistentry { font-size:62%; }{% endcomment %}
19+
20+
.type-lead:after { content: " (DO NOT POST)"; color:red; }
21+
.type-offagenda:after { content:" (not published on agenda)"; }
22+
23+
{% endblock %}
24+
25+
{% block title %}Agenda for {{meeting}} by Session Type{% endblock %}
26+
27+
{% block content %}
28+
<h1>Agenda for {{meeting}} by Session Type</h1>
29+
{% regroup scheduledsessions by session.type.slug as type_list %}
30+
<ul class="typelist">
31+
{% for type in type_list %}
32+
<li class="typelistentry {% cycle 'even' 'odd' %}">
33+
{{type.grouper}} <a id="ical-link" class="btn btn-primary" href="{% url "ietf.meeting.views.agenda_by_type_ics" num=meeting.number type=type.grouper %}">Download to Calendar</a>
34+
<ul class="daylist">
35+
{% regroup type.list by timeslot.time|date:"l Y-M-d" as daylist %}
36+
{% for day in daylist %}
37+
<li class="daylistentry">
38+
{{ day.grouper }}
39+
<table class="sessiontable">
40+
{% for ss in day.list %}
41+
<tr>
42+
<td>{{ss.timeslot.time|date:"H:i"}}-{{ss.timeslot.end_time|date:"H:i"}}</td>
43+
<td>{{ss.timeslot.get_hidden_location}}</td>
44+
<td class="type-{{ss.session.type.slug}}">{{ss.session.short_name}}</td>
45+
</tr>
46+
{% endfor %}
47+
</table>
48+
</li>
49+
{% endfor %}
50+
</ul>
51+
</li>
52+
{% endfor %}
53+
</ul>
54+
{% endblock %}

0 commit comments

Comments
 (0)