checkpoint. Model changes done and UI tweaked to match.

- Legacy-Id: 9588
This commit is contained in:
Robert Sparks 2015-04-30 15:57:48 +00:00
parent 65f0fed7a7
commit 1e30120710
16 changed files with 62 additions and 27 deletions

View file

@ -22,8 +22,8 @@ scheduled = SessionStatusName.objects.get(slug='sched')
for meeting in Meeting.objects.filter(type="ietf").order_by("date"): for meeting in Meeting.objects.filter(type="ietf").order_by("date"):
print "Checking %s schedules ..." % meeting print "Checking %s schedules ..." % meeting
brk, __ = Session.objects.get_or_create(meeting=meeting, group=secretariat, requested_by=system, status=scheduled, name='Break', ) brk, __ = Session.objects.get_or_create(meeting=meeting, group=secretariat, requested_by=system, status=scheduled, name='Break', type_id='break',)
reg, __ = Session.objects.get_or_create(meeting=meeting, group=secretariat, requested_by=system, status=scheduled, name='Registration', ) reg, __ = Session.objects.get_or_create(meeting=meeting, group=secretariat, requested_by=system, status=scheduled, name='Registration', type_id='reg',)
for schedule in meeting.schedule_set.all(): for schedule in meeting.schedule_set.all():
print " Checking for missing Break and Reg sessions in %s" % schedule print " Checking for missing Break and Reg sessions in %s" % schedule

View file

@ -527,6 +527,7 @@ class DocTestCase(TestCase):
status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'), status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'),
modified = datetime.datetime.now(), modified = datetime.datetime.now(),
requested_by = Person.objects.get(user__username="marschairman"), requested_by = Person.objects.get(user__username="marschairman"),
type_id = "session",
) )
SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev) SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)

View file

@ -148,6 +148,7 @@ class GroupMaterialTests(TestCase):
status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'), status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'),
modified = datetime.datetime.now(), modified = datetime.datetime.now(),
requested_by = Person.objects.get(user__username="marschairman"), requested_by = Person.objects.get(user__username="marschairman"),
type_id="session",
) )
SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev) SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)

View file

@ -158,6 +158,8 @@ AddSlotForm = modelform_factory(TimeSlot, exclude=('meeting','name','location','
# no authorization required to list. # no authorization required to list.
def timeslot_slotlist(request, mtg): def timeslot_slotlist(request, mtg):
slots = mtg.timeslot_set.all() slots = mtg.timeslot_set.all()
# Restrict graphical editing to slots of type 'session' for now
slots = slots.filter(type__slug='session')
json_array=[] json_array=[]
for slot in slots: for slot in slots:
json_array.append(slot.json_dict(request.build_absolute_uri('/'))) json_array.append(slot.json_dict(request.build_absolute_uri('/')))

View file

@ -85,13 +85,16 @@ def build_all_agenda_slices(meeting):
time_slices.sort() time_slices.sort()
return time_slices,date_slices return time_slices,date_slices
def get_scheduledsessions_from_schedule(schedule): # Not Used
ss = schedule.scheduledsession_set.filter(timeslot__location__isnull = False).exclude(session__isnull = True).order_by('timeslot__time','timeslot__name','session__group__group') #def get_scheduledsessions_from_schedule(schedule):
# ss = schedule.scheduledsession_set.filter(timeslot__location__isnull = False).exclude(session__isnull = True).order_by('timeslot__time','timeslot__name','session__group__group')
return ss #
# return ss
def get_all_scheduledsessions_from_schedule(schedule): def get_all_scheduledsessions_from_schedule(schedule):
ss = schedule.scheduledsession_set.filter(timeslot__location__isnull = False).order_by('timeslot__time','timeslot__name') ss = schedule.scheduledsession_set.filter(timeslot__location__isnull = False)
ss = ss.filter(session__type__slug='session')
ss = ss.order_by('timeslot__time','timeslot__name')
return ss return ss

View file

@ -161,7 +161,10 @@ class Meeting(models.Model):
@property @property
def sessions_that_can_meet(self): def sessions_that_can_meet(self):
return self.session_set.exclude(status__slug='notmeet').exclude(status__slug='disappr').exclude(status__slug='deleted').exclude(status__slug='apprw') qs = self.session_set.exclude(status__slug='notmeet').exclude(status__slug='disappr').exclude(status__slug='deleted').exclude(status__slug='apprw')
# Restrict graphical scheduling to meeting requests (Sessions) of type 'session' for now
qs = qs.filter(type__slug='session')
return qs
def sessions_that_can_be_placed(self): def sessions_that_can_be_placed(self):
from django.db.models import Q from django.db.models import Q
@ -286,6 +289,7 @@ class Room(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
capacity = models.IntegerField(null=True, blank=True) capacity = models.IntegerField(null=True, blank=True)
resources = models.ManyToManyField(ResourceAssociation, blank = True) resources = models.ManyToManyField(ResourceAssociation, blank = True)
session_types = models.ManyToManyField(TimeSlotTypeName, blank = True)
def __unicode__(self): def __unicode__(self):
return "%s size: %s" % (self.name, self.capacity) return "%s size: %s" % (self.name, self.capacity)
@ -851,7 +855,8 @@ class Session(models.Model):
meeting = models.ForeignKey(Meeting) meeting = models.ForeignKey(Meeting)
name = models.CharField(blank=True, max_length=255, help_text="Name of session, in case the session has a purpose rather than just being a group meeting.") name = models.CharField(blank=True, max_length=255, help_text="Name of session, in case the session has a purpose rather than just being a group meeting.")
short = models.CharField(blank=True, max_length=32, help_text="Short version of 'name' above, for use in filenames.") short = models.CharField(blank=True, max_length=32, help_text="Short version of 'name' above, for use in filenames.")
group = models.ForeignKey(Group) # The group type determines the session type. BOFs also need to be added as a group. type = models.ForeignKey(TimeSlotTypeName)
group = models.ForeignKey(Group) # The group type historically determined the session type. BOFs also need to be added as a group. Note that not all meeting requests have a natural group to associate with.
attendees = models.IntegerField(null=True, blank=True) attendees = models.IntegerField(null=True, blank=True)
agenda_note = models.CharField(blank=True, max_length=255) agenda_note = models.CharField(blank=True, max_length=255)
requested = models.DateTimeField(default=datetime.datetime.now) requested = models.DateTimeField(default=datetime.datetime.now)
@ -1007,7 +1012,13 @@ class Session(models.Model):
else: else:
return "The agenda has not been uploaded yet." return "The agenda has not been uploaded yet."
def type(self): # FIXME - This used to be called 'type'. It is only used in agenda.csv and agenda.txt.
# It will return the _wrong thing_ if you look back at an agenda of an earlier meeting
# where group X was a BOF at the time, but is now a WG.
# It also doesn't return anything useful for RG, area sessions, or anything that's not group type 'wg'.
# A better thing to do is find a way to note when a meeting was a BoF meeting and use that, removing this
# function altogether.
def lame_description(self):
if self.group.type.slug in [ "wg" ]: if self.group.type.slug in [ "wg" ]:
return "BOF" if self.group.state.slug in ["bof", "bof-conc"] else "WG" return "BOF" if self.group.state.slug in ["bof", "bof-conc"] else "WG"
else: else:

View file

@ -21,6 +21,8 @@ def make_meeting_test_data():
projector = ResourceAssociation.objects.create(name=pname,icon="notfound.png",desc="Basic projector") projector = ResourceAssociation.objects.create(name=pname,icon="notfound.png",desc="Basic projector")
room = Room.objects.create(meeting=meeting, name="Test Room", capacity=123) room = Room.objects.create(meeting=meeting, name="Test Room", capacity=123)
breakfast_room = Room.objects.create(meeting=meeting, name="Breakfast Room", capacity=40) breakfast_room = Room.objects.create(meeting=meeting, name="Breakfast Room", capacity=40)
room.session_types.add("session")
breakfast_room.session_types.add("lead")
room.resources = [projector] room.resources = [projector]
# mars WG # mars WG
@ -30,7 +32,7 @@ def make_meeting_test_data():
mars_session = Session.objects.create(meeting=meeting, group=mars, mars_session = Session.objects.create(meeting=meeting, group=mars,
attendees=10, requested_by=system_person, attendees=10, requested_by=system_person,
requested_duration=20, status_id="schedw", requested_duration=20, status_id="schedw",
scheduled=datetime.datetime.now()) scheduled=datetime.datetime.now(),type_id="session")
mars_session.resources = [projector] mars_session.resources = [projector]
ScheduledSession.objects.create(timeslot=slot, session=mars_session, schedule=schedule) ScheduledSession.objects.create(timeslot=slot, session=mars_session, schedule=schedule)
@ -40,7 +42,7 @@ def make_meeting_test_data():
ames_session = Session.objects.create(meeting=meeting, group=Group.objects.get(acronym="ames"), ames_session = Session.objects.create(meeting=meeting, group=Group.objects.get(acronym="ames"),
attendees=10, requested_by=system_person, attendees=10, requested_by=system_person,
requested_duration=20, status_id="schedw", requested_duration=20, status_id="schedw",
scheduled=datetime.datetime.now()) scheduled=datetime.datetime.now(),type_id="session")
ScheduledSession.objects.create(timeslot=slot, session=ames_session, schedule=schedule) ScheduledSession.objects.create(timeslot=slot, session=ames_session, schedule=schedule)
# IESG breakfast # IESG breakfast
@ -51,7 +53,7 @@ def make_meeting_test_data():
name="IESG Breakfast", name="IESG Breakfast",
attendees=25, requested_by=system_person, attendees=25, requested_by=system_person,
requested_duration=20, status_id="schedw", requested_duration=20, status_id="schedw",
scheduled=datetime.datetime.now()) scheduled=datetime.datetime.now(),type_id="lead")
ScheduledSession.objects.create(timeslot=breakfast_slot, session=iesg_session, schedule=schedule) ScheduledSession.objects.create(timeslot=breakfast_slot, session=iesg_session, schedule=schedule)
meeting.agenda = schedule meeting.agenda = schedule

View file

@ -204,7 +204,7 @@ class ApiTests(TestCase):
r = self.client.get(url) r = self.client.get(url)
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
info = json.loads(r.content) info = json.loads(r.content)
self.assertEqual(set([x['short_name'] for x in info]),set([s.session.short_name for s in meeting.agenda.scheduledsession_set.all()])) self.assertEqual(set([x['short_name'] for x in info]),set([s.session.short_name for s in meeting.agenda.scheduledsession_set.filter(session__type_id='session')]))
schedule = meeting.agenda schedule = meeting.agenda
url = urlreverse("ietf.meeting.ajax.scheduledsessions_json", url = urlreverse("ietf.meeting.ajax.scheduledsessions_json",

View file

@ -261,7 +261,7 @@ def edit_agenda(request, num=None, owner=None, name=None):
#rooms = meeting.room_set.order_by("capacity") #rooms = meeting.room_set.order_by("capacity")
#rooms = rooms.all() #rooms = rooms.all()
rooms = meeting.room_set.filter(timeslot__type__slug='session').distinct().order_by("capacity") rooms = meeting.room_set.filter(session_types__slug='session').distinct().order_by("capacity")
saveas = SaveAsForm() saveas = SaveAsForm()
saveasurl=reverse(edit_agenda, saveasurl=reverse(edit_agenda,
args=[meeting.number, schedule.owner_email(), schedule.name]) args=[meeting.number, schedule.owner_email(), schedule.name])
@ -644,7 +644,7 @@ def ical_agenda(request, num=None, name=None, ext=None):
def meeting_requests(request, num=None) : def meeting_requests(request, num=None) :
meeting = get_meeting(num) meeting = get_meeting(num)
sessions = Session.objects.filter(meeting__number=meeting.number,group__parent__isnull = False).exclude(requested_by=0).order_by("group__parent__acronym","status__slug","group__acronym") sessions = Session.objects.filter(meeting__number=meeting.number, type__slug='session', group__parent__isnull = False).exclude(requested_by=0).order_by("group__parent__acronym","status__slug","group__acronym")
groups_not_meeting = Group.objects.filter(state='Active',type__in=['WG','RG','BOF']).exclude(acronym__in = [session.group.acronym for session in sessions]).order_by("parent__acronym","acronym") groups_not_meeting = Group.objects.filter(state='Active',type__in=['WG','RG','BOF']).exclude(acronym__in = [session.group.acronym for session in sessions]).order_by("parent__acronym","acronym")

View file

@ -105,13 +105,17 @@ def build_nonsession(meeting,schedule):
short=get_session(slot).short, short=get_session(slot).short,
group=get_session(slot).group, group=get_session(slot).group,
requested_by=system, requested_by=system,
status_id='sched') status_id='sched',
type=slot.type,
)
else: else:
session, __ = Session.objects.get_or_create(meeting=meeting, session, __ = Session.objects.get_or_create(meeting=meeting,
name=slot.name, name=slot.name,
group=secretariat, group=secretariat,
requested_by=system, requested_by=system,
status_id='sched') status_id='sched',
type=slot.type,
)
session.save() session.save()
ts = TimeSlot.objects.create(type=slot.type, ts = TimeSlot.objects.create(type=slot.type,
@ -469,7 +473,9 @@ def non_session(request, meeting_id, schedule_name):
short=short, short=short,
group=group, group=group,
requested_by=Person.objects.get(name='(system)'), requested_by=Person.objects.get(name='(system)'),
status_id='sched') status_id='sched',
type=type,
)
session.save() session.save()
# create association # create association

View file

@ -75,7 +75,7 @@ class BluesheetTestCase(TestCase):
make_test_data() make_test_data()
meeting = Meeting.objects.filter(type='interim').first() meeting = Meeting.objects.filter(type='interim').first()
group = Group.objects.get(acronym='mars') group = Group.objects.get(acronym='mars')
Session.objects.create(meeting=meeting,group=group,requested_by_id=1,status_id='sched') Session.objects.create(meeting=meeting,group=group,requested_by_id=1,status_id='sched',type_id='session')
url = reverse('proceedings_upload_unified', kwargs={'meeting_num':meeting.number,'acronym':'mars'}) url = reverse('proceedings_upload_unified', kwargs={'meeting_num':meeting.number,'acronym':'mars'})
upfile = StringIO('dummy file') upfile = StringIO('dummy file')
upfile.name = "scan1.pdf" upfile.name = "scan1.pdf"

View file

@ -438,7 +438,9 @@ def interim(request, acronym):
Session.objects.create(meeting=meeting, Session.objects.create(meeting=meeting,
group=group, group=group,
requested_by=request.user.person, requested_by=request.user.person,
status_id='sched') status_id='sched',
type_id='session',
)
create_interim_directory() create_interim_directory()
make_directories(meeting) make_directories(meeting)

View file

@ -270,7 +270,9 @@ def confirm(request, acronym):
requested_by=login, requested_by=login,
requested_duration=datetime.timedelta(0,int(duration)), requested_duration=datetime.timedelta(0,int(duration)),
comments=form['comments'], comments=form['comments'],
status=SessionStatusName.objects.get(slug=slug)) status=SessionStatusName.objects.get(slug=slug),
type_id='session',
)
session_save(new_session) session_save(new_session)
if 'resources' in form: if 'resources' in form:
new_session.resources = form['resources'] new_session.resources = form['resources']
@ -383,7 +385,9 @@ def edit_mtg(request, num, acronym):
requested_by=login, requested_by=login,
requested_duration=duration, requested_duration=duration,
comments=form.cleaned_data['comments'], comments=form.cleaned_data['comments'],
status=SessionStatusName.objects.get(slug='schedw')) status=SessionStatusName.objects.get(slug='schedw'),
type_id='session',
)
new_session.save() new_session.save()
else: else:
duration = datetime.timedelta(0,int(form.cleaned_data['length_session2'])) duration = datetime.timedelta(0,int(form.cleaned_data['length_session2']))
@ -405,7 +409,9 @@ def edit_mtg(request, num, acronym):
requested_by=login, requested_by=login,
requested_duration=duration, requested_duration=duration,
comments=form.cleaned_data['comments'], comments=form.cleaned_data['comments'],
status=SessionStatusName.objects.get(slug='apprw')) status=SessionStatusName.objects.get(slug='apprw'),
type_id='session',
)
new_session.save() new_session.save()
else: else:
duration = datetime.timedelta(0,int(form.cleaned_data['length_session3'])) duration = datetime.timedelta(0,int(form.cleaned_data['length_session3']))

View file

@ -3,5 +3,5 @@
{% endif %}{% if item.timeslot.type.slug == "reg" %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","{{ item.timeslot.type.name }}","{{ schedule.meeting.reg_area }}","","","","{{ item.timeslot.name }}","r{{item.timeslot.pk}}","","" {% endif %}{% if item.timeslot.type.slug == "reg" %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","{{ item.timeslot.type.name }}","{{ schedule.meeting.reg_area }}","","","","{{ item.timeslot.name }}","r{{item.timeslot.pk}}","",""
{% endif %}{% if item.timeslot.type.slug == "other" %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","None","{{ item.timeslot.location.name }}","","{{ item.session.group.acronym }}","{% if item.session.group.parent %}{{item.session.group.parent.acronym|upper}}{% endif %}","{{ item.session.name }}","{{item.session.pk}}","","" {% endif %}{% if item.timeslot.type.slug == "other" %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","None","{{ item.timeslot.location.name }}","","{{ item.session.group.acronym }}","{% if item.session.group.parent %}{{item.session.group.parent.acronym|upper}}{% endif %}","{{ item.session.name }}","{{item.session.pk}}","",""
{% endif %}{% if item.timeslot.type.slug == "plenary" %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","{{ item.session.name }}","{{ item.timeslot.location.name }}","","{{ item.session.group.acronym }}","","{{ item.session.name }}","{{item.session.pk}}","{% if item.session.agenda %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/agenda/{{ item.session.agenda.external_url }}{% endif %}","{% if item.session.slides %}{% for slide in item.session.slides %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/slides/{{ slide.external_url }}{% if not forloop.last %}|{% endif %}{% endfor %}{% endif %}" {% endif %}{% if item.timeslot.type.slug == "plenary" %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","{{ item.session.name }}","{{ item.timeslot.location.name }}","","{{ item.session.group.acronym }}","","{{ item.session.name }}","{{item.session.pk}}","{% if item.session.agenda %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/agenda/{{ item.session.agenda.external_url }}{% endif %}","{% if item.session.slides %}{% for slide in item.session.slides %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/slides/{{ slide.external_url }}{% if not forloop.last %}|{% endif %}{% endfor %}{% endif %}"
{% endif %}{% if item.timeslot.type.slug == "session" and item.session.group %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","{{ item.timeslot.name }}","{{ item.timeslot.location.name }}","{{ item.session.group.parent.acronym|upper }}","{{ item.session.group.acronym }}","{{ item.session.type }}","{{ item.session.group.name }}","{{ item.session.pk}}","{% if item.session.agenda %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/agenda/{{ item.session.agenda.external_url }}{% endif %}","{% if item.session.slides %}{% for slide in item.session.slides %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/slides/{{ slide.external_url }}{% if not forloop.last %}|{% endif %}{% endfor %}{% endif %}" {% endif %}{% if item.timeslot.type.slug == "session" and item.session.group %}"{{ item.timeslot.time|date:"Y-m-d" }}","{{ item.timeslot.time_desc|slice:":4" }}","{{ item.timeslot.time_desc|slice:"5:9" }}","{{ item.timeslot.name }}","{{ item.timeslot.location.name }}","{{ item.session.group.parent.acronym|upper }}","{{ item.session.group.acronym }}","{{ item.session.lame_description }}","{{ item.session.group.name }}","{{ item.session.pk}}","{% if item.session.agenda %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/agenda/{{ item.session.agenda.external_url }}{% endif %}","{% if item.session.slides %}{% for slide in item.session.slides %}http://www.ietf.org/proceedings/{{ schedule.meeting.number }}/slides/{{ slide.external_url }}{% if not forloop.last %}|{% endif %}{% endfor %}{% endif %}"
{% endif %}{% endfor %}{% endautoescape %} {% endif %}{% endfor %}{% endautoescape %}

Can't render this file because it contains an unexpected character in line 1 and column 63.

View file

@ -20,7 +20,7 @@
{% endif %}{% if item.timeslot.type.slug == "session" %}{% if item.session.group %}{% ifchanged %} {% endif %}{% if item.timeslot.type.slug == "session" %}{% if item.session.group %}{% ifchanged %}
{{ item.timeslot.time_desc }} {{ item.timeslot.name }} {{ item.timeslot.time_desc }} {{ item.timeslot.name }}
{% endifchanged %}{{ item.timeslot.location.name|ljust:14 }} {{ item.session.group.parent.acronym|upper|ljust:4 }} {{ item.session.group.acronym|ljust:10 }} {{ item.session.group.name }} {{ item.session.type }}{% if item.session.agenda_note %} - {{ item.session.agenda_note }}{% endif %} {% endifchanged %}{{ item.timeslot.location.name|ljust:14 }} {{ item.session.group.parent.acronym|upper|ljust:4 }} {{ item.session.group.acronym|ljust:10 }} {{ item.session.group.name }} {{ item.session.lame_description }}{% if item.session.agenda_note %} - {{ item.session.agenda_note }}{% endif %}
{% endif %}{% endif %}{% if item.timeslot.type.slug == "break" %} {% endif %}{% endif %}{% if item.timeslot.type.slug == "break" %}
{{ item.timeslot.time_desc }} {{ item.timeslot.name }}{% if schedule.meeting.break_area and item.timeslot.show_location %} - {{ schedule.meeting.break_area }}{% endif %}{% endif %}{% if item.timeslot.type.slug == "other" %} {{ item.timeslot.time_desc }} {{ item.timeslot.name }}{% if schedule.meeting.break_area and item.timeslot.show_location %} - {{ schedule.meeting.break_area }}{% endif %}{% endif %}{% if item.timeslot.type.slug == "other" %}
{{ item.timeslot.time_desc }} {{ item.timeslot.name }} - {{ item.timeslot.location.name }}{% endif %}{% endfor %} {{ item.timeslot.time_desc }} {{ item.timeslot.name }} - {{ item.timeslot.location.name }}{% endif %}{% endfor %}

View file

@ -71,6 +71,7 @@
background-color:#2647A0; background-color:#2647A0;
width:100px; /* otherwise we get overlap */ width:100px; /* otherwise we get overlap */
min-width:100px; min-width:100px;
min-height:40px;
font-size:12px; font-size:12px;
position:absolute; /* makes it float independent of scroll */ position:absolute; /* makes it float independent of scroll */
z-index:100; /* meeting events will be on top otherwise */ z-index:100; /* meeting events will be on top otherwise */
@ -244,7 +245,7 @@ tr.agenda_slot{
td.agenda_slot{ td.agenda_slot{
/* overflow-y:auto; */ /* overflow-y:auto; */
/* height:20px; */ /* height:20px; */
height: 40px; height: 45px;
/* min-height:20px; */ /* min-height:20px; */
} }