Email requesters when an interim moves into the announcement queue. Partially addresses #3016 and #3099. Commit ready for merge.
- Legacy-Id: 18616
This commit is contained in:
parent
1a7aa2129d
commit
ff3f3bd99a
41
ietf/mailtrigger/migrations/0018_interim_approve_announce.py
Normal file
41
ietf/mailtrigger/migrations/0018_interim_approve_announce.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Copyright The IETF Trust 2020 All Rights Reserved
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
def forward(apps,schema_editor):
|
||||
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
|
||||
Recipient = apps.get_model('mailtrigger', 'Recipient')
|
||||
|
||||
interim_approved = MailTrigger.objects.get(slug='interim_approved')
|
||||
interim_approved.desc = 'Recipients when an interim meeting is approved'
|
||||
interim_approved.save()
|
||||
interim_approved.to.set(Recipient.objects.filter(slug__in=('group_chairs','logged_in_person')))
|
||||
|
||||
interim_announce_requested = MailTrigger.objects.create(
|
||||
slug='interim_announce_requested',
|
||||
desc='Recipients when an interim announcement is requested',
|
||||
)
|
||||
interim_announce_requested.to.set(Recipient.objects.filter(slug='iesg_secretary'))
|
||||
|
||||
|
||||
def reverse(apps,schema_editor):
|
||||
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
|
||||
Recipient = apps.get_model('mailtrigger', 'Recipient')
|
||||
|
||||
MailTrigger.objects.filter(slug='interim_announce_requested').delete()
|
||||
|
||||
interim_approved = MailTrigger.objects.get(slug='interim_approved')
|
||||
interim_approved.desc = 'Recipients when an interim meeting is approved and an announcement needs to be sent'
|
||||
interim_approved.save()
|
||||
interim_approved.to.set(Recipient.objects.filter(slug='iesg_secretary'))
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mailtrigger', '0017_lc_to_yang_doctors'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward,reverse)
|
||||
]
|
|
@ -549,13 +549,31 @@ def send_interim_approval_request(meetings):
|
|||
context,
|
||||
cc=cc_list)
|
||||
|
||||
def send_interim_approval(user, meeting):
|
||||
"""Send an email to chairs and whoever initiated the action that resulted in approval that an interim is approved"""
|
||||
first_session = meeting.session_set.first()
|
||||
(to_email,cc_list) = gather_address_lists('interim_approved',group=first_session.group,person=user.person)
|
||||
from_email = (settings.SESSION_REQUEST_FROM_EMAIL)
|
||||
subject = f'{meeting.number} interim approved'
|
||||
template = 'meeting/interim_approval.txt'
|
||||
context = {
|
||||
'meeting': meeting,
|
||||
}
|
||||
send_mail(None,
|
||||
to_email,
|
||||
from_email,
|
||||
subject,
|
||||
template,
|
||||
context,
|
||||
cc=cc_list)
|
||||
|
||||
def send_interim_announcement_request(meeting):
|
||||
"""Sends an email to the secretariat that an interim meeting is ready for
|
||||
announcement, includes the link to send the official announcement"""
|
||||
first_session = meeting.session_set.first()
|
||||
group = first_session.group
|
||||
requester = session_requested_by(first_session)
|
||||
(to_email, cc_list) = gather_address_lists('interim_approved')
|
||||
(to_email, cc_list) = gather_address_lists('interim_announce_requested')
|
||||
from_email = (settings.SESSION_REQUEST_FROM_EMAIL)
|
||||
subject = '{group} - interim meeting ready for announcement'.format(group=group.acronym)
|
||||
template = 'meeting/interim_announcement_request.txt'
|
||||
|
|
|
@ -3820,12 +3820,16 @@ class HasMeetingsTests(TestCase):
|
|||
'session_set-MIN_NUM_FORMS':0,
|
||||
'session_set-MAX_NUM_FORMS':1000}
|
||||
|
||||
empty_outbox()
|
||||
r = self.client.post(urlreverse("ietf.meeting.views.interim_request"),data)
|
||||
self.assertRedirects(r,urlreverse('ietf.meeting.views.upcoming'))
|
||||
meeting = Meeting.objects.order_by('id').last()
|
||||
self.assertEqual(meeting.type_id,'interim')
|
||||
self.assertEqual(meeting.date,date)
|
||||
self.assertEqual(meeting.number,'interim-%s-%s-%s' % (date.year, group.acronym, next_num))
|
||||
self.assertTrue(len(outbox)>0)
|
||||
self.assertIn('interim approved',outbox[0]["Subject"])
|
||||
self.assertIn(user.person.email().address,outbox[0]["To"])
|
||||
self.client.logout()
|
||||
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ from ietf.meeting.helpers import can_edit_interim_request
|
|||
from ietf.meeting.helpers import can_request_interim_meeting, get_announcement_initial
|
||||
from ietf.meeting.helpers import sessions_post_save, is_interim_meeting_approved
|
||||
from ietf.meeting.helpers import send_interim_cancellation_notice
|
||||
from ietf.meeting.helpers import send_interim_approval
|
||||
from ietf.meeting.helpers import send_interim_approval_request
|
||||
from ietf.meeting.helpers import send_interim_announcement_request
|
||||
from ietf.meeting.utils import finalize, sort_accept_tuple, condition_slide_order
|
||||
|
@ -3032,9 +3033,11 @@ def interim_request(request):
|
|||
sessions_post_save(request, formset)
|
||||
|
||||
if requires_approval:
|
||||
send_interim_approval_request(meetings=[meeting])
|
||||
elif not has_role(request.user, 'Secretariat'):
|
||||
send_interim_announcement_request(meeting=meeting)
|
||||
send_interim_approval_request(meetings=series)
|
||||
else:
|
||||
send_interim_approval(request.user, meeting=meeting)
|
||||
if not has_role(request.user, 'Secretariat'):
|
||||
send_interim_announcement_request(meeting=meeting)
|
||||
|
||||
# series require special handling, each session gets it's own
|
||||
# meeting object we won't see this on edit because series are
|
||||
|
@ -3064,8 +3067,10 @@ def interim_request(request):
|
|||
|
||||
if requires_approval:
|
||||
send_interim_approval_request(meetings=series)
|
||||
elif not has_role(request.user, 'Secretariat'):
|
||||
send_interim_announcement_request(meeting=meeting)
|
||||
else:
|
||||
send_interim_approval(request.user, meeting=meeting)
|
||||
if not has_role(request.user, 'Secretariat'):
|
||||
send_interim_announcement_request(meeting=meeting)
|
||||
|
||||
messages.success(request, 'Interim meeting request submitted')
|
||||
return redirect(upcoming)
|
||||
|
|
File diff suppressed because it is too large
Load diff
5
ietf/templates/meeting/interim_approval.txt
Normal file
5
ietf/templates/meeting/interim_approval.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
{% load ams_filters %}{% load ietf_filters %}
|
||||
An interim meeting for {{ group.acronym }} has been approved or does not require additional approval.
|
||||
A message has been sent to the secretariat requesting the interim be announced.
|
||||
|
||||
{% include "meeting/interim_info.txt" %}
|
Loading…
Reference in a new issue