Merged in [17070] from sasha@dashcare.nl:
Fix #2061 - Improve 'complete review' workflow for secretaries.
When a secretary completes a review, 'link to a review message'
is automatically selected, and the first non-reply mail is used to
fill in the review details. The secretary can still modify all details.
The order of fields for secretaries is also modified to fit this workflow.
All cases where 'link to review message' is used, by reviewers or
secretaries, now attempt to fill in the 'reviewed version' if found
in the email subject.
- Legacy-Id: 17105
Note: SVN reference [17070] has been migrated to Git commit dc9546211f
This commit is contained in:
commit
2bc5606986
|
@ -621,6 +621,7 @@ class ReviewTests(TestCase):
|
|||
self.assertEqual(messages[0]["url"], "https://www.example.com/testmessage")
|
||||
self.assertTrue("John Doe" in messages[0]["content"])
|
||||
self.assertEqual(messages[0]["subject"], "Review of {}-01".format(review_req.doc.name))
|
||||
self.assertEqual(messages[0]["revision_guess"], "01")
|
||||
self.assertEqual(messages[0]["splitfrom"], ["John Doe", "johndoe@example.com"])
|
||||
self.assertEqual(messages[0]["utcdate"][0], today.isoformat())
|
||||
|
||||
|
@ -628,6 +629,7 @@ class ReviewTests(TestCase):
|
|||
self.assertTrue("Looks OK" in messages[1]["content"])
|
||||
self.assertTrue("<html>" not in messages[1]["content"])
|
||||
self.assertEqual(messages[1]["subject"], "Review of {}".format(review_req.doc.name))
|
||||
self.assertFalse('revision_guess' in messages[1])
|
||||
self.assertEqual(messages[1]["splitfrom"], ["John Doe II", "johndoe2@example.com"])
|
||||
self.assertEqual(messages[1]["utcdate"][0], "")
|
||||
|
||||
|
|
|
@ -535,6 +535,11 @@ class CompleteReviewForm(forms.Form):
|
|||
|
||||
revising_review = assignment.state_id not in ["assigned", "accepted"] if assignment else False
|
||||
|
||||
if not is_reviewer:
|
||||
new_field_order = ['review_submission', 'review_url', 'review_file', 'review_content']
|
||||
new_field_order += [f for f in self.fields.keys() if f not in new_field_order]
|
||||
self.order_fields(new_field_order)
|
||||
|
||||
if not revising_review:
|
||||
self.fields["state"].choices = [
|
||||
(slug, "{} - extra reviewer is to be assigned".format(label)) if slug == "part-completed" else (slug, label)
|
||||
|
@ -891,6 +896,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
|
|||
'revising_review': revising_review,
|
||||
'review_to': to,
|
||||
'review_cc': cc,
|
||||
'is_reviewer': is_reviewer,
|
||||
})
|
||||
|
||||
def search_mail_archive(request, name, acronym=None, assignment_id=None):
|
||||
|
@ -916,6 +922,12 @@ def search_mail_archive(request, name, acronym=None, assignment_id=None):
|
|||
|
||||
try:
|
||||
res["messages"] = mailarch.retrieve_messages(res["query_data_url"])[:MAX_RESULTS]
|
||||
for message in res["messages"]:
|
||||
try:
|
||||
revision_guess = message["subject"].split(name)[1].split('-')[1]
|
||||
message["revision_guess"] = revision_guess if revision_guess.isnumeric() else None
|
||||
except IndexError:
|
||||
pass
|
||||
except KeyError as e:
|
||||
res["error"] = "No results found (%s)" % str(e)
|
||||
except Exception as e:
|
||||
|
|
|
@ -47,6 +47,7 @@ $(document).ready(function () {
|
|||
if (!err && (!data.messages || !data.messages.length))
|
||||
err = "No messages matching document name found in archive";
|
||||
|
||||
var non_reply_row = null;
|
||||
if (err) {
|
||||
var errorDiv = mailArchiveSearch.find(".error");
|
||||
errorDiv.removeClass("hidden");
|
||||
|
@ -74,7 +75,15 @@ $(document).ready(function () {
|
|||
row.data("content", msg.content);
|
||||
row.data("date", msg.utcdate[0]);
|
||||
row.data("time", msg.utcdate[1]);
|
||||
row.data("revision_guess", msg.revision_guess);
|
||||
results.append(row);
|
||||
if (msg.subject.toUpperCase().substr(0, 3) !== 'RE:') {
|
||||
non_reply_row = row;
|
||||
}
|
||||
}
|
||||
if (!isReviewer && non_reply_row) {
|
||||
// Automatically select the first non-reply.
|
||||
non_reply_row.click();
|
||||
}
|
||||
}
|
||||
}, function () {
|
||||
|
@ -103,6 +112,7 @@ $(document).ready(function () {
|
|||
form.find("[name=review_content]").val(row.data("content")).prop("scrollTop", 0);
|
||||
form.find("[name=completion_date]").val(row.data("date"));
|
||||
form.find("[name=completion_time]").val(row.data("time"));
|
||||
form.find("[name=reviewed_rev]").val(row.data("revision_guess"));
|
||||
});
|
||||
|
||||
|
||||
|
@ -133,4 +143,9 @@ $(document).ready(function () {
|
|||
if (val == "link")
|
||||
searchMailArchive();
|
||||
}).trigger("change");
|
||||
|
||||
if (!isReviewer) {
|
||||
// Select mail search by default for secretary completions.
|
||||
form.find("[name=review_submission][value=link]").click()
|
||||
}
|
||||
});
|
||||
|
|
|
@ -115,6 +115,7 @@
|
|||
{% else %}
|
||||
var searchMailArchiveUrl = "{% url "ietf.doc.views_review.search_mail_archive" name=doc.name acronym=team.acronym %}";
|
||||
{% endif %}
|
||||
var isReviewer = {{ is_reviewer|yesno:'true,false' }};
|
||||
</script>
|
||||
<script src="{% static 'ietf/js/complete-review.js' %}"></script>
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in a new issue