From e9756d89871499949e3e8668a103d6cd69610aa8 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 27 Mar 2020 22:47:38 +0000 Subject: [PATCH] Remove the not-quite-working customization widgets from /meeting/upcoming and /meeting/past. Simplify those views. Correct the list of sessions on those pages when one interim has more than one session. Fixes #2938. Partially addresses #2937. Commit ready for merge. - Legacy-Id: 17555 --- ietf/meeting/tests_views.py | 12 +-- ietf/meeting/utils.py | 42 ++++----- ietf/meeting/views.py | 31 ++++--- ietf/templates/meeting/past.html | 64 +------------ ietf/templates/meeting/upcoming.html | 129 ++++++++------------------- ietf/utils/templatetags/classname.py | 11 +++ 6 files changed, 97 insertions(+), 192 deletions(-) create mode 100644 ietf/utils/templatetags/classname.py diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index a56c088e3..56e55b1ff 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -1321,13 +1321,14 @@ class InterimTests(TestCase): today = datetime.date.today() last_week = today - datetime.timedelta(days=7) ietf = SessionFactory(meeting__type_id='ietf',meeting__date=last_week,group__state_id='active',group__parent=GroupFactory(state_id='active')) - interim = SessionFactory(meeting__type_id='interim',meeting__date=last_week,status_id='canceled',group__state_id='active',group__parent=GroupFactory(state_id='active')) + SessionFactory(meeting__type_id='interim',meeting__date=last_week,status_id='canceled',group__state_id='active',group__parent=GroupFactory(state_id='active')) url = urlreverse('ietf.meeting.views.past') r = self.client.get(url) self.assertContains(r, 'IETF - %02d'%int(ietf.meeting.number)) q = PyQuery(r.content) - id="-%s" % interim.group.acronym - self.assertIn('CANCELLED', q('[id*="'+id+'"]').text()) + #id="-%s" % interim.group.acronym + #self.assertIn('CANCELLED', q('[id*="'+id+'"]').text()) + self.assertIn('CANCELLED', q('tr>td>a>span').text()) def test_upcoming(self): make_meeting_test_data() @@ -1339,10 +1340,11 @@ class InterimTests(TestCase): r = self.client.get(url) self.assertContains(r, mars_interim.number) self.assertContains(r, ames_interim.number) - self.assertContains(r, 'IETF - 72') + self.assertContains(r, 'IETF 72') # cancelled session q = PyQuery(r.content) - self.assertIn('CANCELLED', q('[id*="-ames"]').text()) +# self.assertIn('CANCELLED', q('[id*="-ames"]').text()) + self.assertIn('CANCELLED', q('tr>td>a>span').text()) self.check_interim_tabs(url) def test_upcoming_ical(self): diff --git a/ietf/meeting/utils.py b/ietf/meeting/utils.py index 10bcef130..4329919ed 100644 --- a/ietf/meeting/utils.py +++ b/ietf/meeting/utils.py @@ -241,6 +241,26 @@ def only_sessions_that_can_meet(session_qs): return qs + +# Keeping this as a note that might help when returning Customization to the /meetings/upcoming page +#def group_parents_from_sessions(sessions): +# group_parents = list() +# parents = {} +# for s in sessions: +# if s.group.parent_id not in parents: +# parent = s.group.parent +# parent.group_list = set() +# group_parents.append(parent) +# parents[s.group.parent_id] = parent +# parent.group_list.add(s.group) +# +# for p in parents.values(): +# p.group_list = list(p.group_list) +# p.group_list.sort(key=lambda g: g.acronym) +# +# return group_parents + + def data_for_meetings_overview(meetings, interim_status=None): """Return filtered meetings with sessions and group hierarchy (for the interim menu).""" @@ -276,32 +296,12 @@ def data_for_meetings_overview(meetings, interim_status=None): if not m.type_id == 'interim' or not all(s.current_status in ['apprw', 'scheda', 'canceledpa'] for s in m.sessions) ] - # group hierarchy ietf_group = Group.objects.get(acronym='ietf') - group_hierarchy = [ietf_group] - - parents = {} - for m in meetings: - if m.type_id == 'interim' and m.sessions: - for s in m.sessions: - parent = parents.get(s.group.parent_id) - if not parent: - parent = s.group.parent - parent.group_list = set() - group_hierarchy.append(parent) - parents[s.group.parent_id] = parent - - parent.group_list.add(s.group) - - for p in parents.values(): - p.group_list = list(p.group_list) - p.group_list.sort(key=lambda g: g.acronym) - # set some useful attributes for m in meetings: m.end = m.date + datetime.timedelta(days=m.days) m.responsible_group = (m.sessions[0].group if m.sessions else None) if m.type_id == 'interim' else ietf_group m.interim_meeting_cancelled = m.type_id == 'interim' and all(s.current_status == 'canceled' for s in m.sessions) - return meetings, group_hierarchy + return meetings diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index bdd61151a..8bdc76f1c 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -1920,7 +1920,7 @@ def ajax_get_utc(request): @role_required('Secretariat',) def interim_announce(request): '''View which shows interim meeting requests awaiting announcement''' - meetings, _ = data_for_meetings_overview(Meeting.objects.filter(type='interim').order_by('date'), interim_status='scheda') + meetings = data_for_meetings_overview(Meeting.objects.filter(type='interim').order_by('date'), interim_status='scheda') menu_entries = get_interim_menu_entries(request) selected_menu_entry = 'announce' @@ -1983,7 +1983,7 @@ def interim_skip_announcement(request, number): @role_required('Area Director', 'Secretariat', 'IRTF Chair', 'WG Chair', 'RG Chair') def interim_pending(request): '''View which shows interim meeting requests pending approval''' - meetings, group_parents = data_for_meetings_overview(Meeting.objects.filter(type='interim').order_by('date'), interim_status='apprw') + meetings = data_for_meetings_overview(Meeting.objects.filter(type='interim').order_by('date'), interim_status='apprw') menu_entries = get_interim_menu_entries(request) selected_menu_entry = 'pending' @@ -2225,20 +2225,31 @@ def past(request): '''List of past meetings''' today = datetime.datetime.today() - meetings, group_parents = data_for_meetings_overview(Meeting.objects.filter(date__lte=today).order_by('-date')) + meetings = data_for_meetings_overview(Meeting.objects.filter(date__lte=today).order_by('-date')) return render(request, 'meeting/past.html', { 'meetings': meetings, - 'group_parents': group_parents}) + }) def upcoming(request): '''List of upcoming meetings''' today = datetime.date.today() # Get ietf meetings starting 7 days ago, and interim meetings starting today - query = Q(type_id='ietf', date__gte=today-datetime.timedelta(days=7)) | Q(type_id='interim', date__gte=today) - meetings = Meeting.objects.filter(query).order_by('date') - meetings, group_parents = data_for_meetings_overview(meetings) + ietf_meetings = Meeting.objects.filter(type_id='ietf', date__gte=today-datetime.timedelta(days=7)) + for m in ietf_meetings: + m.end = m.date+datetime.timedelta(days=m.days) + interim_sessions = add_event_info_to_session_qs( + Session.objects.filter( + meeting__type_id='interim', + timeslotassignments__schedule=F('meeting__schedule'), + timeslotassignments__timeslot__time__gte=today + ) + ).filter(current_status__in=('sched','canceled')) + + entries = list(ietf_meetings) + entries.extend(list(interim_sessions)) + entries.sort(key = lambda o: pytz.utc.localize(datetime.datetime.combine(o.date, datetime.datetime.min.time())) if isinstance(o,Meeting) else o.official_timeslotassignment().timeslot.utc_start_time()) # add menu entries menu_entries = get_interim_menu_entries(request) @@ -2253,11 +2264,11 @@ def upcoming(request): reverse('ietf.meeting.views.upcoming_ical'))) return render(request, 'meeting/upcoming.html', { - 'meetings': meetings, + 'entries': entries, 'menu_actions': actions, 'menu_entries': menu_entries, 'selected_menu_entry': selected_menu_entry, - 'group_parents': group_parents}) + }) def upcoming_ical(request): @@ -2266,7 +2277,7 @@ def upcoming_ical(request): today = datetime.date.today() # get meetings starting 7 days ago -- we'll filter out sessions in the past further down - meetings, _ = data_for_meetings_overview(Meeting.objects.filter(date__gte=today-datetime.timedelta(days=7)).order_by('date')) + meetings = data_for_meetings_overview(Meeting.objects.filter(date__gte=today-datetime.timedelta(days=7)).order_by('date')) assignments = list(SchedTimeSessAssignment.objects.filter( schedule__meeting__schedule=F('schedule'), diff --git a/ietf/templates/meeting/past.html b/ietf/templates/meeting/past.html index 00d8d3918..d758754ec 100644 --- a/ietf/templates/meeting/past.html +++ b/ietf/templates/meeting/past.html @@ -19,68 +19,6 @@

Past Meetings

-
-
- - -
-
-

- You can customize the list to show only selected groups - by clicking on groups and areas in the table below. - To be able to return to the customized view later, bookmark the resulting URL. -

- - {% if group_parents|length %} -

Groups displayed in italics are BOFs.

- - - - - {% for p in group_parents %} - - {% endfor %} - - - - - {% for p in group_parents %} - - {% endfor %} - - -
- -
-
- {% for group in p.group_list %} -
- -
- {% endfor %} -
-
- {% else %} -
No past meetings are available.
- {% endif %} - -
-
-
-
- {% if meetings %}

@@ -93,7 +31,7 @@ {% for meeting in meetings %} - +
{{ meeting.date }} {% if meeting.responsible_group.type_id != 'ietf' %} diff --git a/ietf/templates/meeting/upcoming.html b/ietf/templates/meeting/upcoming.html index df17c6e92..7e183375d 100644 --- a/ietf/templates/meeting/upcoming.html +++ b/ietf/templates/meeting/upcoming.html @@ -2,7 +2,7 @@ {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} -{% load ietf_filters staticfiles %} +{% load ietf_filters staticfiles classname %} {% block pagehead %} @@ -23,67 +23,6 @@

Upcoming Meetings

For more on regular IETF meetings see here

-
-
- - -
-
-

- You can customize the list to show only selected groups - by clicking on groups and areas in the table below. - To be able to return to the customized view later, bookmark the resulting URL. -

- - {% if group_parents|length %} -

Groups displayed in italics are BOFs.

- - - - - {% for p in group_parents %} - - {% endfor %} - - - - - {% for p in group_parents %} - - {% endfor %} - - -
- -
-
- {% for group in p.group_list %} -
- -
- {% endfor %} -
-
- {% else %} -
No meetings have been scheduled yet.
- {% endif %} - -
-
-
-
{% if menu_entries %}