Merged in [16921] from sasha@dashcare.nl:
Fix #2123 - Use a DBTemplate when a review assignment is mailed.
The message sent to a reviewer when a new review is assigned to them,
is now taken from a DBTemplate, allowing it to be customised
per team. This includes a migration to create a default template,
which looks the same as before.
- Legacy-Id: 16928
Note: SVN reference [16921] has been migrated to Git commit 9df5839874
This commit is contained in:
commit
09c34fa131
|
@ -0,0 +1,35 @@
|
|||
# Copyright The IETF Trust 2019, All Rights Reserved
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
def forward(apps, schema_editor):
|
||||
DBTemplate = apps.get_model('dbtemplate', 'DBTemplate')
|
||||
|
||||
DBTemplate.objects.create(path='/group/defaults/email/review_assigned.txt', type_id='django',
|
||||
content="""{{ assigner.ascii }} has assigned you as a reviewer for this document.
|
||||
|
||||
{% if prev_team_reviews %}This team has completed other reviews of this document:{% endif %}{% for assignment in prev_team_reviews %}
|
||||
- {{ assignment.completed_on }} {{ assignment.reviewer.person.ascii }} -{% if assignment.reviewed_rev %}{{ assignment.reviewed_rev }}{% else %}{{ assignment.review_request.requested_rev }}{% endif %} {{ assignment.result.name }}
|
||||
{% endfor %}
|
||||
""")
|
||||
|
||||
|
||||
def reverse(apps, schema_editor):
|
||||
DBTemplate = apps.get_model('dbtemplate', 'DBTemplate')
|
||||
|
||||
DBTemplate.objects.get(path='/group/defaults/email/review_assigned.txt').delete()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dbtemplate', '0005_adjust_assignment_email_summary_templates_2526'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward,reverse),
|
||||
]
|
|
@ -322,7 +322,7 @@ class ReviewTests(TestCase):
|
|||
review_team = ReviewTeamFactory(acronym="reviewteam", name="Review Team", type_id="review", list_email="reviewteam@ietf.org", parent=Group.objects.get(acronym="farfut"))
|
||||
rev_role = RoleFactory(group=review_team,person__user__username='reviewer',person__user__email='reviewer@example.com',person__name='Some Reviewer',name_id='reviewer')
|
||||
RoleFactory(group=review_team,person__user__username='marschairman',person__name='WG Cháir Man',name_id='reviewer')
|
||||
RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr')
|
||||
secretary = RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr')
|
||||
ReviewerSettings.objects.create(team=review_team, person=rev_role.person, min_interval=14, skip_next=0)
|
||||
|
||||
# review to assign to
|
||||
|
@ -421,10 +421,14 @@ class ReviewTests(TestCase):
|
|||
assignment = review_req.reviewassignment_set.first()
|
||||
self.assertEqual(assignment.reviewer, reviewer)
|
||||
self.assertEqual(assignment.state_id, "assigned")
|
||||
self.assertEqual(NextReviewerInTeam.objects.get(team=review_req.team).next_reviewer, rotation_list[1])
|
||||
|
||||
self.assertEqual(len(outbox), 1)
|
||||
self.assertEqual('"Some Reviewer" <reviewer@example.com>', outbox[0]["To"])
|
||||
self.assertTrue("assigned" in outbox[0].get_payload(decode=True).decode("utf-8"))
|
||||
self.assertEqual(NextReviewerInTeam.objects.get(team=review_req.team).next_reviewer, rotation_list[1])
|
||||
message = outbox[0].get_payload(decode=True).decode("utf-8")
|
||||
self.assertTrue("{} has assigned you".format(secretary.person.ascii) in message)
|
||||
self.assertTrue("This team has completed other reviews" in message)
|
||||
self.assertTrue("{} -01 Serious Issues".format(reviewer_email.person.ascii) in message)
|
||||
|
||||
def test_accept_reviewer_assignment(self):
|
||||
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
[
|
||||
{
|
||||
"fields": {
|
||||
"path": "/group/defaults/email/review_assigned.txt",
|
||||
"type_id": "django",
|
||||
"content": "{{ assigner.ascii }} has assigned you as a reviewer for this document.\n\n{% if prev_team_reviews %}This team has completed other reviews of this document:{% endif %}{% for assignment in prev_team_reviews %}\n- {{ assignment.completed_on }} {{ assignment.reviewer.person.ascii }} -{% if assignment.reviewed_rev %}{{ assignment.reviewed_rev }}{% else %}{{ assignment.review_request.requested_rev }}{% endif %} {{ assignment.result.name }}\n{% endfor %}"
|
||||
},
|
||||
"model": "dbtemplate.dbtemplate",
|
||||
"pk": "1000"
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"doc_type": "charter",
|
||||
|
|
|
@ -13,10 +13,12 @@ from collections import defaultdict, namedtuple
|
|||
|
||||
from django.db.models import Q, Max, F
|
||||
from django.template.defaultfilters import pluralize
|
||||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse as urlreverse
|
||||
from django.contrib.sites.models import Site
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
from ietf.dbtemplate.models import DBTemplate
|
||||
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.doc.models import (Document, ReviewRequestDocEvent, ReviewAssignmentDocEvent, State,
|
||||
|
@ -454,21 +456,20 @@ def assign_review_request_to_reviewer(request, review_req, reviewer, add_skip=Fa
|
|||
state_id='assigned',
|
||||
)
|
||||
|
||||
msg = "%s has assigned you as a reviewer for this document." % request.user.person.ascii
|
||||
prev_team_reviews = ReviewAssignment.objects.filter(
|
||||
review_request__doc=review_req.doc,
|
||||
state="completed",
|
||||
review_request__team=review_req.team,
|
||||
)
|
||||
if prev_team_reviews.exists():
|
||||
msg = msg + '\n\nThis team has completed other reviews of this document:\n'
|
||||
for assignment in prev_team_reviews:
|
||||
msg += '%s %s -%s %s\n'% (
|
||||
assignment.completed_on.strftime('%d %b %Y'),
|
||||
assignment.reviewer.person.ascii,
|
||||
assignment.reviewed_rev or assignment.review_request.requested_rev,
|
||||
assignment.result.name,
|
||||
)
|
||||
|
||||
try:
|
||||
template = DBTemplate.objects.get(
|
||||
path="/group/%s/email/review_assigned.txt" % review_req.team.acronym)
|
||||
except DBTemplate.DoesNotExist:
|
||||
template = DBTemplate.objects.get(path="/group/defaults/email/review_assigned.txt")
|
||||
|
||||
context = {'assigner': request.user.person, 'prev_team_reviews': prev_team_reviews}
|
||||
msg = render_to_string(template.path, context, request=request)
|
||||
|
||||
email_review_request_change(
|
||||
request, review_req,
|
||||
|
|
Loading…
Reference in a new issue