Ported week view over to use the new meeting data model

- Legacy-Id: 4207
This commit is contained in:
Adam Roach 2012-03-24 14:16:23 +00:00
parent 03980c3882
commit 6a9c7d1dbb
4 changed files with 81 additions and 40 deletions

View file

@ -105,6 +105,9 @@ class TimeSlot(models.Model):
return u"%s: %s-%s %s, %s" % (self.meeting.number, self.time.strftime("%m-%d %H:%M"), (self.time + self.duration).strftime("%H:%M"), self.name, location) return u"%s: %s-%s %s, %s" % (self.meeting.number, self.time.strftime("%m-%d %H:%M"), (self.time + self.duration).strftime("%H:%M"), self.name, location)
def end_time(self):
return self.time + self.duration
def get_location(self): def get_location(self):
location = self.location location = self.location
if location: if location:
@ -152,6 +155,12 @@ class Session(models.Model):
materials = models.ManyToManyField(Document, blank=True) materials = models.ManyToManyField(Document, blank=True)
def agenda(self):
try:
return self.materials.get(type="agenda",states__type="agenda",states__slug="active")
except Exception, e:
return None
def __unicode__(self): def __unicode__(self):
if self.meeting.type_id == "interim": if self.meeting.type_id == "interim":
return self.meeting.number return self.meeting.number

View file

@ -24,12 +24,16 @@ from ietf.idtracker.models import InternetDraft
from ietf.idrfc.idrfc_wrapper import IdWrapper from ietf.idrfc.idrfc_wrapper import IdWrapper
from ietf.utils.pipe import pipe from ietf.utils.pipe import pipe
from ietf.proceedings.models import Meeting, MeetingTime, WgMeetingSession, MeetingVenue, IESGHistory, Proceeding, Switches, WgProceedingsActivities, SessionConflict
from ietf.group.models import Group
from ietf.utils.history import find_history_active_at from ietf.utils.history import find_history_active_at
from ietf.doc.models import Document, State from ietf.doc.models import Document, State
# Old model -- needs to be removed
from ietf.proceedings.models import Meeting as OldMeeting, MeetingTime, WgMeetingSession, MeetingVenue, IESGHistory, Proceeding, Switches, WgProceedingsActivities, SessionConflict
# New models
from ietf.meeting.models import Meeting, Room, TimeSlot, Constraint, Session
from ietf.group.models import Group
@decorator_from_middleware(GZipMiddleware) @decorator_from_middleware(GZipMiddleware)
def show_html_materials(request, meeting_num=None): def show_html_materials(request, meeting_num=None):
@ -91,7 +95,7 @@ def show_html_materials(request, meeting_num=None):
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def current_materials(request): def current_materials(request):
meeting = Meeting.objects.order_by('-meeting_num')[0] meeting = OldMeeting.objects.order_by('-meeting_num')[0]
return HttpResponseRedirect( reverse(show_html_materials, args=[meeting.meeting_num]) ) return HttpResponseRedirect( reverse(show_html_materials, args=[meeting.meeting_num]) )
def get_plenary_agenda(meeting_num, id): def get_plenary_agenda(meeting_num, id):
@ -118,10 +122,10 @@ def agenda_info(num=None):
try: try:
timeslots = MeetingTime.objects.select_related().filter(meeting=n).order_by("day_id", "time_desc") timeslots = MeetingTime.objects.select_related().filter(meeting=n).order_by("day_id", "time_desc")
update = Switches.objects.get(id=1) update = Switches.objects.get(id=1)
meeting= Meeting.objects.get(meeting_num=n) meeting= OldMeeting.objects.get(meeting_num=n)
venue = MeetingVenue.objects.get(meeting_num=n) venue = MeetingVenue.objects.get(meeting_num=n)
break break
except (MeetingTime.DoesNotExist, Switches.DoesNotExist, Meeting.DoesNotExist, MeetingVenue.DoesNotExist): except (MeetingTime.DoesNotExist, Switches.DoesNotExist, OldMeeting.DoesNotExist, MeetingVenue.DoesNotExist):
continue continue
else: else:
raise Http404("No meeting information for meeting %s available" % num) raise Http404("No meeting information for meeting %s available" % num)
@ -136,10 +140,10 @@ def agenda_info(num=None):
def agenda_infoREDESIGN(num=None): def agenda_infoREDESIGN(num=None):
try: try:
if num != None: if num != None:
meeting = Meeting.objects.get(number=num) meeting = OldMeeting.objects.get(number=num)
else: else:
meeting = Meeting.objects.all().order_by('-date')[:1].get() meeting = OldMeeting.objects.all().order_by('-date')[:1].get()
except Meeting.DoesNotExist: except OldMeeting.DoesNotExist:
raise Http404("No meeting information for meeting %s available" % num) raise Http404("No meeting information for meeting %s available" % num)
# now go through the timeslots, only keeping those that are # now go through the timeslots, only keeping those that are
@ -413,19 +417,24 @@ def session_draft_pdf(request, num, session):
os.unlink(pdfn) os.unlink(pdfn)
return HttpResponse(pdf_contents, mimetype="application/pdf") return HttpResponse(pdf_contents, mimetype="application/pdf")
def get_meeting (num=None):
try:
if num != None:
meeting = OldMeeting.objects.get(number=num)
else:
meeting = OldMeeting.objects.all().order_by('-date')[:1].get()
except OldMeeting.DoesNotExist:
raise Http404("No meeting information for meeting %s available" % num)
return meeting
def week_view(request, num=None): def week_view(request, num=None):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num) #timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).order_by('group_acronym__acronym') meeting = get_meeting(num)
rgs = IRTF.objects.all().order_by('acronym') timeslots = TimeSlot.objects.filter(meeting = meeting.number)
areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym')
conflicts = SessionConflict.objects.filter(meeting_num=meeting.meeting_num)
template = "meeting/week-view.html" template = "meeting/week-view.html"
return render_to_response(template, return render_to_response(template,
{"timeslots":timeslots, "update":update, "meeting":meeting, {"timeslots":timeslots,"render_types":["Session","Other","Break","Plenary"]}, context_instance=RequestContext(request))
"venue":venue, "ads":ads, "plenaryw_agenda":plenaryw_agenda,
"plenaryt_agenda":plenaryt_agenda, "wg_list" : wgs,
"rg_list" : rgs, "area_list" : areas, "conflicts":conflicts},
context_instance=RequestContext(request))
def ical_agenda(request, num=None): def ical_agenda(request, num=None):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num) timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)

View file

@ -1,5 +1,21 @@
# Copyright The IETF Trust 2007, All Rights Reserved # Copyright The IETF Trust 2007, All Rights Reserved
########################################################################
########################################################################
########################################################################
##### #####
##### WARNING WARNING WARNING WARNING WARNING WARNING WARNING #####
##### #####
##### These models are old, deprecated, and should not be #####
##### used. Use the models in the meetings directory #####
##### instead. #####
##### #####
##### WARNING WARNING WARNING WARNING WARNING WARNING WARNING #####
##### #####
########################################################################
########################################################################
########################################################################
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, Area, IETFWG from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, Area, IETFWG

View file

@ -7,10 +7,16 @@
<script type="text/javascript"> <script type="text/javascript">
var items = new Array(); var items = new Array();
{% autoescape off %} {% autoescape off %}
{% for slot in timeslots %}{% for session in slot.sessions %}
items.push({day:{{slot.day_id}}, time:"{{slot.time_desc}}", time_id:{{slot.time_id}}, name:"{{session.acronym_name}}", wg:"{{session.acronym}}", area:"{{session.area}}", room:"{{session.room_id.room_name}}", dayname:"{{ slot.meeting_date|date:"l"|upper }}, {{ slot.meeting_date|date:"F j, Y" }}"{% if session.agenda_file %}, agenda:"/meeting/{{ meeting.num }}/agenda/{{ session.acronym }}-agenda/"{% endif %}});{% endfor %}{% endfor %} {% for slot in timeslots %} {% if slot.type.name in render_types %}
items.push({day:{{slot.time|date:"w"}}, time:"{{slot.time|date:"Hi"}}-{{slot.end_time|date:"Hi"}}", duration:{{slot.duration.seconds}}, time_id:"{{slot.time|date:"mdHi"}}", type:"{{slot.type}}", {% if slot.session.name %}name:"{{slot.session.name}}",{% else %}{% if slot.type.name == "Break" %}name:"{{slot.name}}", area:"break", wg:"break",{% else %}name:"{{slot.session.group.name}}",wg:"{{slot.session.group.acronym}}",area:"{{slot.session.group.parent.acronym}}",{% endif %}{% endif %} {% if slot.show_location %}room:"{{slot.get_location}}",{% endif %} dayname:"{{ slot.time|date:"l"|upper }}, {{ slot.time|date:"F j, Y" }}"{% if slot.session.agenda %}, agenda:"http://www.ietf.org{{slot.session.agenda.get_absolute_url}}"{% endif %} });{% endif %}{% endfor %}
{% endautoescape %} {% endautoescape %}
/* Saturday events need to be moved to the day -1 */
for (var i = 0; i < items.length; i++)
{
if (items[i].day == 6) { items[i].day = -1; }
}
var fg = { var fg = {
'app': "#008", 'app': "#008",
@ -21,7 +27,8 @@ var fg = {
'rtg': "#880", 'rtg': "#880",
'sec': "#488", 'sec': "#488",
'tsv': "#484", 'tsv': "#484",
'irtf': "#448" 'irtf': "#448",
'break': "#000"
}; };
var bg = { var bg = {
@ -33,7 +40,8 @@ var bg = {
'rtg': "#ffe", 'rtg': "#ffe",
'sec': "#dff", 'sec': "#dff",
'tsv': "#dfd", 'tsv': "#dfd",
'irtf': "#ddf" 'irtf': "#ddf",
'break': "#fff"
}; };
var day = [ var day = [
@ -87,20 +95,16 @@ function draw_calendar()
{ {
include[(frag[i]+"").toLowerCase()] = true; include[(frag[i]+"").toLowerCase()] = true;
} }
include[''] = true;
include['1plenary'] = true;
include['2plenary'] = true;
/* Find our boundaries */ /* Find our boundaries */
for (i = 0; i < items.length; i++) for (i = 0; i < items.length; i++)
{ {
if (include[(items[i].wg).toLowerCase()] if (!("wg" in items[i]) || (include[(items[i].wg).toLowerCase()]
|| include[(items[i].area).toLowerCase()]) || include[(items[i].area).toLowerCase()]))
{ {
var start_time = parseInt(items[i].time.substr(0,2),10) * 60 + var start_time = parseInt(items[i].time.substr(0,2),10) * 60 +
parseInt(items[i].time.substr(2,2),10); parseInt(items[i].time.substr(2,2),10);
var end_time = parseInt(items[i].time.substr(5,2),10) * 60 + var end_time = start_time + (items[i].duration / 60)
parseInt(items[i].time.substr(7,2),10);
if (!day_start || start_time < day_start) { day_start = start_time; } if (!day_start || start_time < day_start) { day_start = start_time; }
if (end_time > day_end) { day_end = end_time; } if (end_time > day_end) { day_end = end_time; }
@ -203,13 +207,12 @@ function draw_calendar()
for (i = 0; i < items.length; i++) for (i = 0; i < items.length; i++)
{ {
if (include[(items[i].wg).toLowerCase()] if (!("wg" in items[i])|| (include[(items[i].wg).toLowerCase()]
|| include[(items[i].area).toLowerCase()]) || include[(items[i].area).toLowerCase()]))
{ {
var start_time = parseInt(items[i].time.substr(0,2),10) * 60 + var start_time = parseInt(items[i].time.substr(0,2),10) * 60 +
parseInt(items[i].time.substr(2,2),10); parseInt(items[i].time.substr(2,2),10);
var end_time = parseInt(items[i].time.substr(5,2),10) * 60 + var end_time = start_time + (items[i].duration / 60)
parseInt(items[i].time.substr(7,2),10);
var sess_width = day_width / sessions[items[i].time_id]; var sess_width = day_width / sessions[items[i].time_id];
var sess_height = ((end_time - start_time) * minute_height) var sess_height = ((end_time - start_time) * minute_height)
@ -269,7 +272,8 @@ function draw_calendar()
div.appendChild(document.createElement("br")); div.appendChild(document.createElement("br"));
var label = items[i].name; var label = items[i].name;
if (fg[items[i].area]) if (label.length === 0) { label = "Free Slot"; }
if (items[i].wg && fg[items[i].area])
{ {
label = label + " (" + items[i].wg + ")"; label = label + " (" + items[i].wg + ")";
} }
@ -278,11 +282,14 @@ function draw_calendar()
bold.style.fontWeight="bold"; bold.style.fontWeight="bold";
div.appendChild(bold); div.appendChild(bold);
div.appendChild(document.createElement("br")); if (items[i].room)
var italics = document.createElement("span"); {
italics.appendChild(document.createTextNode(items[i].room)); div.appendChild(document.createElement("br"));
italics.style.fontStyle="oblique"; var italics = document.createElement("span");
div.appendChild(italics); italics.appendChild(document.createTextNode(items[i].room));
italics.style.fontStyle="oblique";
div.appendChild(italics);
}
e.appendChild(div); e.appendChild(div);