From 90a793232515ccda8287b07570177c537eef54f9 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 15 May 2023 09:46:36 -0500 Subject: [PATCH 1/2] fix: show meeting timezone when editing sessions --- ietf/meeting/templatetags/session_filters.py | 29 ++++++++++++++++++++ ietf/templates/meeting/edit_session.html | 7 +++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ietf/meeting/templatetags/session_filters.py b/ietf/meeting/templatetags/session_filters.py index 2a3da702835..75cd88ee1c2 100644 --- a/ietf/meeting/templatetags/session_filters.py +++ b/ietf/meeting/templatetags/session_filters.py @@ -1,5 +1,8 @@ +# Copyright The IETF Trust 2023, All Rights Reserved from django import template +from ietf.name.models import SessionStatusName + register = template.Library() @register.filter @@ -15,3 +18,29 @@ def presented_versions(session,doc): def can_manage_materials(session,user): return session.can_manage_materials(user) +@register.filter +def describe_with_tz(session): + # Very similar to session.__str__, but doesn't treat interims differently from sessions at an IETF meeting + # and displays the timeslot in the meeting's timezone. + + if session is None: + return "" + + status_id = None + if hasattr(session, 'current_status'): + status_id = session.current_status + elif session.pk is not None: + latest_event = session.schedulingevent_set.order_by('-time', '-id').first() + if latest_event: + status_id = latest_event.status_id + + if status_id in ('canceled','disappr','notmeet','deleted'): + ss0name = "(%s)" % SessionStatusName.objects.get(slug=status_id).name + else: + ss0name = "(unscheduled)" + ss = session.timeslotassignments.filter(schedule__in=[session.meeting.schedule, session.meeting.schedule.base if session.meeting.schedule else None]).order_by('timeslot__time') + if ss: + ss0name = ','.join(x.timeslot.time.astimezone(session.meeting.tz()).strftime("%a-%H%M") for x in ss) + ss0name += f' {session.meeting.tz()}' + return f"{session.meeting}: {session.group.acronym} {session.name} {ss0name}" + diff --git a/ietf/templates/meeting/edit_session.html b/ietf/templates/meeting/edit_session.html index eb0ed348224..4e4ce094cac 100644 --- a/ietf/templates/meeting/edit_session.html +++ b/ietf/templates/meeting/edit_session.html @@ -1,15 +1,16 @@ {% extends "base.html" %} -{# Copyright The IETF Trust 2021, All Rights Reserved #} +{# Copyright The IETF Trust 2023, All Rights Reserved #} {% load origin %} {% load django_bootstrap5 %} +{% load session_filters %} {% block pagehead %}{{ form.media.css }}{% endblock %} -{% block title %}Edit session "{{ session }}"{% endblock %} +{% block title %}Edit session "{{ session|describe_with_tz }}"{% endblock %} {% block content %} {% origin %}

Edit session
- {{ session }} + {{ session|describe_with_tz }}

{% csrf_token %} From 591a42964fa195d9b2b8ae444398ada40b1225b1 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 15 May 2023 09:58:11 -0500 Subject: [PATCH 2/2] chore: run black on session_filters --- ietf/meeting/templatetags/session_filters.py | 74 +++++++++++--------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/ietf/meeting/templatetags/session_filters.py b/ietf/meeting/templatetags/session_filters.py index 75cd88ee1c2..4fe377a8136 100644 --- a/ietf/meeting/templatetags/session_filters.py +++ b/ietf/meeting/templatetags/session_filters.py @@ -5,42 +5,52 @@ register = template.Library() + @register.filter -def presented_versions(session,doc): - sp = session.sessionpresentation_set.filter(document=doc) - if not sp: - return "Document not in session" - else: - rev = sp.first().rev - return rev if rev else "(current)" +def presented_versions(session, doc): + sp = session.sessionpresentation_set.filter(document=doc) + if not sp: + return "Document not in session" + else: + rev = sp.first().rev + return rev if rev else "(current)" + @register.filter -def can_manage_materials(session,user): +def can_manage_materials(session, user): return session.can_manage_materials(user) + @register.filter def describe_with_tz(session): - # Very similar to session.__str__, but doesn't treat interims differently from sessions at an IETF meeting - # and displays the timeslot in the meeting's timezone. - - if session is None: - return "" - - status_id = None - if hasattr(session, 'current_status'): - status_id = session.current_status - elif session.pk is not None: - latest_event = session.schedulingevent_set.order_by('-time', '-id').first() - if latest_event: - status_id = latest_event.status_id - - if status_id in ('canceled','disappr','notmeet','deleted'): - ss0name = "(%s)" % SessionStatusName.objects.get(slug=status_id).name - else: - ss0name = "(unscheduled)" - ss = session.timeslotassignments.filter(schedule__in=[session.meeting.schedule, session.meeting.schedule.base if session.meeting.schedule else None]).order_by('timeslot__time') - if ss: - ss0name = ','.join(x.timeslot.time.astimezone(session.meeting.tz()).strftime("%a-%H%M") for x in ss) - ss0name += f' {session.meeting.tz()}' - return f"{session.meeting}: {session.group.acronym} {session.name} {ss0name}" - + # Very similar to session.__str__, but doesn't treat interims differently from sessions at an IETF meeting + # and displays the timeslot in the meeting's timezone. + + if session is None: + return "" + + status_id = None + if hasattr(session, "current_status"): + status_id = session.current_status + elif session.pk is not None: + latest_event = session.schedulingevent_set.order_by("-time", "-id").first() + if latest_event: + status_id = latest_event.status_id + + if status_id in ("canceled", "disappr", "notmeet", "deleted"): + ss0name = "(%s)" % SessionStatusName.objects.get(slug=status_id).name + else: + ss0name = "(unscheduled)" + ss = session.timeslotassignments.filter( + schedule__in=[ + session.meeting.schedule, + session.meeting.schedule.base if session.meeting.schedule else None, + ] + ).order_by("timeslot__time") + if ss: + ss0name = ",".join( + x.timeslot.time.astimezone(session.meeting.tz()).strftime("%a-%H%M") + for x in ss + ) + ss0name += f" {session.meeting.tz()}" + return f"{session.meeting}: {session.group.acronym} {session.name} {ss0name}"