|
9 | 9 | from django.db.models import Max, Q, Prefetch, F |
10 | 10 | from django.conf import settings |
11 | 11 | from django.core.cache import cache |
| 12 | +from django.core.urlresolvers import reverse |
12 | 13 | from django.utils.cache import get_cache_key |
13 | 14 | from django.shortcuts import get_object_or_404 |
14 | 15 | from django.template.loader import render_to_string |
|
20 | 21 | from ietf.group.models import Group |
21 | 22 | from ietf.ietfauth.utils import has_role, user_is_person |
22 | 23 | from ietf.liaisons.utils import get_person_for_user |
| 24 | +from ietf.mailtrigger.utils import gather_address_lists |
23 | 25 | from ietf.person.models import Person |
24 | 26 | from ietf.meeting.models import Meeting, Schedule, TimeSlot, SchedTimeSessAssignment |
25 | 27 | from ietf.utils.history import find_history_active_at, find_history_replacements_active_at |
| 28 | +from ietf.utils.mail import send_mail |
26 | 29 | from ietf.utils.pipe import pipe |
27 | 30 |
|
28 | 31 | def find_ads_for_meeting(meeting): |
@@ -278,7 +281,6 @@ def agenda_permissions(meeting, schedule, user): |
278 | 281 | return cansee, canedit, secretariat |
279 | 282 |
|
280 | 283 | def session_constraint_expire(request,session): |
281 | | - from django.core.urlresolvers import reverse |
282 | 284 | from ajax import session_constraints |
283 | 285 | path = reverse(session_constraints, args=[session.meeting.number, session.pk]) |
284 | 286 | temp_request = HttpRequest() |
@@ -492,6 +494,61 @@ def get_next_agenda_name(meeting): |
492 | 494 | group=group.acronym, |
493 | 495 | sequence=str(last_sequence + 1).zfill(2)) |
494 | 496 |
|
| 497 | +def send_interim_approval_request(meetings): |
| 498 | + """Sends an email to the secretariat, group chairs, and resposnible area |
| 499 | + director or the IRTF chair noting that approval has been requested for a |
| 500 | + new interim meeting. Takes a list of one or more meetings.""" |
| 501 | + group = meetings[0].session_set.first().group |
| 502 | + requester = meetings[0].session_set.first().requested_by |
| 503 | + (to_email, cc_list) = gather_address_lists('session_requested',group=group,person=requester) |
| 504 | + from_email = ('"IETF Meeting Session Request Tool"','session_request_developers@ietf.org') |
| 505 | + subject = '{group} - New Interim Meeting Request'.format(group=group.acronym) |
| 506 | + template = 'meeting/interim_approval_request.txt' |
| 507 | + approval_urls = [] |
| 508 | + for meeting in meetings: |
| 509 | + url = settings.IDTRACKER_BASE_URL + reverse('ietf.meeting.views.interim_request_details', kwargs={'number': meeting.number}) |
| 510 | + approval_urls.append(url) |
| 511 | + if len(meetings) > 1: |
| 512 | + is_series = True |
| 513 | + else: |
| 514 | + is_series = False |
| 515 | + context = locals() |
| 516 | + send_mail(None, |
| 517 | + to_email, |
| 518 | + from_email, |
| 519 | + subject, |
| 520 | + template, |
| 521 | + context, |
| 522 | + cc=cc_list) |
| 523 | + |
| 524 | +def send_interim_cancellation_notice(meeting): |
| 525 | + """Sends an email that a scheduled interim meeting has been cancelled.""" |
| 526 | + session = meeting.session_set.first() |
| 527 | + group = session.group |
| 528 | + to_email = settings.INTERIM_ANNOUNCE_TO_EMAIL |
| 529 | + (_, cc_list) = gather_address_lists('session_request_cancelled',group=group) |
| 530 | + from_email = settings.INTERIM_ANNOUNCE_FROM_EMAIL |
| 531 | + subject = '{group} ({acronym}) {type} Interim Meeting Cancelled (was {date})'.format( |
| 532 | + group=group.name, |
| 533 | + acronym=group.acronym, |
| 534 | + type=group.type.slug.upper(), |
| 535 | + date=meeting.date.strftime('%Y-%m-%d')) |
| 536 | + start_time = session.official_timeslotassignment().timeslot.time |
| 537 | + end_time = start_time + session.requested_duration |
| 538 | + if meeting.session_set.filter(status='sched').count() > 1: |
| 539 | + is_multi_day = True |
| 540 | + else: |
| 541 | + is_multi_day = False |
| 542 | + template = 'meeting/interim_cancellation_notice.txt' |
| 543 | + context = locals() |
| 544 | + send_mail(None, |
| 545 | + to_email, |
| 546 | + from_email, |
| 547 | + subject, |
| 548 | + template, |
| 549 | + context, |
| 550 | + cc=cc_list) |
| 551 | + |
495 | 552 | def sessions_post_save(forms): |
496 | 553 | """Helper function to perform various post save operations on each form of a |
497 | 554 | InterimSessionModelForm formset""" |
|
0 commit comments