* refactor: replace datetime.now with timezone.now * refactor: migrate model fields to use timezone.now as default * refactor: replace datetime.today with timezone.now datetime.datetime.today() is equivalent to datetime.datetime.now(); both return a naive datetime with the current local time. * refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz) This is effectively the same, but is less likely to encourage accidental use of naive datetimes. * refactor: revert datetime.today() change to old migrations * refactor: change a missed datetime.now to timezone.now * chore: renumber timezone_now migration * chore: add migration to change timestamps to UTC * refactor: move tz instantiation/caching from TimeSlot to Meeting * fix: assume utc if meeting.time_zone is blank * chore: make datetime.combine() calls tz aware in the meeting app * ci: correctly use meeting.tz in TimeSlotFactory * chore: compute TimeSlot utc / local times assuming tz-aware times * chore: use tzaware math for agenda editor timeslot layout * chore: fill in Meeting.time_zone where it is blank Nearly all interim meetings on or before 2016-07-01 have blank time_zone values. This migration fills these in with PST8PDT. * chore: disallow blank Meeting.time_zone value * refactor: no need to handle blank time_zone case in TZ migration * refactor: remove now-unnecessary checks that meeting has time_zone * chore: fix timezone handling in agenda.ics and Meeting.updated() * chore: fix tz handling in interim_request_details, exercise in tests * chore: fix timezone handling for test_interim_send_announcement * chore: fix timezone handling in agenda_json() * chore: fix timezone handling in old agenda * chore: fix timezone handling for EditTimeslotsTests * refactor: refactor a few fixes for more consistent timezone handling * chore: add timezone info to timestamps in fixtures * chore: remove naive datetime warnings found in meetings.tests_views * chore: fix a few more test failures in meetings.tests_views All tests in meetings.tests_views now passing * chore: remove unused import * chore: fix timezone handling in test_schedule_generator.py * chore: fix timezone handling affecting meeting.tests_js * chore: fix timeslot test bug when local date != UTC date * test: fix a few failing tests, all meetings tests now pass (for me, anyway) * chore: renumber migrations * chore: update timestamp conversion migration The django-celery-beat package introduces tables with timestamp columns. These columns are stored in CELERY_TIMEZONE. Because we run with this set to UTC, the migration ignores these columns. * chore: fix pytz-related change in migration * chore: remove duplicate migrations * chore: remove CELERY_BEAT_TZ_AWARE setting now that USE_TZ is True * test: avoid failure in test with bogus timezone
159 lines
6.1 KiB
HTML
159 lines
6.1 KiB
HTML
{% extends "base.html" %}
|
|
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
|
{% load origin %}
|
|
{% load static django_bootstrap5 widget_tweaks ietf_filters person_filters textfilters tz %}
|
|
{% block title %}Interim Request Details{% endblock %}
|
|
{% block pagehead %}
|
|
<link rel="stylesheet" href="{% static 'ietf/css/select2.css' %}">
|
|
{% endblock %}
|
|
{% block content %}{% timezone meeting.tz %}
|
|
{% origin %}
|
|
<h1>Interim Meeting Request Details</h1>
|
|
<dl class="row my-3">
|
|
<dt class="col-sm-2">
|
|
Group
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
<a href="{{ group.about_url }}">{{ group.acronym }}</a>
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Requested by
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{% person_link requester %}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Status
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ meeting_status.name }}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
City
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ meeting.city|default:"Online" }}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Country
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ meeting.country|default:"Online" }}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Timezone
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ meeting.time_zone }}
|
|
</dd>
|
|
{% for assignment in meeting_assignments %}
|
|
{% if meeting_assignments|length > 1 %}
|
|
<dt class="col-sm-2">
|
|
Session
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ assignment.status.name }}
|
|
</dd>
|
|
{% endif %}
|
|
<dt class="col-sm-2">
|
|
Date
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ assignment.timeslot.time|date:"Y-m-d" }}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Start time
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ assignment.timeslot.time|date:"H:i" }}
|
|
{% if meeting.time_zone != 'UTC' %}
|
|
({{ assignment.timeslot.time|utc|date:"H:i" }} UTC)
|
|
{% endif %}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Duration
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ assignment.session.requested_duration|format_timedelta }}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Remote instructions
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ assignment.session.remote_instructions|linkify|linebreaksbr }}
|
|
</dd>
|
|
<dt class="col-sm-2">
|
|
Additional info
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
{{ assignment.session.agenda_note|default:"(None)" }}
|
|
</dd>
|
|
{% if meeting_assignments|length > 1 %}
|
|
{% if can_edit and assignment.can_be_canceled %}
|
|
<dt class="col-sm-2">
|
|
Actions
|
|
</dt>
|
|
<dd class="col-sm-10">
|
|
<a class="btn btn-danger btn-sm"
|
|
href="{% url 'ietf.meeting.views.interim_request_session_cancel' sessionid=assignment.session.pk %}">
|
|
Cancel session
|
|
</a>
|
|
</dd>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
</dl>
|
|
{% if can_approve and status_slug == 'apprw' %}
|
|
<form method="post">
|
|
{% csrf_token %}
|
|
{% endif %}
|
|
{% with meeting_status.slug as status_slug %}
|
|
{% if can_edit %}
|
|
<a class="btn btn-primary"
|
|
href="{% url 'ietf.meeting.views.interim_request_edit' number=meeting.number %}">Edit</a>
|
|
{% endif %}
|
|
{% if can_approve and status_slug == 'apprw' %}
|
|
<button class="btn btn-primary" type="submit" name="approve">Approve</button>
|
|
<button class="btn btn-primary" type="submit" name="disapprove">Disapprove</button>
|
|
{% endif %}
|
|
{% if user|has_role:"Secretariat" and status_slug == 'scheda' %}
|
|
<a class="btn btn-primary"
|
|
href="{% url 'ietf.meeting.views.interim_send_announcement' number=meeting.number %}">
|
|
Announce
|
|
</a>
|
|
<a class="btn btn-warning"
|
|
href="{% url 'ietf.meeting.views.interim_skip_announcement' number=meeting.number %}">
|
|
Skip announcement
|
|
</a>
|
|
{% endif %}
|
|
{% if can_edit %}
|
|
{% if status_slug == 'apprw' or status_slug == 'scheda' or status_slug == 'sched' %}
|
|
<a class="btn btn-danger"
|
|
href="{% url 'ietf.meeting.views.interim_request_cancel' number=meeting.number %}">
|
|
Cancel meeting
|
|
</a>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if status_slug == "apprw" %}
|
|
<a class="btn btn-secondary float-end"
|
|
href="{% url 'ietf.meeting.views.interim_pending' %}">Back</a>
|
|
{% elif status_slug == "scheda" %}
|
|
<a class="btn btn-secondary float-end"
|
|
href="{% url 'ietf.meeting.views.interim_announce' %}">Back</a>
|
|
{% elif status_slug == "sched" %}
|
|
<a class="btn btn-secondary float-end"
|
|
href="{% url 'ietf.meeting.views.session_details' num=meeting.number acronym=meeting.session_set.first.group.acronym %}">
|
|
Back
|
|
</a>
|
|
{% else %}
|
|
<a class="btn btn-secondary float-end"
|
|
href="{% url 'ietf.meeting.views.upcoming' %}">Back</a>
|
|
{% endif %}
|
|
{% endwith %}
|
|
{% if can_approve and status_slug == 'apprw' %}</form>{% endif %}
|
|
{% endtimezone %}{% endblock %}
|
|
{% block js %}
|
|
<script src="{% static 'ietf/js/select2.js' %}"></script>
|
|
<script src="{% static 'ietf/js/meeting-interim-request.js' %}"></script>
|
|
{% endblock %}
|