Repository: ietf-tools/datatracker

Issue:
Another location where meeting time zone info is incorrect
### Describe the issue

Related to #5285 ; time data is incorrectly showing in UTC. This is not a showstopper since I'm probably the only one who would see this page, but I'm just alerting you to one more place the time zone is showing as UTC instead of meeting time: on the "Edit Session" page. 

See below for an example: these office hours are scheduled for 10:30 local time but the edit session page says 01:30.

<img width="719" alt="Screen Shot 2023-03-15 at 2 24 42 PM" src="https://user-images.githubusercontent.com/29440652/225447877-90f2209a-8e79-41c8-8f6a-c054c877779e.png">


### Code of Conduct

- [X] I agree to follow the [IETF's Code of Conduct](https://github.com/ietf-tools/.github/blob/main/CODE_OF_CONDUCT.md)


Discussion:

Resolving patch:
diff --git a/ietf/meeting/templatetags/session_filters.py b/ietf/meeting/templatetags/session_filters.py
--- 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)"
+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}"


Test patch: