checkpoint: views by type working
- Legacy-Id: 9592
This commit is contained in:
parent
1e30120710
commit
72b85fc1c7
|
@ -67,7 +67,7 @@ def backfill_91_other_meetings(apps, schema_editor):
|
||||||
( 9, 17, 0, 120, 'offagenda', [secr], sea_pearl_12, 'Reception', "Companion's Reception"), # Should this appear on agenda?
|
( 9, 17, 0, 120, 'offagenda', [secr], sea_pearl_12, 'Reception', "Companion's Reception"), # Should this appear on agenda?
|
||||||
( 9, 19, 0, 180, 'offagenda', [isocfell], rainbow_23, 'Dinner', 'ISOC Fellows Reception/Dinner'),
|
( 9, 19, 0, 180, 'offagenda', [isocfell], rainbow_23, 'Dinner', 'ISOC Fellows Reception/Dinner'),
|
||||||
( 9, 19, 0, 180, 'offagenda', [secr], lehua_suite, 'Meeting', 'Huawei'),
|
( 9, 19, 0, 180, 'offagenda', [secr], lehua_suite, 'Meeting', 'Huawei'),
|
||||||
( 9, 21, 0, 180, 'lead', [secr], sea_pearl_12, 'Gathering', 'AMS/IESG/IABIAOC Gathering'),
|
( 9, 21, 0, 180, 'lead', [secr], sea_pearl_12, 'Gathering', 'AMS/IESG/IAB/IAOC Gathering'),
|
||||||
( 10, 0, 0, 1440, 'offagenda', [secr], south_pacific_1, 'Terminal Room', 'Terminal Room Open to Attendees'),
|
( 10, 0, 0, 1440, 'offagenda', [secr], south_pacific_1, 'Terminal Room', 'Terminal Room Open to Attendees'),
|
||||||
( 10, 7, 0, 120, 'lead', [iesg,iab], south_pacific_2, 'Breakfast', 'IESG/IAB Breakfast'),
|
( 10, 7, 0, 120, 'lead', [iesg,iab], south_pacific_2, 'Breakfast', 'IESG/IAB Breakfast'),
|
||||||
( 10, 7, 0, 120, 'lead', [nomcom], iolani_67, 'Breakfast', 'Nomcom Breakfast'),
|
( 10, 7, 0, 120, 'lead', [nomcom], iolani_67, 'Breakfast', 'Nomcom Breakfast'),
|
||||||
|
|
31
ietf/meeting/migrations/0006_auto_20150429_1224.py
Normal file
31
ietf/meeting/migrations/0006_auto_20150429_1224.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
def extract_session_type_values(apps, schema_editor):
|
||||||
|
|
||||||
|
Session = apps.get_model('meeting', 'Session')
|
||||||
|
|
||||||
|
for s in Session.objects.all():
|
||||||
|
t = s.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')).first()
|
||||||
|
if t and t.timeslot.type.slug != 'session':
|
||||||
|
s.type = t.timeslot.type
|
||||||
|
s.save()
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('name', '0004_auto_20150318_1140'),
|
||||||
|
('meeting', '0005_auto_20150318_1116'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='session',
|
||||||
|
name='type',
|
||||||
|
field=models.ForeignKey(default='session', to='name.TimeSlotTypeName'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
migrations.RunPython(extract_session_type_values),
|
||||||
|
]
|
30
ietf/meeting/migrations/0007_auto_20150429_1346.py
Normal file
30
ietf/meeting/migrations/0007_auto_20150429_1346.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
def extract_room_session_type_values(apps, schema_editor):
|
||||||
|
|
||||||
|
Room = apps.get_model('meeting', 'Room')
|
||||||
|
|
||||||
|
for r in Room.objects.all():
|
||||||
|
for ts in r.timeslot_set.all():
|
||||||
|
if ts.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')):
|
||||||
|
r.session_types.add(ts.type)
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('name', '0004_auto_20150318_1140'),
|
||||||
|
('meeting', '0006_auto_20150429_1224'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='room',
|
||||||
|
name='session_types',
|
||||||
|
field=models.ManyToManyField(to='name.TimeSlotTypeName', blank=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.RunPython(extract_room_session_type_values),
|
||||||
|
]
|
|
@ -34,6 +34,9 @@ urlpatterns = patterns('',
|
||||||
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
|
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
|
||||||
(r'^(?P<num>\d+)/agenda(?P<ext>.csv)$', views.agenda),
|
(r'^(?P<num>\d+)/agenda(?P<ext>.csv)$', views.agenda),
|
||||||
(r'^(?P<num>\d+)/agenda/by-room$', views.agenda_by_room),
|
(r'^(?P<num>\d+)/agenda/by-room$', views.agenda_by_room),
|
||||||
|
(r'^(?P<num>\d+)/agenda/by-type$', views.agenda_by_type),
|
||||||
|
(r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)$', views.agenda_by_type),
|
||||||
|
(r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)/ics$', views.agenda_by_type_ics),
|
||||||
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),
|
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),
|
||||||
(r'^(?P<num>\d+)/timeslots/edit$', views.edit_timeslots),
|
(r'^(?P<num>\d+)/timeslots/edit$', views.edit_timeslots),
|
||||||
(r'^(?P<num>\d+)/rooms$', ajax.timeslot_roomsurl),
|
(r'^(?P<num>\d+)/rooms$', ajax.timeslot_roomsurl),
|
||||||
|
|
|
@ -388,7 +388,6 @@ def agenda(request, num=None, name=None, base=None, ext=None):
|
||||||
|
|
||||||
#TODO - let the IAB in
|
#TODO - let the IAB in
|
||||||
@role_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
@ensure_csrf_cookie
|
|
||||||
def agenda_by_room(request,num=None):
|
def agenda_by_room(request,num=None):
|
||||||
meeting = get_meeting(num)
|
meeting = get_meeting(num)
|
||||||
schedule = get_schedule(meeting)
|
schedule = get_schedule(meeting)
|
||||||
|
@ -400,6 +399,25 @@ def agenda_by_room(request,num=None):
|
||||||
ss_by_day[day].append(ss)
|
ss_by_day[day].append(ss)
|
||||||
return render(request,"meeting/agenda_by_room.html",{"meeting":meeting,"ss_by_day":ss_by_day})
|
return render(request,"meeting/agenda_by_room.html",{"meeting":meeting,"ss_by_day":ss_by_day})
|
||||||
|
|
||||||
|
@role_required('Area Director','Secretariat')
|
||||||
|
def agenda_by_type(request,num=None,type=None):
|
||||||
|
meeting = get_meeting(num)
|
||||||
|
schedule = get_schedule(meeting)
|
||||||
|
scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
|
||||||
|
if type:
|
||||||
|
scheduledsessions = scheduledsessions.filter(session__type__slug=type)
|
||||||
|
return render(request,"meeting/agenda_by_type.html",{"meeting":meeting,"scheduledsessions":scheduledsessions})
|
||||||
|
|
||||||
|
@role_required('Area Director','Secretariat')
|
||||||
|
def agenda_by_type_ics(request,num=None,type=None):
|
||||||
|
meeting = get_meeting(num)
|
||||||
|
schedule = get_schedule(meeting)
|
||||||
|
scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
|
||||||
|
if type:
|
||||||
|
scheduledsessions = scheduledsessions.filter(session__type__slug=type)
|
||||||
|
updated = meeting_updated(meeting)
|
||||||
|
return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":scheduledsessions},content_type="text/calendar")
|
||||||
|
|
||||||
def read_agenda_file(num, doc):
|
def read_agenda_file(num, doc):
|
||||||
# XXXX FIXME: the path fragment in the code below should be moved to
|
# XXXX FIXME: the path fragment in the code below should be moved to
|
||||||
# settings.py. The *_PATH settings should be generalized to format()
|
# settings.py. The *_PATH settings should be generalized to format()
|
||||||
|
|
|
@ -53,10 +53,15 @@ def build_timeslots(meeting,room=None):
|
||||||
or adding a room.
|
or adding a room.
|
||||||
'''
|
'''
|
||||||
slots = meeting.timeslot_set.filter(type='session')
|
slots = meeting.timeslot_set.filter(type='session')
|
||||||
|
|
||||||
|
# Don't do anything if the room is not capable of handling sessions
|
||||||
|
if not room.session_types.filter(slug='session'):
|
||||||
|
return
|
||||||
|
|
||||||
if room:
|
if room:
|
||||||
rooms = [room]
|
rooms = [room]
|
||||||
else:
|
else:
|
||||||
rooms = meeting.room_set.all()
|
rooms = meeting.room_set.filter(session_types__slug='session')
|
||||||
if not slots or room:
|
if not slots or room:
|
||||||
# if we are just building timeslots for a new room, the room argument was passed,
|
# if we are just building timeslots for a new room, the room argument was passed,
|
||||||
# then we need to use current meeting times as a template, not the last meeting times
|
# then we need to use current meeting times as a template, not the last meeting times
|
||||||
|
|
54
ietf/templates/meeting/agenda_by_type.html
Normal file
54
ietf/templates/meeting/agenda_by_type.html
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block morecss %}
|
||||||
|
|
||||||
|
ul.typelist { list-style:none; padding-left:0; }
|
||||||
|
li.typelistentry { font-size:162%; font-weight:700; }
|
||||||
|
li.even { background-color:#EDF5FF; }
|
||||||
|
li.odd { background-color:white; }
|
||||||
|
ul.daylist {list-style:none; padding-left:0; margin-bottom:20px;}
|
||||||
|
li.daylistentry { margin-left:2em; font-weight: 400; }
|
||||||
|
|
||||||
|
.sessiontable {margin-left:2em; font-size:62%;}
|
||||||
|
.sessiontable td {padding-right: 1em;}
|
||||||
|
|
||||||
|
.typelabel { font-size:162%; font-weight:700; }
|
||||||
|
.daylabel { font-size:162%; font-weight:400; }
|
||||||
|
.even { background-color:#EDF5FF; }
|
||||||
|
.odd { background-color:white; }
|
||||||
|
{% comment %}li.sessionlistentry { font-size:62%; }{% endcomment %}
|
||||||
|
|
||||||
|
.type-lead:after { content: " (DO NOT POST)"; color:red; }
|
||||||
|
.type-offagenda:after { content:" (not published on agenda)"; }
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Agenda for {{meeting}} by Session Type{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Agenda for {{meeting}} by Session Type</h1>
|
||||||
|
{% regroup scheduledsessions by session.type.slug as type_list %}
|
||||||
|
<ul class="typelist">
|
||||||
|
{% for type in type_list %}
|
||||||
|
<li class="typelistentry {% cycle 'even' 'odd' %}">
|
||||||
|
{{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>
|
||||||
|
<ul class="daylist">
|
||||||
|
{% regroup type.list by timeslot.time|date:"l Y-M-d" as daylist %}
|
||||||
|
{% for day in daylist %}
|
||||||
|
<li class="daylistentry">
|
||||||
|
{{ day.grouper }}
|
||||||
|
<table class="sessiontable">
|
||||||
|
{% for ss in day.list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ss.timeslot.time|date:"H:i"}}-{{ss.timeslot.end_time|date:"H:i"}}</td>
|
||||||
|
<td>{{ss.timeslot.get_hidden_location}}</td>
|
||||||
|
<td class="type-{{ss.session.type.slug}}">{{ss.session.short_name}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue