Add inteirm meeting request disapprove and cancel capabilities

- Legacy-Id: 11135
This commit is contained in:
Ryan Cross 2016-04-26 23:05:53 +00:00
parent 0ed8a5cb02
commit facead5d95
10 changed files with 55 additions and 12 deletions

View file

@ -595,6 +595,8 @@ def emailwrap(email):
@register.filter
def document_content(doc):
if doc is None:
return None
path = os.path.join(doc.get_file_path(),doc.filename_with_rev())
return get_document_content(doc.name,path,markup=False)

View file

@ -8,7 +8,7 @@ from django.forms.fields import Field
from django.utils.encoding import force_text
from django.utils import six
from ietf.doc.models import Document, DocAlias, DocEvent, State, NewRevisionDocEvent
from ietf.doc.models import Document, DocAlias, State, NewRevisionDocEvent
from ietf.group.models import Group
from ietf.ietfauth.utils import has_role
from ietf.meeting.models import Session, countries, timezones

View file

@ -6,7 +6,6 @@ import urlparse
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
from django.contrib.auth.models import User
from django.http import HttpRequest
from pyquery import PyQuery
@ -696,6 +695,26 @@ class InterimTests(TestCase):
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
def test_interim_request_disapprove(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_details',kwargs={'number':meeting.number})
login_testing_unauthorized(self,"secretary",url)
r = self.client.post(url,{'disapprove':'Disapprove'})
self.assertEqual(r.status_code, 200)
for session in meeting.session_set.all():
self.assertEqual(session.status_id,'disappr')
def test_interim_request_cancel(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_details',kwargs={'number':meeting.number})
login_testing_unauthorized(self,"secretary",url)
r = self.client.post(url,{'cancel':'Cancel'})
self.assertEqual(r.status_code, 200)
for session in meeting.session_set.all():
self.assertEqual(session.status_id,'canceledpa')
def test_interim_request_details_permissions(self):
make_meeting_test_data()
meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first()

View file

@ -992,6 +992,7 @@ def interim_request(request):
if meeting_type == 'series':
meeting = create_interim_meeting_from_forms(form,f)
f.save(request,group,meeting,is_approved)
messages.success(request,'Interim meeting request submitted')
return redirect(upcoming)
else:
assert False, (form.errors, formset.errors)
@ -1012,12 +1013,18 @@ def interim_request_details(request, number):
if request.method == 'POST':
if request.POST.get('approve'):
meeting.session_set.update(status_id='scheda')
messages.success(request,'Interim meeting approved')
if has_role(request.user, 'Secretariat'):
return redirect(interim_send_announcement, number=number)
if request.POST.get('disapprove'):
pass
meeting.session_set.update(status_id='disappr')
messages.success(request,'Interim meeting disapproved')
if request.POST.get('cancel'):
pass
if meeting.session_set.first().status.slug == 'sched':
meeting.session_set.update(status_id='canceled')
else:
meeting.session_set.update(status_id='canceledpa')
messages.success(request,'Interim meeting cancelled')
return render(request, "meeting/interim_request_details.html",{
"meeting":meeting,

View file

@ -2042,6 +2042,16 @@
"model": "name.sessionstatusname",
"pk": "canceled"
},
{
"fields": {
"order": 0,
"used": true,
"name": "Cancelled - Pre Announcement",
"desc": ""
},
"model": "name.sessionstatusname",
"pk": "canceledpa"
},
{
"fields": {
"order": 0,

View file

@ -6,7 +6,7 @@ from django.db import migrations
def populate_names(apps, schema_editor):
SessionStatusName = apps.get_model("name", "SessionStatusName")
SessionStatusName.objects.create(slug="scheda",name="Scheduled - Announcement to be sent")
SessionStatusName.objects.create(slug="canceledpa",name="Cancelled - Pre Announcement")
class Migration(migrations.Migration):

View file

@ -36,8 +36,8 @@ class MainTestCase(TestCase):
self.assertEqual(r.status_code, 200)
sched = r.context['scheduled_groups']
unsched = r.context['unscheduled_groups']
self.failUnless(len(unsched) == 0)
self.failUnless(len(sched) > 0)
self.assertEqual(len(unsched),2)
self.assertEqual(len(sched),2)
class SubmitRequestCase(TestCase):
def test_submit_request(self):

View file

@ -2,7 +2,7 @@
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.
Agenda:
{{ meeting.session_set.first.agenda | document_content }}
{{ meeting.session_set.first.agenda | document_content | default_if_none:"(No agenda submitted)" }}
To join the interim meeting:
{{ meeting.session_set.first.remote_instructions }}

View file

@ -43,14 +43,18 @@
<form method="post">
{% csrf_token %}
{% if can_edit %}
<a class="btn btn-default" href="">Edit</a>
{% if sessions.0.status.slug == 'apprw' or sessions.0.status.slug == 'scheda' %}
<a class="btn btn-default" href="">Edit</a>
{% endif %}
{% endif %}
{% if can_approve %}
{% if can_approve and sessions.0.status.slug == 'apprw' %}
<input class="btn btn-default" type="submit" value="Approve" name='approve' />
<input class="btn btn-default" type="submit" value="Disapprove" name='disapprove' />
{% endif %}
{% if can_edit %}
<input class="btn btn-default" type="submit" value="Cancel" name='cancel' />
{% if can_edit %}
{% if sessions.0.status.slug == 'apprw' or sessions.0.status.slug == 'scheda' or sessions.0.status.slug == 'sched' %}
<input class="btn btn-default" type="submit" value="Cancel" name='cancel' />
{% endif %}
{% endif %}
</form>

View file

@ -94,6 +94,7 @@ def make_immutable_base_data():
create_person(opsarea, "ad")
sops = create_group(name="Server Operations", acronym="sops", type_id="wg", parent=opsarea)
create_person(sops, "chair", name="Sops Chairman", username="sopschairman")
create_person(sops, "secr", name="Sops Secretary", username="sopssecretary")
# create a bunch of ads for swarm tests
for i in range(1, 10):