From 7dbac2067f7ae302f3e22d4d606b5871f8a233aa Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 15 May 2023 14:50:10 -0500 Subject: [PATCH] fix: show meeting timezone when editing sessions (#5619) * fix: show meeting timezone when editing sessions * chore: run black on session_filters --- ietf/meeting/templatetags/session_filters.py | 57 ++++++++++++++++---- ietf/templates/meeting/edit_session.html | 7 +-- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/ietf/meeting/templatetags/session_filters.py b/ietf/meeting/templatetags/session_filters.py index 2a3da7028..4fe377a81 100644 --- a/ietf/meeting/templatetags/session_filters.py +++ b/ietf/meeting/templatetags/session_filters.py @@ -1,17 +1,56 @@ +# Copyright The IETF Trust 2023, All Rights Reserved from django import template +from ietf.name.models import SessionStatusName + 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)" @register.filter -def can_manage_materials(session,user): +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): 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 eb0ed3482..4e4ce094c 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 %}