Turn sessions into regular sessions and non-sessions into misc.
sessions in the UI and code to avoid ambiguity. This doesn't change the data in the DB except for uses of TimeSlotTypeName where 'session' is now 'regular'. - Legacy-Id: 17128
This commit is contained in:
parent
6920c179cd
commit
568670c060
|
@ -713,7 +713,7 @@ class DocTestCase(TestCase):
|
|||
meeting = Meeting.objects.get(number='72'),
|
||||
group = Group.objects.get(acronym='mars'),
|
||||
modified = datetime.datetime.now(),
|
||||
type_id = "session",
|
||||
type_id = 'regular',
|
||||
)
|
||||
SchedulingEvent.objects.create(
|
||||
session=session,
|
||||
|
|
|
@ -159,7 +159,7 @@ class GroupMaterialTests(TestCase):
|
|||
meeting = Meeting.objects.get(number='42'),
|
||||
group = Group.objects.get(acronym='mars'),
|
||||
modified = datetime.datetime.now(),
|
||||
type_id="session",
|
||||
type_id='regular',
|
||||
)
|
||||
SchedulingEvent.objects.create(
|
||||
session=session,
|
||||
|
|
|
@ -1346,7 +1346,7 @@ def all_presentations(request, name):
|
|||
doc = get_object_or_404(Document, name=name)
|
||||
|
||||
sessions = add_event_info_to_session_qs(
|
||||
doc.session_set.filter(type__in=['session','plenary','other'])
|
||||
doc.session_set.filter(type__in=['regular','plenary','other'])
|
||||
).filter(current_status__in=['sched','schedw','appr','canceled'])
|
||||
|
||||
status_names = {n.slug: n.name for n in SessionStatusName.objects.all()}
|
||||
|
|
|
@ -753,7 +753,7 @@ def meetings(request, acronym=None, group_type=None):
|
|||
sessions = add_event_info_to_session_qs(
|
||||
group.session_set.filter(
|
||||
meeting__date__gt=four_years_ago,
|
||||
type__in=['session','plenary','other']
|
||||
type__in=['regular','plenary','other']
|
||||
)
|
||||
).filter(
|
||||
current_status__in=['sched','schedw','appr','canceled'],
|
||||
|
|
|
@ -161,8 +161,8 @@ AddSlotForm = modelform_factory(TimeSlot, exclude=('meeting','name','location','
|
|||
# no authorization required to list.
|
||||
def timeslot_slotlist(request, mtg):
|
||||
slots = mtg.timeslot_set.all()
|
||||
# Restrict graphical editing to slots of type 'session' for now
|
||||
slots = slots.filter(type__slug='session')
|
||||
# Restrict graphical editing to slots of type 'regular' for now
|
||||
slots = slots.filter(type__slug='regular')
|
||||
json_array=[]
|
||||
for slot in slots:
|
||||
json_array.append(slot.json_dict(request.build_absolute_uri('/')))
|
||||
|
@ -209,14 +209,14 @@ def timeslot_updslot(request, meeting, slotid):
|
|||
slot.save()
|
||||
|
||||
# WORKAROUND: Right now, if there are sessions scheduled in this timeslot
|
||||
# when it is marked unavailable (or any other value besides "session") they
|
||||
# when it is marked unavailable (or any other value besides 'regular') they
|
||||
# become unreachable from the editing screen. The session is listed in the
|
||||
# "unscheduled" block incorrectly, and drag-dropping it onto the a new
|
||||
# timeslot produces erroneous results. To avoid this, we will silently
|
||||
# unschedule any sessions in the timeslot that has just been made
|
||||
# unavailable.
|
||||
|
||||
if slot.type_id != 'session':
|
||||
if slot.type_id != 'regular':
|
||||
slot.sessionassignments.all().delete()
|
||||
|
||||
# ENDWORKAROUND
|
||||
|
|
|
@ -82,7 +82,7 @@ class SessionFactory(factory.DjangoModelFactory):
|
|||
model = Session
|
||||
|
||||
meeting = factory.SubFactory(MeetingFactory)
|
||||
type_id='session'
|
||||
type_id='regular'
|
||||
group = factory.SubFactory(GroupFactory)
|
||||
|
||||
@factory.post_generation
|
||||
|
@ -139,7 +139,7 @@ class TimeSlotFactory(factory.DjangoModelFactory):
|
|||
model = TimeSlot
|
||||
|
||||
meeting = factory.SubFactory(MeetingFactory)
|
||||
type_id = 'session'
|
||||
type_id = 'regular'
|
||||
|
||||
@factory.post_generation
|
||||
def location(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument
|
||||
|
|
|
@ -245,7 +245,7 @@ class InterimSessionModelForm(forms.ModelForm):
|
|||
never gets called"""
|
||||
session = super(InterimSessionModelForm, self).save(commit=kwargs.get('commit', True))
|
||||
session.group = self.group
|
||||
session.type_id = 'session'
|
||||
session.type_id = 'regular'
|
||||
return session
|
||||
|
||||
def save_agenda(self):
|
||||
|
|
|
@ -73,7 +73,7 @@ def get_areas():
|
|||
|
||||
# get list of areas that are referenced.
|
||||
def get_area_list_from_sessions(assignments, num):
|
||||
return assignments.filter(timeslot__type = 'Session',
|
||||
return assignments.filter(timeslot__type = 'regular',
|
||||
session__group__parent__isnull = False).order_by(
|
||||
'session__group__parent__acronym').distinct().values_list(
|
||||
'session__group__parent__acronym',flat=True)
|
||||
|
@ -82,7 +82,7 @@ def build_all_agenda_slices(meeting):
|
|||
time_slices = []
|
||||
date_slices = {}
|
||||
|
||||
for ts in meeting.timeslot_set.filter(type__in=['session',]).order_by('time','name'):
|
||||
for ts in meeting.timeslot_set.filter(type__in=['regular',]).order_by('time','name'):
|
||||
ymd = ts.time.date()
|
||||
|
||||
if ymd not in date_slices and ts.location != None:
|
||||
|
@ -98,7 +98,7 @@ def build_all_agenda_slices(meeting):
|
|||
|
||||
def get_all_assignments_from_schedule(schedule):
|
||||
ss = schedule.assignments.filter(timeslot__location__isnull = False)
|
||||
ss = ss.filter(session__type__slug='session')
|
||||
ss = ss.filter(session__type__slug='regular')
|
||||
ss = ss.order_by('timeslot__time','timeslot__name')
|
||||
|
||||
return ss
|
||||
|
@ -107,7 +107,7 @@ def get_modified_from_assignments(assignments):
|
|||
return assignments.aggregate(Max('timeslot__modified'))['timeslot__modified__max']
|
||||
|
||||
def get_wg_name_list(assignments):
|
||||
return assignments.filter(timeslot__type = 'Session',
|
||||
return assignments.filter(timeslot__type = 'regular',
|
||||
session__group__isnull = False,
|
||||
session__group__parent__isnull = False).order_by(
|
||||
'session__group__acronym').distinct().values_list(
|
||||
|
@ -631,7 +631,7 @@ def update_interim_session_assignment(form):
|
|||
else:
|
||||
slot = TimeSlot.objects.create(
|
||||
meeting=session.meeting,
|
||||
type_id="session",
|
||||
type_id='regular',
|
||||
duration=session.requested_duration,
|
||||
time=time)
|
||||
SchedTimeSessAssignment.objects.create(
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# Copyright The IETF Trust 2019, All Rights Reserved
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.26 on 2019-12-06 11:13
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
def rename_session_to_request(apps, schema_editor):
|
||||
Session = apps.get_model('meeting', 'Session')
|
||||
TimeSlot = apps.get_model('meeting', 'TimeSlot')
|
||||
Room = apps.get_model('meeting', 'Room')
|
||||
TimeSlotTypeName = apps.get_model('name', 'TimeSlotTypeName')
|
||||
|
||||
TimeSlotTypeName.objects.create(
|
||||
slug='regular',
|
||||
name='Regular',
|
||||
used=True,
|
||||
order=0,
|
||||
)
|
||||
|
||||
Session.objects.filter(type='session').update(type='regular')
|
||||
TimeSlot.objects.filter(type='session').update(type='regular')
|
||||
Room.session_types.through.objects.filter(timeslottypename='session').update(timeslottypename='regular')
|
||||
|
||||
TimeSlotTypeName.objects.filter(slug='session').delete()
|
||||
|
||||
def noop(apps, schema_editor):
|
||||
pass
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('meeting', '0024_auto_20191204_1731'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(rename_session_to_request, noop),
|
||||
]
|
|
@ -794,7 +794,7 @@ class SchedTimeSessAssignment(models.Model):
|
|||
components.append(g.acronym)
|
||||
components.append(slugify(self.session.name))
|
||||
|
||||
if self.timeslot.type_id in ('session', 'plenary'):
|
||||
if self.timeslot.type_id in ('regular', 'plenary'):
|
||||
if self.timeslot.type_id == "plenary":
|
||||
components.append("1plenary")
|
||||
else:
|
||||
|
|
|
@ -28,11 +28,11 @@ def make_interim_meeting(group,date,status='sched'):
|
|||
attendees=10,
|
||||
requested_duration=datetime.timedelta(minutes=20),
|
||||
remote_instructions='http://webex.com',
|
||||
type_id="session")
|
||||
type_id='regular')
|
||||
SchedulingEvent.objects.create(session=session, status_id=status, by=system_person)
|
||||
slot = TimeSlot.objects.create(
|
||||
meeting=meeting,
|
||||
type_id="session",
|
||||
type_id='regular',
|
||||
duration=session.requested_duration,
|
||||
time=time)
|
||||
SchedTimeSessAssignment.objects.create(
|
||||
|
@ -85,7 +85,7 @@ def make_meeting_test_data(meeting=None):
|
|||
pname = RoomResourceName.objects.create(name='projector',slug='proj')
|
||||
projector = ResourceAssociation.objects.create(name=pname,icon="notfound.png",desc="Basic projector")
|
||||
room = Room.objects.create(meeting=meeting, name="Test Room", capacity=123, functional_name="Testing Ground")
|
||||
room.session_types.add("session")
|
||||
room.session_types.add('regular')
|
||||
room.resources.add(projector)
|
||||
asname = RoomResourceName.objects.get(slug='audiostream')
|
||||
UrlResource.objects.create(name=asname, room=room, url='http://ietf{number}streaming.dnsalias.net/ietf/ietf{number}1.m3u'.format(number=meeting.number))
|
||||
|
@ -100,10 +100,10 @@ def make_meeting_test_data(meeting=None):
|
|||
|
||||
# slots
|
||||
session_date = meeting.date + datetime.timedelta(days=1)
|
||||
slot1 = TimeSlot.objects.create(meeting=meeting, type_id="session", location=room,
|
||||
slot1 = TimeSlot.objects.create(meeting=meeting, type_id='regular', location=room,
|
||||
duration=datetime.timedelta(minutes=30),
|
||||
time=datetime.datetime.combine(session_date, datetime.time(9, 30)))
|
||||
slot2 = TimeSlot.objects.create(meeting=meeting, type_id="session", location=room,
|
||||
slot2 = TimeSlot.objects.create(meeting=meeting, type_id='regular', location=room,
|
||||
duration=datetime.timedelta(minutes=30),
|
||||
time=datetime.datetime.combine(session_date, datetime.time(10, 30)))
|
||||
breakfast_slot = TimeSlot.objects.create(meeting=meeting, type_id="lead", location=breakfast_room,
|
||||
|
@ -119,7 +119,7 @@ def make_meeting_test_data(meeting=None):
|
|||
mars = Group.objects.get(acronym='mars')
|
||||
mars_session = Session.objects.create(meeting=meeting, group=mars,
|
||||
attendees=10, requested_duration=datetime.timedelta(minutes=20),
|
||||
type_id="session")
|
||||
type_id='regular')
|
||||
SchedulingEvent.objects.create(session=mars_session, status_id='schedw', by=system_person)
|
||||
SchedTimeSessAssignment.objects.create(timeslot=slot1, session=mars_session, schedule=schedule)
|
||||
SchedTimeSessAssignment.objects.create(timeslot=slot2, session=mars_session, schedule=unofficial_schedule)
|
||||
|
@ -128,7 +128,7 @@ def make_meeting_test_data(meeting=None):
|
|||
ames_session = Session.objects.create(meeting=meeting, group=Group.objects.get(acronym="ames"),
|
||||
attendees=10,
|
||||
requested_duration=datetime.timedelta(minutes=20),
|
||||
type_id="session")
|
||||
type_id='regular')
|
||||
SchedulingEvent.objects.create(session=ames_session, status_id='schedw', by=system_person)
|
||||
SchedTimeSessAssignment.objects.create(timeslot=slot2, session=ames_session, schedule=schedule)
|
||||
SchedTimeSessAssignment.objects.create(timeslot=slot1, session=ames_session, schedule=unofficial_schedule)
|
||||
|
|
|
@ -143,10 +143,10 @@ class ApiTests(TestCase):
|
|||
|
||||
def test_create_new_room(self):
|
||||
meeting = make_meeting_test_data()
|
||||
timeslots_before = meeting.timeslot_set.filter(type='session').count()
|
||||
timeslots_before = meeting.timeslot_set.filter(type='regular').count()
|
||||
url = urlreverse("ietf.meeting.ajax.timeslot_roomsurl", kwargs=dict(num=meeting.number))
|
||||
|
||||
post_data = { "name": "new room", "capacity": "50" , "resources": [], "session_types":["session"]}
|
||||
post_data = { "name": "new room", "capacity": "50" , "resources": [], "session_types":['regular']}
|
||||
|
||||
# unauthorized post
|
||||
r = self.client.post(url, post_data)
|
||||
|
@ -159,7 +159,7 @@ class ApiTests(TestCase):
|
|||
self.assertEqual(r.status_code, 302)
|
||||
self.assertTrue(meeting.room_set.filter(name="new room"))
|
||||
|
||||
timeslots_after = meeting.timeslot_set.filter(type='session').count()
|
||||
timeslots_after = meeting.timeslot_set.filter(type='regular').count()
|
||||
# It's not clear that what that ajax function is doing is the right thing to do,
|
||||
# but it currently makes a new timeslot for any existing timeslot.
|
||||
# The condition tested below relies on the timeslots before this test all having different start and end times
|
||||
|
@ -212,7 +212,7 @@ class ApiTests(TestCase):
|
|||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
info = r.json()
|
||||
self.assertEqual(set([x['short_name'] for x in info]),set([s.session.short_name for s in meeting.schedule.assignments.filter(session__type_id='session')]))
|
||||
self.assertEqual(set([x['short_name'] for x in info]),set([s.session.short_name for s in meeting.schedule.assignments.filter(session__type_id='regular')]))
|
||||
|
||||
schedule = meeting.schedule
|
||||
url = urlreverse("ietf.meeting.ajax.assignments_json",
|
||||
|
@ -466,7 +466,7 @@ class TimeSlotEditingApiTests(TestCase):
|
|||
def test_manipulate_timeslot(self):
|
||||
meeting = make_meeting_test_data()
|
||||
slot = meeting.timeslot_set.all()[0]
|
||||
self.assertEqual(TimeSlot.objects.get(pk=slot.pk).type.name,'Session')
|
||||
self.assertEqual(TimeSlot.objects.get(pk=slot.pk).type_id,'regular')
|
||||
|
||||
url = urlreverse("ietf.meeting.ajax.timeslot_sloturl",
|
||||
kwargs=dict(num=meeting.number, slotid=slot.pk))
|
||||
|
@ -479,10 +479,12 @@ class TimeSlotEditingApiTests(TestCase):
|
|||
self.client.login(username="plain", password="plain+password")
|
||||
r = self.client.post(url, modify_post_data)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
self.assertEqual(TimeSlot.objects.get(pk=slot.pk).type.name,'Session')
|
||||
slot.refresh_from_db()
|
||||
self.assertEqual(slot.type_id, 'regular')
|
||||
|
||||
# Successful change of purpose
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url, modify_post_data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertEqual(TimeSlot.objects.get(pk=slot.pk).type.name,'Plenary')
|
||||
slot.refresh_from_db()
|
||||
self.assertEqual(slot.type_id, 'plenary')
|
||||
|
|
|
@ -241,7 +241,7 @@ class MeetingTests(TestCase):
|
|||
self.assertTrue(all([x in unicontent(r) for x in ['mars','Test Room',]]))
|
||||
self.assertNotContains(r, 'IESG Breakfast')
|
||||
|
||||
url = urlreverse("ietf.meeting.views.agenda_by_type",kwargs=dict(num=meeting.number,type='session'))
|
||||
url = urlreverse("ietf.meeting.views.agenda_by_type",kwargs=dict(num=meeting.number,type='regular'))
|
||||
r = self.client.get(url)
|
||||
self.assertTrue(all([x in unicontent(r) for x in ['mars','Test Room']]))
|
||||
self.assertFalse(any([x in unicontent(r) for x in ['IESG Breakfast','Breakfast Room']]))
|
||||
|
@ -576,7 +576,7 @@ class MeetingTests(TestCase):
|
|||
self.assertEqual(response.get('Content-Type'), 'text/calendar')
|
||||
|
||||
def test_edit_slide_order(self):
|
||||
session=SessionFactory(meeting__type_id='iestf',type_id='session')
|
||||
session=SessionFactory(meeting__type_id='iestf',type_id='regular')
|
||||
slides = DocumentFactory(type_id='slides')
|
||||
session.sessionpresentation_set.create(document=slides,order=0)
|
||||
url = urlreverse('ietf.meeting.views.set_slide_order',kwargs={'session_id':session.id,'num':session.meeting.number,'name':slides.name})
|
||||
|
|
|
@ -224,8 +224,8 @@ def add_event_info_to_session_qs(qs, current_status=True, requested_by=False, re
|
|||
def only_sessions_that_can_meet(session_qs):
|
||||
qs = add_event_info_to_session_qs(session_qs).exclude(current_status__in=['notmeet', 'disappr', 'deleted', 'apprw'])
|
||||
|
||||
# Restrict graphical scheduling to meeting requests (Sessions) of type 'session' for now
|
||||
qs = qs.filter(type__slug='session')
|
||||
# Restrict graphical scheduling to meeting requests (Sessions) of type 'regular' for now
|
||||
qs = qs.filter(type__slug='regular')
|
||||
|
||||
return qs
|
||||
|
||||
|
|
|
@ -146,11 +146,11 @@ def materials(request, num=None):
|
|||
plenaries = sessions.filter(name__icontains='plenary')
|
||||
ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu')
|
||||
irtf = sessions.filter(group__parent__acronym = 'irtf')
|
||||
training = sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['session', 'other', ])
|
||||
training = sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['regular', 'other', ])
|
||||
iab = sessions.filter(group__parent__acronym = 'iab')
|
||||
|
||||
session_pks = [s.pk for ss in [plenaries, ietf, irtf, training, iab] for s in ss]
|
||||
other = sessions.filter(type_id__in=['session'], group__type__features__has_meetings=True).exclude(pk__in=session_pks)
|
||||
other = sessions.filter(type__in=['regular'], group__type__features__has_meetings=True).exclude(pk__in=session_pks)
|
||||
|
||||
for topic in [plenaries, ietf, training, irtf, iab]:
|
||||
for event in topic:
|
||||
|
@ -372,7 +372,7 @@ def edit_schedule(request, num=None, owner=None, name=None):
|
|||
meeting_base_url = request.build_absolute_uri(meeting.base_url())
|
||||
site_base_url = request.build_absolute_uri('/')[:-1] # skip the trailing slash
|
||||
|
||||
rooms = meeting.room_set.filter(session_types__slug='session').distinct().order_by("capacity")
|
||||
rooms = meeting.room_set.filter(session_types__slug='regular').distinct().order_by("capacity")
|
||||
saveas = SaveAsForm()
|
||||
saveasurl=reverse(edit_schedule,
|
||||
args=[meeting.number, schedule.owner_email(), schedule.name])
|
||||
|
@ -615,7 +615,7 @@ def agenda_csv(schedule, filtered_assignments):
|
|||
row.append(item.session.pk)
|
||||
row.append(agenda_field(item))
|
||||
row.append(slides_field(item))
|
||||
elif item.timeslot.type_id == "session":
|
||||
elif item.timeslot.type_id == 'regular':
|
||||
row.append(item.timeslot.name)
|
||||
row.append(item.timeslot.location.name if item.timeslot.location else "")
|
||||
row.append(item.session.historic_group.historic_parent.acronym.upper() if item.session.historic_group.historic_parent else "")
|
||||
|
@ -1083,7 +1083,7 @@ def meeting_requests(request, num=None):
|
|||
sessions = add_event_info_to_session_qs(
|
||||
Session.objects.filter(
|
||||
meeting__number=meeting.number,
|
||||
type__slug='session',
|
||||
type__slug='regular',
|
||||
group__parent__isnull=False
|
||||
),
|
||||
requested_by=True,
|
||||
|
@ -1110,10 +1110,10 @@ def meeting_requests(request, num=None):
|
|||
|
||||
def get_sessions(num, acronym):
|
||||
meeting = get_meeting(num=num,type_in=None)
|
||||
sessions = Session.objects.filter(meeting=meeting,group__acronym=acronym,type__in=['session','plenary','other'])
|
||||
sessions = Session.objects.filter(meeting=meeting,group__acronym=acronym,type__in=['regular','plenary','other'])
|
||||
|
||||
if not sessions:
|
||||
sessions = Session.objects.filter(meeting=meeting,short=acronym,type__in=['session','plenary','other'])
|
||||
sessions = Session.objects.filter(meeting=meeting,short=acronym,type__in=['regular','plenary','other'])
|
||||
|
||||
sessions = add_event_info_to_session_qs(sessions)
|
||||
|
||||
|
@ -1322,7 +1322,7 @@ def upload_session_minutes(request, session_id, num):
|
|||
|
||||
session_number = None
|
||||
sessions = get_sessions(session.meeting.number,session.group.acronym)
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'session' else False
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'regular' else False
|
||||
if len(sessions) > 1:
|
||||
session_number = 1 + sessions.index(session)
|
||||
|
||||
|
@ -1333,7 +1333,7 @@ def upload_session_minutes(request, session_id, num):
|
|||
if form.is_valid():
|
||||
file = request.FILES['file']
|
||||
_, ext = os.path.splitext(file.name)
|
||||
apply_to_all = session.type_id == 'session'
|
||||
apply_to_all = session.type_id == 'regular'
|
||||
if show_apply_to_all_checkbox:
|
||||
apply_to_all = form.cleaned_data['apply_to_all']
|
||||
if minutes_sp:
|
||||
|
@ -1422,7 +1422,7 @@ def upload_session_agenda(request, session_id, num):
|
|||
|
||||
session_number = None
|
||||
sessions = get_sessions(session.meeting.number,session.group.acronym)
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'session' else False
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'regular' else False
|
||||
if len(sessions) > 1:
|
||||
session_number = 1 + sessions.index(session)
|
||||
|
||||
|
@ -1433,7 +1433,7 @@ def upload_session_agenda(request, session_id, num):
|
|||
if form.is_valid():
|
||||
file = request.FILES['file']
|
||||
_, ext = os.path.splitext(file.name)
|
||||
apply_to_all = session.type_id == 'session'
|
||||
apply_to_all = session.type_id == 'regular'
|
||||
if show_apply_to_all_checkbox:
|
||||
apply_to_all = form.cleaned_data['apply_to_all']
|
||||
if agenda_sp:
|
||||
|
@ -1495,7 +1495,7 @@ def upload_session_agenda(request, session_id, num):
|
|||
doc.save_with_history([e])
|
||||
return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym)
|
||||
else:
|
||||
form = UploadAgendaForm(show_apply_to_all_checkbox, initial={'apply_to_all':session.type_id=='session'})
|
||||
form = UploadAgendaForm(show_apply_to_all_checkbox, initial={'apply_to_all':session.type_id=='regular'})
|
||||
|
||||
return render(request, "meeting/upload_session_agenda.html",
|
||||
{'session': session,
|
||||
|
@ -1533,7 +1533,7 @@ def upload_session_slides(request, session_id, num, name):
|
|||
|
||||
session_number = None
|
||||
sessions = get_sessions(session.meeting.number,session.group.acronym)
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'session' else False
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'regular' else False
|
||||
if len(sessions) > 1:
|
||||
session_number = 1 + sessions.index(session)
|
||||
|
||||
|
@ -1550,7 +1550,7 @@ def upload_session_slides(request, session_id, num, name):
|
|||
if form.is_valid():
|
||||
file = request.FILES['file']
|
||||
_, ext = os.path.splitext(file.name)
|
||||
apply_to_all = session.type_id == 'session'
|
||||
apply_to_all = session.type_id == 'regular'
|
||||
if show_apply_to_all_checkbox:
|
||||
apply_to_all = form.cleaned_data['apply_to_all']
|
||||
if slides_sp:
|
||||
|
@ -1627,7 +1627,7 @@ def propose_session_slides(request, session_id, num):
|
|||
|
||||
session_number = None
|
||||
sessions = get_sessions(session.meeting.number,session.group.acronym)
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'session' else False
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if session.type_id == 'regular' else False
|
||||
if len(sessions) > 1:
|
||||
session_number = 1 + sessions.index(session)
|
||||
|
||||
|
@ -1637,7 +1637,7 @@ def propose_session_slides(request, session_id, num):
|
|||
if form.is_valid():
|
||||
file = request.FILES['file']
|
||||
_, ext = os.path.splitext(file.name)
|
||||
apply_to_all = session.type_id == 'session'
|
||||
apply_to_all = session.type_id == 'regular'
|
||||
if show_apply_to_all_checkbox:
|
||||
apply_to_all = form.cleaned_data['apply_to_all']
|
||||
title = form.cleaned_data['title']
|
||||
|
@ -2244,7 +2244,7 @@ def proceedings(request, num=None):
|
|||
plenaries = sessions.filter(name__icontains='plenary').exclude(current_status='notmeet')
|
||||
ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu')
|
||||
irtf = sessions.filter(group__parent__acronym = 'irtf')
|
||||
training = sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['session', 'other', ]).exclude(current_status='notmeet')
|
||||
training = sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['regular', 'other', ]).exclude(current_status='notmeet')
|
||||
iab = sessions.filter(group__parent__acronym = 'iab').exclude(current_status='notmeet')
|
||||
|
||||
cache_version = Document.objects.filter(session__meeting__number=meeting.number).aggregate(Max('time'))["time__max"]
|
||||
|
@ -2529,7 +2529,7 @@ def approve_proposed_slides(request, slidesubmission_id, num):
|
|||
|
||||
session_number = None
|
||||
sessions = get_sessions(submission.session.meeting.number,submission.session.group.acronym)
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if submission.session.type_id == 'session' else False
|
||||
show_apply_to_all_checkbox = len(sessions) > 1 if submission.session.type_id == 'regular' else False
|
||||
if len(sessions) > 1:
|
||||
session_number = 1 + sessions.index(submission.session)
|
||||
name, _ = os.path.splitext(submission.filename)
|
||||
|
@ -2538,7 +2538,7 @@ def approve_proposed_slides(request, slidesubmission_id, num):
|
|||
if request.method == 'POST':
|
||||
form = ApproveSlidesForm(show_apply_to_all_checkbox, request.POST)
|
||||
if form.is_valid():
|
||||
apply_to_all = submission.session.type_id == 'session'
|
||||
apply_to_all = submission.session.type_id == 'regular'
|
||||
if show_apply_to_all_checkbox:
|
||||
apply_to_all = form.cleaned_data['apply_to_all']
|
||||
if request.POST.get('approve'):
|
||||
|
|
|
@ -11622,7 +11622,7 @@
|
|||
"used": true
|
||||
},
|
||||
"model": "name.timeslottypename",
|
||||
"pk": "session"
|
||||
"pk": "regular"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
|
|
|
@ -68,7 +68,7 @@ class AgendaTypeName(NameModel):
|
|||
class SessionStatusName(NameModel):
|
||||
"""Waiting for Approval, Approved, Waiting for Scheduling, Scheduled, Cancelled, Disapproved"""
|
||||
class TimeSlotTypeName(NameModel):
|
||||
"""Session, Break, Registration, Other(Non-Session), Reserved, unavail"""
|
||||
"""Session, Break, Registration, Other, Reserved, unavail"""
|
||||
class ConstraintName(NameModel):
|
||||
"""Conflict"""
|
||||
penalty = models.IntegerField(default=0, help_text="The penalty for violating this kind of constraint; for instance 10 (small penalty) or 10000 (large penalty)")
|
||||
|
|
|
@ -49,7 +49,7 @@ def get_times(meeting,day):
|
|||
The label is [start_time]-[end_time].
|
||||
'''
|
||||
# pick a random room
|
||||
rooms = Room.objects.filter(meeting=meeting,session_types='session')
|
||||
rooms = Room.objects.filter(meeting=meeting,session_types='regular')
|
||||
if rooms:
|
||||
room = rooms[0]
|
||||
else:
|
||||
|
@ -148,9 +148,9 @@ class TimeSlotForm(forms.Form):
|
|||
raise forms.ValidationError('{} value has an invalid format. It must be in HH:MM format'.format(duration))
|
||||
return self.cleaned_data['duration']
|
||||
|
||||
class NonSessionForm(TimeSlotForm):
|
||||
class MiscSessionForm(TimeSlotForm):
|
||||
short = forms.CharField(max_length=32,label='Short Name',help_text='Enter an abbreviated session name (used for material file names)',required=False)
|
||||
type = forms.ModelChoiceField(queryset=TimeSlotTypeName.objects.filter(used=True).exclude(slug__in=('session',)),empty_label=None)
|
||||
type = forms.ModelChoiceField(queryset=TimeSlotTypeName.objects.filter(used=True).exclude(slug__in=('regular',)),empty_label=None)
|
||||
group = forms.ModelChoiceField(
|
||||
queryset=Group.objects.filter(type__in=['ietf','team'],state='active'),
|
||||
help_text='''Select a group to associate with this session. For example:<br>
|
||||
|
@ -166,11 +166,11 @@ class NonSessionForm(TimeSlotForm):
|
|||
self.meeting = kwargs.pop('meeting')
|
||||
if 'session' in kwargs:
|
||||
self.session = kwargs.pop('session')
|
||||
super(NonSessionForm, self).__init__(*args,**kwargs)
|
||||
super(MiscSessionForm, self).__init__(*args,**kwargs)
|
||||
self.fields['location'].queryset = Room.objects.filter(meeting=self.meeting)
|
||||
|
||||
def clean(self):
|
||||
super(NonSessionForm, self).clean()
|
||||
super(MiscSessionForm, self).clean()
|
||||
if any(self.errors):
|
||||
return
|
||||
cleaned_data = self.cleaned_data
|
||||
|
@ -199,7 +199,7 @@ class UploadBlueSheetForm(forms.Form):
|
|||
raise forms.ValidationError('Incorrect filename format')
|
||||
return file
|
||||
|
||||
class SessionEditForm(forms.ModelForm):
|
||||
class RegularSessionEditForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Session
|
||||
fields = ['agenda_note']
|
||||
|
|
|
@ -231,7 +231,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_meetings_times_delete(self):
|
||||
meeting = make_meeting_test_data()
|
||||
qs = TimeSlot.objects.filter(meeting=meeting,type='session')
|
||||
qs = TimeSlot.objects.filter(meeting=meeting,type='regular')
|
||||
before = qs.count()
|
||||
expected_deletion_count = qs.filter(time=qs.first().time).count()
|
||||
url = reverse('ietf.secr.meetings.views.times_delete',kwargs={
|
||||
|
@ -248,12 +248,12 @@ class SecrMeetingTestCase(TestCase):
|
|||
self.assertEqual(response.status_code, 200)
|
||||
response = self.client.post(url, {'post':'yes'})
|
||||
self.assertRedirects(response, redirect_url)
|
||||
after = TimeSlot.objects.filter(meeting=meeting,type='session').count()
|
||||
after = TimeSlot.objects.filter(meeting=meeting,type='regular').count()
|
||||
self.assertEqual(after,before - expected_deletion_count)
|
||||
|
||||
def test_meetings_times_edit(self):
|
||||
meeting = make_meeting_test_data()
|
||||
timeslot = TimeSlot.objects.filter(meeting=meeting,type='session').first()
|
||||
timeslot = TimeSlot.objects.filter(meeting=meeting,type='regular').first()
|
||||
url = reverse('ietf.secr.meetings.views.times_edit',kwargs={
|
||||
'meeting_id':72,
|
||||
'schedule_name':'test-schedule',
|
||||
|
@ -269,18 +269,18 @@ class SecrMeetingTestCase(TestCase):
|
|||
self.assertEqual(response.status_code, 302)
|
||||
self.assertTrue(TimeSlot.objects.filter(meeting=meeting,name='Testing'))
|
||||
|
||||
def test_meetings_nonsession(self):
|
||||
def test_meetings_misc_sessions(self):
|
||||
make_meeting_test_data()
|
||||
url = reverse('ietf.secr.meetings.views.non_session',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
url = reverse('ietf.secr.meetings.views.misc_sessions',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_meetings_nonsession_add_valid(self):
|
||||
def test_meetings_misc_session_add_valid(self):
|
||||
meeting = make_meeting_test_data()
|
||||
room = meeting.room_set.first()
|
||||
group = Group.objects.get(acronym='secretariat')
|
||||
url = reverse('ietf.secr.meetings.views.non_session',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
url = reverse('ietf.secr.meetings.views.misc_sessions',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url, {
|
||||
'day':'1',
|
||||
|
@ -298,10 +298,10 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
self.assertEqual(session.timeslotassignments.first().timeslot.location, room)
|
||||
|
||||
def test_meetings_nonsession_add_invalid(self):
|
||||
def test_meetings_misc_session_add_invalid(self):
|
||||
make_meeting_test_data()
|
||||
group = Group.objects.get(acronym='secretariat')
|
||||
url = reverse('ietf.secr.meetings.views.non_session',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
url = reverse('ietf.secr.meetings.views.misc_sessions',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url, {
|
||||
'day':'1',
|
||||
|
@ -315,12 +315,12 @@ class SecrMeetingTestCase(TestCase):
|
|||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, 'invalid format')
|
||||
|
||||
def test_meetings_nonsession_edit(self):
|
||||
def test_meetings_misc_session_edit(self):
|
||||
meeting = make_meeting_test_data()
|
||||
session = meeting.session_set.exclude(name='').first() # get first non-session session
|
||||
session = meeting.session_set.exclude(name='').first() # get first misc session
|
||||
timeslot = session.official_timeslotassignment().timeslot
|
||||
url = reverse('ietf.secr.meetings.views.non_session_edit',kwargs={'meeting_id':72,'schedule_name':meeting.schedule.name,'slot_id':timeslot.pk})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.non_session',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
url = reverse('ietf.secr.meetings.views.misc_session_edit',kwargs={'meeting_id':72,'schedule_name':meeting.schedule.name,'slot_id':timeslot.pk})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.misc_sessions',kwargs={'meeting_id':72,'schedule_name':'test-schedule'})
|
||||
new_time = timeslot.time + datetime.timedelta(days=1)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
|
@ -339,11 +339,11 @@ class SecrMeetingTestCase(TestCase):
|
|||
timeslot = session.official_timeslotassignment().timeslot
|
||||
self.assertEqual(timeslot.time,new_time)
|
||||
|
||||
def test_meetings_non_session_delete(self):
|
||||
def test_meetings_misc_session_delete(self):
|
||||
meeting = make_meeting_test_data()
|
||||
slot = meeting.schedule.assignments.filter(timeslot__type='reg').first().timeslot
|
||||
url = reverse('ietf.secr.meetings.views.non_session_delete', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name,'slot_id':slot.id})
|
||||
target = reverse('ietf.secr.meetings.views.non_session', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name})
|
||||
url = reverse('ietf.secr.meetings.views.misc_session_delete', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name,'slot_id':slot.id})
|
||||
target = reverse('ietf.secr.meetings.views.misc_sessions', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -351,11 +351,11 @@ class SecrMeetingTestCase(TestCase):
|
|||
self.assertRedirects(response, target)
|
||||
self.assertFalse(meeting.schedule.assignments.filter(timeslot=slot))
|
||||
|
||||
def test_meetings_non_session_cancel(self):
|
||||
def test_meetings_misc_session_cancel(self):
|
||||
meeting = make_meeting_test_data()
|
||||
slot = meeting.schedule.assignments.filter(timeslot__type='reg').first().timeslot
|
||||
url = reverse('ietf.secr.meetings.views.non_session_cancel', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name,'slot_id':slot.id})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.non_session', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name})
|
||||
url = reverse('ietf.secr.meetings.views.misc_session_cancel', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name,'slot_id':slot.id})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.misc_sessions', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -364,11 +364,11 @@ class SecrMeetingTestCase(TestCase):
|
|||
session = slot.sessionassignments.filter(schedule=meeting.schedule).first().session
|
||||
self.assertEqual(SchedulingEvent.objects.filter(session=session).order_by('-id')[0].status_id, 'canceled')
|
||||
|
||||
def test_meetings_session_edit(self):
|
||||
def test_meetings_regular_session_edit(self):
|
||||
meeting = make_meeting_test_data()
|
||||
session = Session.objects.filter(meeting=meeting,group__acronym='mars').first()
|
||||
url = reverse('ietf.secr.meetings.views.session_edit', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name,'session_id':session.id})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.sessions', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name})
|
||||
url = reverse('ietf.secr.meetings.views.regular_session_edit', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name,'session_id':session.id})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.regular_sessions', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.schedule.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -382,7 +382,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
# -----------------------
|
||||
def test_get_times(self):
|
||||
meeting = make_meeting_test_data()
|
||||
timeslot = meeting.timeslot_set.filter(type='session').first()
|
||||
timeslot = meeting.timeslot_set.filter(type='regular').first()
|
||||
day = (timeslot.time.weekday() + 1) % 7 + 1 # fix up to match django __week_day filter
|
||||
times = get_times(meeting,day)
|
||||
values = [ x[0] for x in times ]
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
||||
|
||||
from ietf.secr.meetings import views
|
||||
from ietf.utils.urls import url
|
||||
|
@ -13,14 +14,14 @@ urlpatterns = [
|
|||
url(r'^(?P<meeting_id>\d{1,6})/edit/$', views.edit_meeting),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/notifications/$', views.notifications),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/$', views.rooms),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/$', views.non_session),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/cancel/(?P<slot_id>\d{1,6})/$', views.non_session_cancel),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/edit/(?P<slot_id>\d{1,6})/$', views.non_session_edit),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/delete/(?P<slot_id>\d{1,6})/$', views.non_session_delete),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/miscsessions/$', views.misc_sessions),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/miscsessions/cancel/(?P<slot_id>\d{1,6})/$', views.misc_session_cancel),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/miscsessions/edit/(?P<slot_id>\d{1,6})/$', views.misc_session_edit),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/miscsessions/delete/(?P<slot_id>\d{1,6})/$', views.misc_session_delete),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/rooms/$', views.rooms),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/$', views.times),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/sessions/$', views.sessions),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/regularsessions/$', views.regular_sessions),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/delete/(?P<time>[0-9\:]+)/$', views.times_delete),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/edit/(?P<time>[0-9\:]+)/$', views.times_edit),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/(?P<session_id>\d{1,6})/edit/$', views.session_edit),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/(?P<session_id>\d{1,6})/edit/$', views.regular_session_edit),
|
||||
]
|
||||
|
|
|
@ -25,7 +25,7 @@ from ietf.group.models import Group, GroupEvent
|
|||
from ietf.person.models import Person
|
||||
from ietf.secr.meetings.blue_sheets import create_blue_sheets
|
||||
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm, MeetingSelectForm,
|
||||
MeetingRoomForm, NonSessionForm, TimeSlotForm, SessionEditForm,
|
||||
MeetingRoomForm, MiscSessionForm, TimeSlotForm, RegularSessionEditForm,
|
||||
UploadBlueSheetForm )
|
||||
from ietf.secr.proceedings.utils import handle_upload_file
|
||||
from ietf.secr.sreq.views import get_initial_session
|
||||
|
@ -45,16 +45,16 @@ def build_timeslots(meeting,room=None):
|
|||
If room is passed pre-create timeslots for the new room. Call this after saving new rooms
|
||||
or adding a room.
|
||||
'''
|
||||
slots = meeting.timeslot_set.filter(type='session')
|
||||
slots = meeting.timeslot_set.filter(type='regular')
|
||||
|
||||
# Don't do anything if the room is not capable of handling sessions
|
||||
if room and not room.session_types.filter(slug='session'):
|
||||
if room and not room.session_types.filter(slug='regular'):
|
||||
return
|
||||
|
||||
if room:
|
||||
rooms = [room]
|
||||
else:
|
||||
rooms = meeting.room_set.filter(session_types__slug='session')
|
||||
rooms = meeting.room_set.filter(session_types__slug='regular')
|
||||
if not slots or room:
|
||||
# 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
|
||||
|
@ -66,23 +66,23 @@ def build_timeslots(meeting,room=None):
|
|||
delta = meeting.date - source_meeting.date
|
||||
timeslots = []
|
||||
time_seen = set()
|
||||
for t in source_meeting.timeslot_set.filter(type='session'):
|
||||
for t in source_meeting.timeslot_set.filter(type='regular'):
|
||||
if not t.time in time_seen:
|
||||
time_seen.add(t.time)
|
||||
timeslots.append(t)
|
||||
for t in timeslots:
|
||||
new_time = t.time + delta
|
||||
for room in rooms:
|
||||
TimeSlot.objects.create(type_id='session',
|
||||
TimeSlot.objects.create(type_id='regular',
|
||||
meeting=meeting,
|
||||
name=t.name,
|
||||
time=new_time,
|
||||
location=room,
|
||||
duration=t.duration)
|
||||
|
||||
def check_nonsession(meeting,schedule):
|
||||
def check_misc_sessions(meeting,schedule):
|
||||
'''
|
||||
Ensure non-session timeslots exist and have appropriate SchedTimeSessAssignment objects
|
||||
Ensure misc session timeslots exist and have appropriate SchedTimeSessAssignment objects
|
||||
for the specified schedule.
|
||||
'''
|
||||
slots = TimeSlot.objects.filter(meeting=meeting,type__in=('break','reg','other','plenary','lead','offagenda'))
|
||||
|
@ -370,21 +370,21 @@ def main(request):
|
|||
)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def non_session(request, meeting_id, schedule_name):
|
||||
def misc_sessions(request, meeting_id, schedule_name):
|
||||
'''
|
||||
Display and add "non-session" time slots, ie. registration, beverage and snack breaks
|
||||
Display and add misc session time slots, e.g. registration, beverage and snack breaks
|
||||
'''
|
||||
meeting = get_object_or_404(Meeting, number=meeting_id)
|
||||
schedule = get_object_or_404(Schedule, meeting=meeting, name=schedule_name)
|
||||
|
||||
check_nonsession(meeting,schedule)
|
||||
check_misc_sessions(meeting,schedule)
|
||||
|
||||
non_session_types = ('break','reg','other','plenary','lead')
|
||||
assignments = schedule.assignments.filter(timeslot__type__in=non_session_types)
|
||||
misc_session_types = ['break','reg','other','plenary','lead']
|
||||
assignments = schedule.assignments.filter(timeslot__type__in=misc_session_types)
|
||||
assignments = assignments.order_by('-timeslot__type__name','timeslot__time')
|
||||
|
||||
if request.method == 'POST':
|
||||
form = NonSessionForm(request.POST, meeting=meeting)
|
||||
form = MiscSessionForm(request.POST, meeting=meeting)
|
||||
if form.is_valid():
|
||||
time = get_timeslot_time(form, meeting)
|
||||
name = form.cleaned_data['name']
|
||||
|
@ -424,13 +424,14 @@ def non_session(request, meeting_id, schedule_name):
|
|||
session=session,
|
||||
schedule=schedule)
|
||||
|
||||
messages.success(request, 'Non-Sessions updated successfully')
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
messages.success(request, 'Misc. sessions updated successfully')
|
||||
return redirect('ietf.secr.meetings.views.misc_sessions', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
else:
|
||||
form = NonSessionForm(initial={'show_location':True}, meeting=meeting)
|
||||
form = MiscSessionForm(initial={'show_location':True}, meeting=meeting)
|
||||
|
||||
if TimeSlot.objects.filter(meeting=meeting,type='other',location__isnull=True):
|
||||
messages.warning(request, 'There are non-session items which do not have a room assigned')
|
||||
no_room = TimeSlot.objects.filter(meeting=meeting,type='other',location__isnull=True)
|
||||
if no_room:
|
||||
messages.warning(request, 'There are misc. session time slots which do not have a room assigned')
|
||||
|
||||
session_statuses = {
|
||||
e.session_id: e.status_id
|
||||
|
@ -440,18 +441,18 @@ def non_session(request, meeting_id, schedule_name):
|
|||
for a in assignments:
|
||||
a.current_session_status = session_statuses.get(a.session_id)
|
||||
|
||||
return render(request, 'meetings/non_session.html', {
|
||||
return render(request, 'meetings/misc_sessions.html', {
|
||||
'assignments': assignments,
|
||||
'form': form,
|
||||
'meeting': meeting,
|
||||
'schedule': schedule,
|
||||
'selected': 'non-sessions'},
|
||||
'selected': 'misc-sessions'},
|
||||
)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def non_session_cancel(request, meeting_id, schedule_name, slot_id):
|
||||
def misc_session_cancel(request, meeting_id, schedule_name, slot_id):
|
||||
'''
|
||||
This function cancels the non-session TimeSlot. Check for uploaded
|
||||
This function cancels the misc session TimeSlot. Check for uploaded
|
||||
material first. SchedTimeSessAssignment objects get cancelled as well.
|
||||
'''
|
||||
slot = get_object_or_404(TimeSlot, id=slot_id)
|
||||
|
@ -467,14 +468,14 @@ def non_session_cancel(request, meeting_id, schedule_name, slot_id):
|
|||
)
|
||||
|
||||
messages.success(request, 'The session was cancelled successfully')
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.misc_sessions', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
return render(request, 'confirm_cancel.html', {'object': slot})
|
||||
|
||||
@role_required('Secretariat')
|
||||
def non_session_delete(request, meeting_id, schedule_name, slot_id):
|
||||
def misc_session_delete(request, meeting_id, schedule_name, slot_id):
|
||||
'''
|
||||
This function deletes the non-session TimeSlot. Check for uploaded
|
||||
This function deletes the misc session TimeSlot. Check for uploaded
|
||||
material first. SchedTimeSessAssignment objects get deleted as well.
|
||||
'''
|
||||
slot = get_object_or_404(TimeSlot, id=slot_id)
|
||||
|
@ -486,7 +487,7 @@ def non_session_delete(request, meeting_id, schedule_name, slot_id):
|
|||
for session in session_objects:
|
||||
if session.materials.exclude(states__slug='deleted'):
|
||||
messages.error(request, 'Materials have already been uploaded for "%s". You must delete those before deleting the timeslot.' % slot.name)
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.misc_sessions', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
# delete high order assignments, then sessions and slots
|
||||
assignments.delete()
|
||||
|
@ -494,14 +495,14 @@ def non_session_delete(request, meeting_id, schedule_name, slot_id):
|
|||
slot.delete()
|
||||
|
||||
messages.success(request, 'The entry was deleted successfully')
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.misc_sessions', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
return render(request, 'confirm_delete.html', {'object': slot})
|
||||
|
||||
@role_required('Secretariat')
|
||||
def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
||||
def misc_session_edit(request, meeting_id, schedule_name, slot_id):
|
||||
'''
|
||||
Allows the user to assign a location to this non-session timeslot
|
||||
Allows the user to assign a location to this misc session timeslot
|
||||
'''
|
||||
meeting = get_object_or_404(Meeting, number=meeting_id)
|
||||
slot = get_object_or_404(TimeSlot, id=slot_id)
|
||||
|
@ -511,9 +512,9 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Back':
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.misc_sessions', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
form = NonSessionForm(request.POST,meeting=meeting,session=session)
|
||||
form = MiscSessionForm(request.POST,meeting=meeting,session=session)
|
||||
if form.is_valid():
|
||||
location = form.cleaned_data['location']
|
||||
group = form.cleaned_data['group']
|
||||
|
@ -537,7 +538,7 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
|||
session.save()
|
||||
|
||||
messages.success(request, 'Location saved')
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.misc_sessions', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
# we need to pass the session to the form in order to disallow changing
|
||||
|
@ -552,9 +553,9 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
|||
'duration':duration_string(slot.duration),
|
||||
'show_location':slot.show_location,
|
||||
'type':slot.type}
|
||||
form = NonSessionForm(initial=initial, meeting=meeting, session=session)
|
||||
form = MiscSessionForm(initial=initial, meeting=meeting, session=session)
|
||||
|
||||
return render(request, 'meetings/non_session_edit.html', {
|
||||
return render(request, 'meetings/misc_session_edit.html', {
|
||||
'meeting': meeting,
|
||||
'form': form,
|
||||
'schedule': schedule,
|
||||
|
@ -570,7 +571,7 @@ def notifications(request, meeting_id):
|
|||
meeting = get_object_or_404(Meeting, number=meeting_id)
|
||||
last_notice = GroupEvent.objects.filter(type='sent_notification').first()
|
||||
groups = set()
|
||||
for ss in meeting.schedule.assignments.filter(timeslot__type='session'):
|
||||
for ss in meeting.schedule.assignments.filter(timeslot__type='regular'):
|
||||
last_notice = ss.session.group.latest_event(type='sent_notification')
|
||||
if last_notice and ss.modified > last_notice.time:
|
||||
groups.add(ss.session.group)
|
||||
|
@ -643,7 +644,7 @@ def rooms(request, meeting_id, schedule_name):
|
|||
)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def sessions(request, meeting_id, schedule_name):
|
||||
def regular_sessions(request, meeting_id, schedule_name):
|
||||
'''
|
||||
Display and edit Session records for the specified meeting
|
||||
'''
|
||||
|
@ -675,11 +676,11 @@ def sessions(request, meeting_id, schedule_name):
|
|||
'schedule': schedule,
|
||||
'sessions': sessions,
|
||||
'formset': None,
|
||||
'selected': 'sessions',},
|
||||
'selected': 'regular-sessions',},
|
||||
)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def session_edit(request, meeting_id, schedule_name, session_id):
|
||||
def regular_session_edit(request, meeting_id, schedule_name, session_id):
|
||||
'''
|
||||
Edit session details
|
||||
'''
|
||||
|
@ -689,21 +690,21 @@ def session_edit(request, meeting_id, schedule_name, session_id):
|
|||
assignment = SchedTimeSessAssignment.objects.filter(schedule=schedule, session=session).first()
|
||||
|
||||
if request.method == 'POST':
|
||||
form = SessionEditForm(request.POST, instance=session)
|
||||
form = RegularSessionEditForm(request.POST, instance=session)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Session saved')
|
||||
return redirect('ietf.secr.meetings.views.sessions', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.regular_sessions', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
form = SessionEditForm(instance=session)
|
||||
form = RegularSessionEditForm(instance=session)
|
||||
|
||||
current_status_name = None
|
||||
latest_event = SchedulingEvent.objects.filter(session=session).order_by('-time', '-id').first()
|
||||
if latest_event:
|
||||
current_status_name = latest_event.status.name
|
||||
|
||||
return render(request, 'meetings/session_edit.html', {
|
||||
return render(request, 'meetings/regular_session_edit.html', {
|
||||
'meeting': meeting,
|
||||
'schedule': schedule,
|
||||
'session': session,
|
||||
|
@ -728,7 +729,7 @@ def times(request, meeting_id, schedule_name):
|
|||
slots = []
|
||||
timeslots = []
|
||||
time_seen = set()
|
||||
for t in meeting.timeslot_set.filter(type='session'):
|
||||
for t in meeting.timeslot_set.filter(type='regular'):
|
||||
if not t.time in time_seen:
|
||||
time_seen.add(t.time)
|
||||
timeslots.append(t)
|
||||
|
@ -752,7 +753,7 @@ def times(request, meeting_id, schedule_name):
|
|||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
for room in meeting.room_set.all():
|
||||
TimeSlot.objects.create(type_id='session',
|
||||
TimeSlot.objects.create(type_id='regular',
|
||||
meeting=meeting,
|
||||
name=name,
|
||||
time=time,
|
||||
|
|
|
@ -28,7 +28,7 @@ class RecordingForm(forms.Form):
|
|||
self.meeting = kwargs.pop('meeting')
|
||||
super(RecordingForm, self).__init__(*args,**kwargs)
|
||||
self.fields['session'].queryset = add_event_info_to_session_qs(
|
||||
Session.objects.filter(meeting=self.meeting, type__in=('session','plenary','other'))
|
||||
Session.objects.filter(meeting=self.meeting, type__in=['regular','plenary','other'])
|
||||
).filter(current_status='sched').order_by('group__acronym')
|
||||
|
||||
class RecordingEditForm(forms.ModelForm):
|
||||
|
|
|
@ -96,7 +96,7 @@ def get_extras(meeting):
|
|||
sessions = Session.objects.filter(meeting=meeting).exclude(group__parent__type__in=('area','irtf'))
|
||||
for session in sessions:
|
||||
timeslot = get_timeslot(session)
|
||||
if timeslot and timeslot.type.slug == 'session' and session.materials.all():
|
||||
if timeslot and timeslot.type_id == 'regular' and session.materials.all():
|
||||
groups.append(session.group)
|
||||
return groups
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ def edit(request, acronym, num=None):
|
|||
attendees=form.cleaned_data['attendees'],
|
||||
requested_duration=duration,
|
||||
comments=form.cleaned_data['comments'],
|
||||
type_id='session',
|
||||
type_id='regular',
|
||||
)
|
||||
SchedulingEvent.objects.create(
|
||||
session=new_session,
|
||||
|
@ -427,7 +427,7 @@ def edit(request, acronym, num=None):
|
|||
attendees=form.cleaned_data['attendees'],
|
||||
requested_duration=duration,
|
||||
comments=form.cleaned_data['comments'],
|
||||
type_id='session',
|
||||
type_id='regular',
|
||||
)
|
||||
SchedulingEvent.objects.create(
|
||||
session=new_session,
|
||||
|
@ -638,7 +638,7 @@ def no_session(request, acronym):
|
|||
group=group,
|
||||
meeting=meeting,
|
||||
requested_duration=datetime.timedelta(0),
|
||||
type_id='session',
|
||||
type_id='regular',
|
||||
)
|
||||
SchedulingEvent.objects.create(
|
||||
session=session,
|
||||
|
|
|
@ -461,7 +461,7 @@ input.draft-file-input {
|
|||
Meeting Tool
|
||||
========================================================================== */
|
||||
|
||||
#non-session-edit-form input[type="text"] {
|
||||
#misc-session-edit-form input[type="text"] {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
<ul class="list-nav">
|
||||
<li id="nav-room" class="leftmost{% if selected == 'rooms' %} selected{% endif %}"><a href="{% url "ietf.secr.meetings.views.rooms" meeting_id=meeting.number schedule_name=schedule.name %}">Rooms</a></li>
|
||||
<li id="nav-time" class="{% if selected == 'times' %}selected{% endif %}"><a href="{% url "ietf.secr.meetings.views.times" meeting_id=meeting.number schedule_name=schedule.name %}">Times</a></li>
|
||||
<li id="nav-non-session" class="{% if selected == 'non-sessions' %}selected{% endif %}"><a href="{% url "ietf.secr.meetings.views.non_session" meeting_id=meeting.number schedule_name=schedule.name %}">Non-Session</a></li>
|
||||
<li id="nav-session" class="{% if selected == 'sessions' %}selected{% endif %}"><a href="{% url "ietf.secr.meetings.views.sessions" meeting_id=meeting.number schedule_name=schedule.name %}">Sessions</a></li>
|
||||
<li id="nav-misc-session" class="{% if selected == 'misc-sessions' %}selected{% endif %}"><a href="{% url "ietf.secr.meetings.views.misc_sessions" meeting_id=meeting.number schedule_name=schedule.name %}">Misc. Sessions</a></li>
|
||||
<li id="nav-session" class="{% if selected == 'regular-sessions' %}selected{% endif %}"><a href="{% url "ietf.secr.meetings.views.regular_sessions" meeting_id=meeting.number schedule_name=schedule.name %}">Regular Sessions</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<div class="module interim-container">
|
||||
<h2>Meeting - {{ meeting }}</h2>
|
||||
<p><h3>Session: {{ slot.name }}</h3></p>
|
||||
<form id="non-session-edit-form" enctype="multipart/form-data" action="." method="post">{% csrf_token %}
|
||||
<form id="misc-session-edit-form" enctype="multipart/form-data" action="." method="post">{% csrf_token %}
|
||||
<table class="full-width amstable">
|
||||
{{ form.as_table }}
|
||||
</table>
|
|
@ -6,7 +6,7 @@
|
|||
<h2>TimeSlots</h2>
|
||||
|
||||
{% if assignments %}
|
||||
<table id="nonsessions" class="full-width">
|
||||
<table id="misc-sessions" class="full-width">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Day</th>
|
||||
|
@ -33,13 +33,13 @@
|
|||
<td>{{ assignment.timeslot.location }}</td>
|
||||
<td>{{ assignment.timeslot.show_location }}</td>
|
||||
<td>{{ assignment.timeslot.type }}</td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.non_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Edit</a></td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.misc_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Edit</a></td>
|
||||
<td>
|
||||
{% if not assignment.session.type.slug == "break" %}
|
||||
<a href="{% url "ietf.secr.meetings.views.non_session_cancel" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Cancel</a>
|
||||
<a href="{% url "ietf.secr.meetings.views.misc_session_cancel" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Cancel</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.non_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Delete</a></td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.misc_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=assignment.timeslot.id %}">Delete</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
|
@ -45,7 +45,7 @@
|
|||
<div class="button-group">
|
||||
<ul>
|
||||
<li><button type="submit" name="submit" value="Save">Save</button></li>
|
||||
<li><button type="button" onclick="window.location='{% url "ietf.secr.meetings.views.sessions" meeting_id=meeting.number schedule_name=schedule.name %}'">Back</button></li>
|
||||
<li><button type="button" onclick="window.location='{% url "ietf.secr.meetings.views.regular_sessions" meeting_id=meeting.number schedule_name=schedule.name %}'">Back</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
</td>
|
||||
<td>{{ session.agenda_note }}</td>
|
||||
<td>{{ session.current_status_name }}</td>
|
||||
<td><a href="{% url 'ietf.secr.meetings.views.session_edit' meeting_id=meeting.number schedule_name=schedule.name session_id=session.id %}">Edit</a></td>
|
||||
<td><a href="{% url 'ietf.secr.meetings.views.regular_session_edit' meeting_id=meeting.number schedule_name=schedule.name session_id=session.id %}">Edit</a></td>
|
||||
<td>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
|
|
|
@ -378,7 +378,7 @@ function calculate_room_select_box() {
|
|||
html=html+"' id='info_location_select_option_";
|
||||
html=html+value.timeslot_id+"'>";
|
||||
html=html+value.short_string;
|
||||
if(value.roomtype != "session") {
|
||||
if(value.roomtype != "regular") {
|
||||
html = html+ "(" + value.roomtype + ")";
|
||||
}
|
||||
html=html+"</option>";
|
||||
|
|
|
@ -252,7 +252,7 @@ function build_select_box(roomtype, domid, slot_id, select_id) {
|
|||
roomtypeclass="";
|
||||
roomtypeunavailable="";
|
||||
|
||||
if(roomtype == "session") {
|
||||
if(roomtype == "regular") {
|
||||
roomtypesession="selected";
|
||||
roomtypeclass="agenda_slot_session";
|
||||
} else if(roomtype == "other") {
|
||||
|
@ -270,8 +270,8 @@ function build_select_box(roomtype, domid, slot_id, select_id) {
|
|||
}
|
||||
|
||||
html = "<form action=\"/some/place\" method=\"post\"><select id='"+select_id+"'>";
|
||||
html = html + "<option value='session' "+roomtypesession+" id='option_"+domid+"_session'>session</option>";
|
||||
html = html + "<option value='other' "+roomtypeother+" id='option_"+domid+"_other'>non-session</option>";
|
||||
html = html + "<option value='regular' "+roomtypesession+" id='option_"+domid+"_session'>regular session</option>";
|
||||
html = html + "<option value='other' "+roomtypeother+" id='option_"+domid+"_other'>misc</option>";
|
||||
html = html + "<option value='reserved' "+roomtypereserved+" id='option_"+domid+"_reserved'>reserved</option>";
|
||||
html = html + "<option value='plenary' "+roomtypeplenary+" id='option_"+domid+"_plenary'>plenary</option>";
|
||||
html = html + "<option value='unavail' "+roomtypeunavailable+" id='option_"+domid+"_unavail'>unavailable</option>";
|
||||
|
|
|
@ -168,7 +168,7 @@
|
|||
</tr>
|
||||
{% endifchanged %}
|
||||
|
||||
{% if item.timeslot.type.slug == 'session' %}
|
||||
{% if item.timeslot.type_id == 'regular' %}
|
||||
{% ifchanged %}
|
||||
<tr class="info">
|
||||
<th class="text-nowrap text-right">
|
||||
|
@ -248,7 +248,7 @@
|
|||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if item.timeslot.type.slug == 'session' or item.timeslot.type.slug == 'plenary' %}
|
||||
{% if item.timeslot.type_id == 'regular' or item.timeslot.type.slug == 'plenary' %}
|
||||
{% if item.session.historic_group %}
|
||||
<tr id="row-{{item.slug}}" data-ske="row-{{ item.slug }}" {% if item.timeslot.type.slug == 'plenary' %}class="{{item.timeslot.type.slug}}danger"{% endif %}>
|
||||
{% if item.timeslot.type.slug == 'plenary' %}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
{{ item.timeslot.time_desc }} {{ item.session.name }} - {{ item.timeslot.location.name }}
|
||||
|
||||
{{ item.session.agenda_text.strip|indent:"3" }}
|
||||
{% endif %}{% if item.timeslot.type.slug == "session" %}{% if item.session.historic_group %}{% ifchanged %}
|
||||
{% endif %}{% if item.timeslot.type_id == 'regular' %}{% if item.session.historic_group %}{% ifchanged %}
|
||||
|
||||
{{ item.timeslot.time_desc }} {{ item.timeslot.name }}
|
||||
{% endifchanged %}{{ item.timeslot.location.name|ljust:14 }} {{ item.session.historic_group.historic_parent.acronym|upper|ljust:4 }} {{ item.session.historic_group.acronym|ljust:10 }} {{ item.session.historic_group.name }} {% if item.session.historic_group.state_id == "bof" %}BOF{% elif item.session.historic_group.type_id == "wg" %}WG{% endif %}{% if item.session.agenda_note %} - {{ item.session.agenda_note }}{% endif %}{% if item.session.current_status == 'canceled' %} *** CANCELLED ***{% endif %}
|
||||
|
|
|
@ -45,7 +45,7 @@ li.daylistentry { margin-left:2em; font-weight: 400; }
|
|||
<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>
|
||||
<td>{% if ss.session.type_id == 'session' or ss.session.type_id == 'plenary' or ss.session.type_id == 'other' %} <a href="{% url 'ietf.meeting.views.session_details' num=ss.session.meeting.number acronym=ss.session.group.acronym %}">Materials</a>{% else %} {% endif %}</td>
|
||||
<td>{% if ss.session.type_id == 'regular' or ss.session.type_id == 'plenary' or ss.session.type_id == 'other' %} <a href="{% url 'ietf.meeting.views.session_details' num=ss.session.meeting.number acronym=ss.session.group.acronym %}">Materials</a>{% else %} {% endif %}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<span class="label label-warning">No minutes</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if session.type.slug == 'session' and show_agenda == "True" %}
|
||||
{% if session.type_id == 'regular' and show_agenda == "True" %}
|
||||
{% if session.all_meeting_bluesheets %}
|
||||
{% if session.all_meeting_bluesheets|length == 1 %}
|
||||
<a href="{{ session.all_meeting_bluesheets.0|meeting_href:session.meeting }}">Bluesheets</a><br>
|
||||
|
|
Loading…
Reference in a new issue