various bug fixes and tweaks

- Legacy-Id: 11204
This commit is contained in:
Ryan Cross 2016-05-18 23:55:44 +00:00
parent cecdea3d72
commit 6ea92cc5a0
9 changed files with 47 additions and 23 deletions

View file

@ -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):

View file

@ -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)

View file

@ -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')

View file

@ -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 %}

View file

@ -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 }}

View file

@ -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 }}

View file

@ -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 %}

View file

@ -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">

View file

@ -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 %}