|
2 | 2 | from django.http import Http404, HttpResponseForbidden |
3 | 3 | from django.contrib.auth.decorators import login_required |
4 | 4 | from django import forms |
| 5 | +from django.template.loader import render_to_string |
5 | 6 |
|
6 | 7 | from ietf.review.models import ReviewRequest |
7 | 8 | from ietf.review.utils import (can_manage_review_requests_for_team, close_review_request_states, |
8 | 9 | extract_revision_ordered_review_requests_for_documents, |
9 | 10 | assign_review_request_to_reviewer, |
10 | 11 | close_review_request, |
11 | 12 | setup_reviewer_field, |
12 | | -# make_new_review_request_from_existing, |
13 | 13 | suggested_review_requests_for_team) |
14 | 14 | from ietf.group.utils import get_group_or_404 |
15 | 15 | from ietf.person.fields import PersonEmailChoiceField |
| 16 | +from ietf.utils.mail import send_mail_text |
16 | 17 |
|
17 | 18 |
|
18 | 19 | class ManageReviewRequestForm(forms.Form): |
@@ -168,3 +169,53 @@ def manage_review_requests(request, acronym, group_type=None): |
168 | 169 | 'saving': saving, |
169 | 170 | }) |
170 | 171 |
|
| 172 | +class EmailOpenAssignmentsForm(forms.Form): |
| 173 | + to = forms.EmailField(widget=forms.EmailInput(attrs={ "readonly": True })) |
| 174 | + subject = forms.CharField() |
| 175 | + body = forms.CharField(widget=forms.Textarea) |
| 176 | + |
| 177 | +@login_required |
| 178 | +def email_open_review_assignments(request, acronym, group_type=None): |
| 179 | + group = get_group_or_404(acronym, group_type) |
| 180 | + if not group.features.has_reviews: |
| 181 | + raise Http404 |
| 182 | + |
| 183 | + if not can_manage_review_requests_for_team(request.user, group): |
| 184 | + return HttpResponseForbidden("You do not have permission to perform this action") |
| 185 | + |
| 186 | + review_requests = list(ReviewRequest.objects.filter( |
| 187 | + team=group, |
| 188 | + state__in=("requested", "accepted"), |
| 189 | + ).exclude( |
| 190 | + reviewer=None, |
| 191 | + ).prefetch_related("reviewer", "type", "state", "doc").distinct().order_by("deadline", "reviewer")) |
| 192 | + |
| 193 | + if request.method == "POST" and request.POST.get("action") == "email": |
| 194 | + form = EmailOpenAssignmentsForm(request.POST) |
| 195 | + if form.is_valid(): |
| 196 | + send_mail_text(request, form.cleaned_data["to"], None, form.cleaned_data["subject"], form.cleaned_data["body"]) |
| 197 | + |
| 198 | + kwargs = { "acronym": group.acronym } |
| 199 | + if group_type: |
| 200 | + kwargs["group_type"] = group_type |
| 201 | + |
| 202 | + return redirect(manage_review_requests, **kwargs) |
| 203 | + else: |
| 204 | + to = group.list_email |
| 205 | + subject = "Open review assignments in {}".format(group.acronym) |
| 206 | + body = render_to_string("group/email_open_review_assignments.txt", { |
| 207 | + "review_requests": review_requests, |
| 208 | + }) |
| 209 | + |
| 210 | + form = EmailOpenAssignmentsForm(initial={ |
| 211 | + "to": to, |
| 212 | + "subject": subject, |
| 213 | + "body": body, |
| 214 | + }) |
| 215 | + |
| 216 | + return render(request, 'group/email_open_review_assignments.html', { |
| 217 | + 'group': group, |
| 218 | + 'review_requests': review_requests, |
| 219 | + 'form': form, |
| 220 | + }) |
| 221 | + |
0 commit comments