|
63 | 63 | from ietf.secr.proceedings.proc_utils import (get_progress_stats, post_process, import_audio_files, |
64 | 64 | import_youtube_video_urls, create_recording) |
65 | 65 | from ietf.utils.decorators import require_api_key |
66 | | -from ietf.utils.mail import send_mail_message |
| 66 | +from ietf.utils.mail import send_mail_message, send_mail_text |
67 | 67 | from ietf.utils.pipe import pipe |
68 | 68 | from ietf.utils.pdf import pdf_pages |
69 | 69 | from ietf.utils.text import xslugify |
70 | 70 | from ietf.utils.validators import get_mime_type |
71 | 71 |
|
72 | 72 | from .forms import (InterimMeetingModelForm, InterimAnnounceForm, InterimSessionModelForm, |
73 | | - InterimCancelForm, InterimSessionInlineFormSet, FileUploadForm) |
| 73 | + InterimCancelForm, InterimSessionInlineFormSet, FileUploadForm, RequestMinutesForm,) |
74 | 74 |
|
75 | 75 |
|
76 | 76 | def get_menu_entries(request): |
@@ -139,7 +139,7 @@ def materials(request, num=None): |
139 | 139 | if date_list: setattr(event, 'last_update', sorted(date_list, reverse=True)[0]) |
140 | 140 |
|
141 | 141 | return render(request, "meeting/materials.html", { |
142 | | - 'meeting_num': meeting.number, |
| 142 | + 'meeting': meeting, |
143 | 143 | 'plenaries': plenaries, |
144 | 144 | 'ietf': ietf, |
145 | 145 | 'training': training, |
@@ -2284,3 +2284,39 @@ def edit_timeslot_type(request, num, slot_id): |
2284 | 2284 | return render(request, 'meeting/edit_timeslot_type.html', {'timeslot':timeslot,'form':form,'sessions':sessions}) |
2285 | 2285 |
|
2286 | 2286 |
|
| 2287 | +@role_required('Secretariat') |
| 2288 | +def request_minutes(request, num=None): |
| 2289 | + meeting = get_ietf_meeting(num) |
| 2290 | + if request.method=='POST': |
| 2291 | + form = RequestMinutesForm(data=request.POST) |
| 2292 | + if form.is_valid(): |
| 2293 | + send_mail_text(request, |
| 2294 | + to=form.cleaned_data.get('to'), |
| 2295 | + frm=request.user.person.email_address(), |
| 2296 | + subject=form.cleaned_data.get('subject'), |
| 2297 | + txt=form.cleaned_data.get('body'), |
| 2298 | + cc=form.cleaned_data.get('cc'), |
| 2299 | + ) |
| 2300 | + return HttpResponseRedirect(reverse('ietf.meeting.views.materials',kwargs={'num':num})) |
| 2301 | + else: |
| 2302 | + needs_minutes = set() |
| 2303 | + for a in meeting.agenda.assignments.filter(session__group__type_id__in=('wg','rg')): |
| 2304 | + if not a.session.all_meeting_minutes(): |
| 2305 | + group = a.session.group |
| 2306 | + if group.parent and group.parent.type_id in ('area','irtf'): |
| 2307 | + needs_minutes.add(a.session.group) |
| 2308 | + needs_minutes = list(needs_minutes) |
| 2309 | + needs_minutes.sort(key=lambda g: ('zzz' if g.parent.acronym == 'irtf' else g.parent.acronym)+":"+g.acronym) |
| 2310 | + body_context = {'meeting':meeting, |
| 2311 | + 'needs_minutes':needs_minutes, |
| 2312 | + 'settings':settings, |
| 2313 | + } |
| 2314 | + body = render_to_string('meeting/request_minutes.txt', body_context) |
| 2315 | + initial = {'to': 'wgchairs@ietf.org', |
| 2316 | + 'cc': 'irsg@irtf.org', |
| 2317 | + 'subject': 'Request for IETF WG and Bof Session Minutes', |
| 2318 | + 'body': body, |
| 2319 | + } |
| 2320 | + form = RequestMinutesForm(initial=initial) |
| 2321 | + context = {'meeting':meeting, 'form': form} |
| 2322 | + return render(request, 'meeting/request_minutes.html', context) |
0 commit comments