various bug fixes and tweaks
- Legacy-Id: 11204
This commit is contained in:
parent
cecdea3d72
commit
6ea92cc5a0
|
@ -13,7 +13,7 @@ from ietf.doc.utils import get_document_content
|
|||
from ietf.group.models import Group
|
||||
from ietf.ietfauth.utils import has_role
|
||||
from ietf.meeting.models import Session, Meeting, Schedule, countries, timezones
|
||||
from ietf.meeting.helpers import get_next_interim_number, assign_interim_session
|
||||
from ietf.meeting.helpers import get_next_interim_number
|
||||
from ietf.meeting.helpers import is_meeting_approved, get_next_agenda_name
|
||||
from ietf.message.models import Message
|
||||
from ietf.person.models import Person
|
||||
|
@ -168,6 +168,9 @@ class InterimMeetingModelForm(forms.ModelForm):
|
|||
self.fields['in_person'].initial = True
|
||||
if is_meeting_approved(self.instance):
|
||||
self.fields['approved'].initial = True
|
||||
else:
|
||||
self.fields['approved'].initial = False
|
||||
self.fields['approved'].widget.attrs['disabled'] = True
|
||||
|
||||
def set_group_options(self):
|
||||
'''Set group options based on user accessing the form'''
|
||||
|
@ -200,11 +203,12 @@ class InterimMeetingModelForm(forms.ModelForm):
|
|||
meeting.date = date
|
||||
if kwargs.get('commit', True):
|
||||
# create schedule with meeting
|
||||
meeting.save() # pre-save so we have meeting.pk for schedule
|
||||
if not meeting.agenda:
|
||||
meeting.agenda = Schedule.objects.create(
|
||||
meeting=meeting,
|
||||
owner=Person.objects.get(name='(System)'))
|
||||
meeting.save()
|
||||
meeting.save() # save with agenda
|
||||
|
||||
return meeting
|
||||
|
||||
|
@ -287,7 +291,7 @@ class InterimSessionModelForm(forms.ModelForm):
|
|||
with open(path, "w") as file:
|
||||
file.write(self.cleaned_data['agenda'])
|
||||
|
||||
|
||||
'''
|
||||
class InterimSessionForm(forms.Form):
|
||||
date = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1"}, label='Date', required=False)
|
||||
time = forms.TimeField(required=False)
|
||||
|
@ -345,7 +349,7 @@ class InterimSessionForm(forms.Form):
|
|||
file.write(agenda)
|
||||
|
||||
return session
|
||||
|
||||
'''
|
||||
|
||||
class InterimAnnounceForm(forms.ModelForm):
|
||||
|
||||
|
|
|
@ -802,13 +802,13 @@ class InterimTests(TestCase):
|
|||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q("a.btn:contains('Cancel')")),0)
|
||||
self.assertEqual(len(q("a.btn:contains('Cancel')")), 0)
|
||||
# ensure cancel button for authorized user
|
||||
self.client.login(username="marschairman", password="marschairman+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q("a.btn:contains('Cancel')")),1)
|
||||
self.assertEqual(len(q("a.btn:contains('Cancel')")), 1)
|
||||
# ensure fail unauthorized
|
||||
url = urlreverse('ietf.meeting.views.interim_request_cancel', kwargs={'number': meeting.number})
|
||||
comments = 'Bob cannot make it'
|
||||
|
@ -822,7 +822,7 @@ class InterimTests(TestCase):
|
|||
self.assertRedirects(r, urlreverse('ietf.meeting.views.upcoming'))
|
||||
for session in meeting.session_set.all():
|
||||
self.assertEqual(session.status_id, 'canceledpa')
|
||||
self.assertEqual(session.comments, comments)
|
||||
self.assertEqual(session.agenda_note, comments)
|
||||
self.assertEqual(len(outbox), length_before) # no email notice
|
||||
# test cancelling after announcement
|
||||
meeting = Meeting.objects.filter(type='interim', session__status='sched', session__group__acronym='mars').first()
|
||||
|
@ -831,15 +831,20 @@ class InterimTests(TestCase):
|
|||
self.assertRedirects(r, urlreverse('ietf.meeting.views.upcoming'))
|
||||
for session in meeting.session_set.all():
|
||||
self.assertEqual(session.status_id, 'canceled')
|
||||
self.assertEqual(session.comments, comments)
|
||||
self.assertEqual(session.agenda_note, comments)
|
||||
self.assertEqual(len(outbox), length_before + 1)
|
||||
self.assertTrue('Interim Meeting Cancelled' in outbox[-1]['Subject'])
|
||||
|
||||
def test_interim_request_edit(self):
|
||||
make_meeting_test_data()
|
||||
meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first()
|
||||
url = urlreverse('ietf.meeting.views.interim_request_edit',kwargs={'number':meeting.number})
|
||||
login_testing_unauthorized(self,"secretary",url)
|
||||
meeting = Meeting.objects.filter(type='interim', session__status='apprw', session__group__acronym='mars').first()
|
||||
url = urlreverse('ietf.meeting.views.interim_request_edit', kwargs={'number': meeting.number})
|
||||
# test unauthorized access
|
||||
self.client.login(username="ameschairman", password="ameschairman+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
# test authorized use
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
|
|
|
@ -1070,7 +1070,7 @@ def interim_request_cancel(request, number):
|
|||
form = InterimCancelForm(request.POST)
|
||||
if form.is_valid():
|
||||
if 'comments' in form.changed_data:
|
||||
meeting.session_set.update(comments=form.cleaned_data.get('comments'))
|
||||
meeting.session_set.update(agenda_note=form.cleaned_data.get('comments'))
|
||||
if meeting.session_set.first().status.slug == 'sched':
|
||||
meeting.session_set.update(status_id='canceled')
|
||||
send_interim_cancellation_notice(meeting)
|
||||
|
@ -1116,6 +1116,9 @@ def interim_request_details(request, number):
|
|||
def interim_request_edit(request, number):
|
||||
'''Edit details of an interim meeting reqeust'''
|
||||
meeting = get_object_or_404(Meeting, number=number)
|
||||
if not can_view_interim_request(meeting, request.user):
|
||||
return HttpResponseForbidden("You do not have permissions to edit this meeting request")
|
||||
|
||||
SessionFormset = inlineformset_factory(
|
||||
Meeting,
|
||||
Session,
|
||||
|
@ -1203,7 +1206,6 @@ def upcoming(request):
|
|||
def upcoming_ical(request):
|
||||
'''Return Upcoming meetings in iCalendar file'''
|
||||
filters = request.GET.getlist('filters')
|
||||
#assert False, filters
|
||||
today = datetime.datetime.today()
|
||||
meetings = Meeting.objects.filter(date__gte=today).exclude(
|
||||
session__status__in=('apprw', 'schedpa')).order_by('date')
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<td>ietf</td>
|
||||
{% endif %}
|
||||
<td>
|
||||
<a href="{% url 'ietf.meeting.views.interim_send_announcement' number=meeting.number %}">{{ meeting.number }}</a>
|
||||
<a href="{% url 'ietf.meeting.views.interim_request_details' number=meeting.number %}">{{ meeting.number }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
{% load ietf_filters %}The {{ group.name }} ({{ group.acronym }}) Working Group will hold a
|
||||
virtual interim meeting on {{ meeting.date }} from {{ meeting.session_set.first | session_start_time | date:"H:i" }} to {{ meeting.session_set.first | session_end_time | date:"H:i" }} UTC.
|
||||
{% load ietf_filters %}The {{ group.name }} ({{ group.acronym }}) Working Group will hold a{% if meeting.city %}n
|
||||
{% else %}virtual {% endif %}interim meeting on {{ meeting.date }} from {{ meeting.session_set.first | session_start_time | date:"H:i" }} to {{ meeting.session_set.first | session_end_time | date:"H:i" }} {{ meeting.time_zone }}.
|
||||
|
||||
Agenda:
|
||||
{% if meeting.city %}Meeting Location:
|
||||
{{ meeting.city }}, {{ meeting.country }}
|
||||
|
||||
{% endif %}Agenda:
|
||||
{{ meeting.session_set.first.agenda | document_content | default_if_none:"(No agenda submitted)" }}
|
||||
|
||||
To join the interim meeting:
|
||||
{{ meeting.session_set.first.remote_instructions }}
|
||||
|
||||
[ADDITIONAL INFORMATION]
|
||||
{{ meeting.session_set.0.agenda_note }}
|
|
@ -3,6 +3,6 @@ The {{ group.name }} ({{ group.acronym }}) {% if not meeting.city %}virtual {% e
|
|||
interim meeting for {{ meeting.date|date:"Y-m-d" }} from {{ start_time|time:"H:i" }} to {{ end_time|time:"H:i" }} {{ meeting.time_zone }}
|
||||
has been cancelled.
|
||||
|
||||
{{ additional_information }}
|
||||
{{ meeting.session_set.0.agenda_note }}
|
||||
|
||||
|
||||
|
|
|
@ -51,11 +51,21 @@
|
|||
<input class="btn btn-default" type="submit" value="Approve" name='approve' />
|
||||
<input class="btn btn-default" type="submit" value="Disapprove" name='disapprove' />
|
||||
{% endif %}
|
||||
{% if user|has_role:"Secretariat" and sessions.0.status.slug == 'scheda' %}
|
||||
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_send_announcement' number=meeting.number %}">Announce</a>
|
||||
{% endif %}
|
||||
{% if can_edit %}
|
||||
{% if sessions.0.status.slug == 'apprw' or sessions.0.status.slug == 'scheda' or sessions.0.status.slug == 'sched' %}
|
||||
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_request_cancel' number=meeting.number %}">Cancel</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if sessions.0.status.slug == "apprw" %}
|
||||
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_pending' %}">Back</a>
|
||||
{% elif sessions.0.status.slug == "scheda" %}
|
||||
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_announce' %}">Back</a>
|
||||
{% else %}
|
||||
<a class="btn btn-default" href="{% url 'ietf.meeting.views.upcoming' %}">Back</a>
|
||||
{% endif %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
<h1>IETF Upcoming Meetings</h1>
|
||||
|
||||
<p>See also <a href="https://www.ietf.org/meeting/upcoming.html">here</a></p>
|
||||
<p>For more on regular IETF meetings see <a href="https://www.ietf.org/meeting/upcoming.html">here</a></p>
|
||||
<div class="panel-group" id="accordion">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
|
|
|
@ -5,11 +5,11 @@ PRODID:-//IETF//datatracker.ietf.org ical upcoming//EN
|
|||
{% for item in assignments %}BEGIN:VEVENT
|
||||
UID:ietf-{{item.session.meeting.number}}-{{item.timeslot.pk}}
|
||||
SUMMARY:{% if item.session.name %}{{item.session.name|ics_esc}}{% else %}{{item.session.group.acronym|lower}} - {{item.session.group.name}}{%endif%}
|
||||
{% if item.timeslot.show_location %}LOCATION:{{item.timeslot.get_location}}
|
||||
{% if item.schedule.meeting.city %}LOCATION:{{item.schedule.meeting.city}},{{item.schedule.meeting.country}}
|
||||
{% endif %}STATUS:{{item.session.ical_status}}
|
||||
CLASS:PUBLIC
|
||||
DTSTART{% if schedule.meeting.time_zone %};TZID="{{schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.time|date:"Ymd" }}T{{item.timeslot.time|date:"Hi"}}00
|
||||
DTEND{% if schedule.meeting.time_zone %};TZID="{{schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.end_time|date:"Ymd" }}T{{item.timeslot.end_time|date:"Hi"}}00
|
||||
DTSTART{% if item.schedule.meeting.time_zone %};TZID="{{item.schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.time|date:"Ymd" }}T{{item.timeslot.time|date:"Hi"}}00
|
||||
DTEND{% if item.schedule.meeting.time_zone %};TZID="{{item.schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.end_time|date:"Ymd" }}T{{item.timeslot.end_time|date:"Hi"}}00
|
||||
DTSTAMP:{{ item.timeslot.modified|date:"Ymd" }}T{{ item.timeslot.modified|date:"His" }}Z
|
||||
{% if item.session.agenda %}URL:{{item.session.agenda.get_absolute_url}}
|
||||
DESCRIPTION:{{item.timeslot.name|ics_esc}}\n{% if item.session.agenda_note %}
|
||||
|
|
Loading…
Reference in a new issue