Fix #2071 - Add optional comment field for close request. Commit ready for merge.

- Legacy-Id: 16667
This commit is contained in:
Sasha Romijn 2019-08-23 11:37:41 +00:00
parent ce3368db82
commit 4669b0934b
6 changed files with 26 additions and 9 deletions

View file

@ -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):

View file

@ -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:

View file

@ -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)

View file

@ -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)

View file

@ -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):

View file

@ -153,6 +153,8 @@
<span class="close-controls form-inline">
<label for="{{ r.form.reviewer.id_for_label }}">Close:</label>
{{ r.form.close }}
<label for="{{ r.form.reviewer.id_for_close_comment }}">Optional comment:</label>
{{ r.form.close_comment }}
<button type="button" class="btn btn-default undo" title="Cancel closing">Cancel</button>
{% if r.form.close.errors %}
<br>