From 2029fb74fa896a20dcc2ebb9ab8cab0cd482b752 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Fri, 21 Aug 2020 12:15:52 +0000 Subject: [PATCH] Add private bit to time slot types so that it can be configured in the admin instead of hardcoding the list of private sessions types in the code. - Legacy-Id: 18402 --- ietf/meeting/views.py | 20 +++++++------- ietf/name/fixtures/names.json | 9 +++++++ .../0018_add_timeslottypename_private.py | 26 +++++++++++++++++++ ...y => 0019_add_rescheduled_session_name.py} | 2 +- ietf/name/models.py | 1 + 5 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 ietf/name/migrations/0018_add_timeslottypename_private.py rename ietf/name/migrations/{0018_add_rescheduled_session_name.py => 0019_add_rescheduled_session_name.py} (90%) diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index c47f9e190..8364ded5c 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -1344,9 +1344,8 @@ def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc="" updated = meeting.updated() filtered_assignments = SchedTimeSessAssignment.objects.filter( - schedule__in=[schedule, schedule.base] - ).exclude( - timeslot__type__in=['lead', 'offagenda'] + schedule__in=[schedule, schedule.base], + timeslot__type__private=False, ) filtered_assignments = preprocess_assignments_for_agenda(filtered_assignments, meeting) @@ -1641,9 +1640,8 @@ def week_view(request, num=None, name=None, owner=None): raise Http404 filtered_assignments = SchedTimeSessAssignment.objects.filter( - schedule__in=[schedule, schedule.base] - ).exclude( - timeslot__type__in=['lead','offagenda'] + schedule__in=[schedule, schedule.base], + timeslot__type__private=False, ) # Only show assignments from the traditional meeting "week" (Sat-Fri). # We'll determine this using the saturday before the first scheduled regular session. @@ -1815,7 +1813,10 @@ def agenda_ical(request, num=None, name=None, acronym=None, session_id=None): elif len(item) > 1 and item[0] == '~': include_types |= set([item[1:]]) - assignments = SchedTimeSessAssignment.objects.filter(schedule__in=[schedule, schedule.base]).exclude(timeslot__type__in=['lead','offagenda']) + assignments = SchedTimeSessAssignment.objects.filter( + schedule__in=[schedule, schedule.base], + timeslot__type__private=False, + ) assignments = preprocess_assignments_for_agenda(assignments, meeting) if q: @@ -1848,9 +1849,10 @@ def agenda_json(request, num=None): locations = set() parent_acronyms = set() assignments = SchedTimeSessAssignment.objects.filter( - schedule__in=[meeting.schedule, meeting.schedule.base if meeting.schedule else None] + schedule__in=[meeting.schedule, meeting.schedule.base if meeting.schedule else None], + timeslot__type__private=False, ).exclude( - session__type__in=['lead','offagenda','break','reg'] + session__type__in=['break', 'reg'] ) # Update the assignments with historic information, i.e., valid at the # time of the meeting diff --git a/ietf/name/fixtures/names.json b/ietf/name/fixtures/names.json index d9d255eb1..28484eb60 100644 --- a/ietf/name/fixtures/names.json +++ b/ietf/name/fixtures/names.json @@ -12372,6 +12372,7 @@ "desc": "", "name": "Break", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", @@ -12382,6 +12383,7 @@ "desc": "Leadership Meetings", "name": "Leadership", "order": 0, + "private": true, "used": true }, "model": "name.timeslottypename", @@ -12392,6 +12394,7 @@ "desc": "Other Meetings Not Published on Agenda", "name": "Off Agenda", "order": 0, + "private": true, "used": true }, "model": "name.timeslottypename", @@ -12402,6 +12405,7 @@ "desc": "", "name": "Other", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", @@ -12412,6 +12416,7 @@ "desc": "", "name": "Plenary", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", @@ -12422,6 +12427,7 @@ "desc": "", "name": "Registration", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", @@ -12432,6 +12438,7 @@ "desc": "", "name": "Regular", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", @@ -12442,6 +12449,7 @@ "desc": "A room has been reserved for use by another body the timeslot indicated", "name": "Room Reserved", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", @@ -12452,6 +12460,7 @@ "desc": "A room was not booked for the timeslot indicated", "name": "Room Unavailable", "order": 0, + "private": false, "used": true }, "model": "name.timeslottypename", diff --git a/ietf/name/migrations/0018_add_timeslottypename_private.py b/ietf/name/migrations/0018_add_timeslottypename_private.py new file mode 100644 index 000000000..b28d3a12c --- /dev/null +++ b/ietf/name/migrations/0018_add_timeslottypename_private.py @@ -0,0 +1,26 @@ +# Generated by Django 2.2.15 on 2020-08-20 02:40 + +from django.db import migrations, models + +def set_private_bit_on_timeslottypename(apps, schema_editor): + TimeSlotTypeName = apps.get_model('name', 'TimeSlotTypeName') + + TimeSlotTypeName.objects.filter(slug__in=['lead', 'offagenda']).update(private=True) + +def noop(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('name', '0017_update_constraintname_order_and_label'), + ] + + operations = [ + migrations.AddField( + model_name='timeslottypename', + name='private', + field=models.BooleanField(default=False, help_text='Whether sessions of this type should be kept off the public agenda'), + ), + migrations.RunPython(set_private_bit_on_timeslottypename, noop), + ] diff --git a/ietf/name/migrations/0018_add_rescheduled_session_name.py b/ietf/name/migrations/0019_add_rescheduled_session_name.py similarity index 90% rename from ietf/name/migrations/0018_add_rescheduled_session_name.py rename to ietf/name/migrations/0019_add_rescheduled_session_name.py index eec77270a..b99774211 100644 --- a/ietf/name/migrations/0018_add_rescheduled_session_name.py +++ b/ietf/name/migrations/0019_add_rescheduled_session_name.py @@ -6,7 +6,7 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('name', '0017_update_constraintname_order_and_label'), + ('name', '0018_add_timeslottypename_private'), ] def add_rescheduled_session_status_name(apps, schema_editor): diff --git a/ietf/name/models.py b/ietf/name/models.py index 648f07abd..a4d733034 100644 --- a/ietf/name/models.py +++ b/ietf/name/models.py @@ -66,6 +66,7 @@ class SessionStatusName(NameModel): """Waiting for Approval, Approved, Waiting for Scheduling, Scheduled, Cancelled, Disapproved""" class TimeSlotTypeName(NameModel): """Session, Break, Registration, Other, Reserved, unavail""" + private = models.BooleanField(default=False, help_text="Whether sessions of this type should be kept off the public agenda") class ConstraintName(NameModel): """conflict, conflic2, conflic3, bethere, timerange, time_relation, wg_adjacent""" penalty = models.IntegerField(default=0, help_text="The penalty for violating this kind of constraint; for instance 10 (small penalty) or 10000 (large penalty)")