From 4669b0934bcf8da45906b276019757a764b507bd Mon Sep 17 00:00:00 2001 From: Sasha Romijn Date: Fri, 23 Aug 2019 11:37:41 +0000 Subject: [PATCH] Fix #2071 - Add optional comment field for close request. Commit ready for merge. - Legacy-Id: 16667 --- ietf/doc/tests_review.py | 9 +++++++-- ietf/doc/views_review.py | 4 +++- ietf/group/forms.py | 1 + ietf/group/views.py | 3 ++- ietf/review/utils.py | 16 +++++++++++----- ietf/templates/group/manage_review_requests.html | 2 ++ 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index de3ef3eeb..057712357 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -205,7 +205,8 @@ class ReviewTests(TestCase): # close empty_outbox() - r = self.client.post(close_url, { "close_reason": "withdrawn" }) + r = self.client.post(close_url, {"close_reason": "withdrawn", + "close_comment": "review_request_close_comment"}) self.assertEqual(r.status_code, 302) review_req = reload_db_objects(review_req) @@ -214,13 +215,17 @@ class ReviewTests(TestCase): e = doc.latest_event(ReviewRequestDocEvent) self.assertEqual(e.type, "closed_review_request") self.assertTrue("closed" in e.desc.lower()) + self.assertTrue("review_request_close_comment" in e.desc.lower()) e = doc.latest_event(ReviewAssignmentDocEvent) self.assertEqual(e.type, "closed_review_assignment") self.assertTrue("closed" in e.desc.lower()) + self.assertFalse("review_request_close_comment" in e.desc.lower()) self.assertEqual(len(outbox), 1) - self.assertTrue("closed" in outbox[0].get_payload(decode=True).decode("utf-8").lower()) + mail_content = outbox[0].get_payload(decode=True).decode("utf-8").lower() + self.assertTrue("closed" in mail_content) + self.assertTrue("review_request_close_comment" in mail_content) def test_possibly_advance_next_reviewer_for_team(self): diff --git a/ietf/doc/views_review.py b/ietf/doc/views_review.py index d4ac64db6..3895f8d9e 100644 --- a/ietf/doc/views_review.py +++ b/ietf/doc/views_review.py @@ -236,6 +236,7 @@ def review_request(request, name, request_id): class CloseReviewRequestForm(forms.Form): close_reason = forms.ModelChoiceField(queryset=close_review_request_states(), widget=forms.RadioSelect, empty_label=None) + close_comment = forms.CharField(label='Comment (optional)', max_length=255, required=False) def __init__(self, can_manage_request, *args, **kwargs): super(CloseReviewRequestForm, self).__init__(*args, **kwargs) @@ -262,7 +263,8 @@ def close_request(request, name, request_id): if request.method == "POST": form = CloseReviewRequestForm(can_manage_request, request.POST) if form.is_valid(): - close_review_request(request, review_req, form.cleaned_data["close_reason"]) + close_review_request(request, review_req,form.cleaned_data["close_reason"], + form.cleaned_data["close_comment"]) return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk) else: diff --git a/ietf/group/forms.py b/ietf/group/forms.py index 0dbb0ea96..198842854 100644 --- a/ietf/group/forms.py +++ b/ietf/group/forms.py @@ -231,6 +231,7 @@ class ManageReviewRequestForm(forms.Form): action = forms.ChoiceField(choices=ACTIONS, widget=forms.HiddenInput, required=False) close = forms.ModelChoiceField(queryset=close_review_request_states(), required=False) + close_comment = forms.CharField(max_length=255, required=False) reviewer = PersonEmailChoiceField(empty_label="(None)", required=False, label_with="person") add_skip = forms.BooleanField(required=False) diff --git a/ietf/group/views.py b/ietf/group/views.py index 46ddee796..55f836c02 100644 --- a/ietf/group/views.py +++ b/ietf/group/views.py @@ -1508,7 +1508,8 @@ def manage_review_requests(request, acronym, group_type=None, assignment_status= for review_req in review_requests: action = review_req.form.cleaned_data.get("action") if action=="close": - close_review_request(request, review_req, review_req.form.cleaned_data["close"]) + close_review_request(request, review_req, review_req.form.cleaned_data["close"], + review_req.form.cleaned_data["close_comment"]) elif action=="assign": reqs_to_assign.append(review_req) diff --git a/ietf/review/utils.py b/ietf/review/utils.py index cfff82e8c..24f1e02c5 100644 --- a/ietf/review/utils.py +++ b/ietf/review/utils.py @@ -563,7 +563,7 @@ def possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id, break -def close_review_request(request, review_req, close_state): +def close_review_request(request, review_req, close_state, close_comment=''): suggested_req = review_req.pk is None review_req.state = close_state @@ -573,13 +573,16 @@ def close_review_request(request, review_req, close_state): review_req.save() if not suggested_req: + descr = "Closed request for {} review by {} with state '{}'".format( + review_req.type.name, review_req.team.acronym.upper(), close_state.name) + if close_comment: + descr += ': ' + close_comment ReviewRequestDocEvent.objects.create( type="closed_review_request", doc=review_req.doc, rev=review_req.doc.rev, by=request.user.person, - desc="Closed request for {} review by {} with state '{}'".format( - review_req.type.name, review_req.team.acronym.upper(), close_state.name), + desc=descr, review_request=review_req, state=review_req.state, ) @@ -597,11 +600,14 @@ def close_review_request(request, review_req, close_state): state=assignment.state, ) + msg = "Review request has been closed by {}.".format(request.user.person) + if close_comment: + msg += "\nComment: {}".format(close_comment) email_review_request_change( request, review_req, "Closed review request for {}: {}".format(review_req.doc.name, close_state.name), - "Review request has been closed by {}.".format(request.user.person), - by=request.user.person, notify_secretary=False, notify_reviewer=True, notify_requested_by=True) + msg=msg, by=request.user.person, notify_secretary=False, + notify_reviewer=True, notify_requested_by=True) def suggested_review_requests_for_team(team): diff --git a/ietf/templates/group/manage_review_requests.html b/ietf/templates/group/manage_review_requests.html index a72760a40..873f432a3 100644 --- a/ietf/templates/group/manage_review_requests.html +++ b/ietf/templates/group/manage_review_requests.html @@ -153,6 +153,8 @@ {{ r.form.close }} + + {{ r.form.close_comment }} {% if r.form.close.errors %}