Skip to content

Commit f65fcdd

Browse files
committed
Merged in [15804] from rjsparks@nostrum.com:
Add history to ReviewerSettings. Fixes ietf-tools#2147. - Legacy-Id: 15811 Note: SVN reference [15804] has been migrated to Git commit cb70724
2 parents f69ad28 + cb70724 commit f65fcdd

6 files changed

Lines changed: 107 additions & 2 deletions

File tree

ietf/group/views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import datetime
4141
from tempfile import mkstemp
4242
from collections import OrderedDict, defaultdict
43+
from simple_history.utils import update_change_reason
4344

4445
from django import forms
4546
from django.conf import settings
@@ -1675,6 +1676,8 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
16751676
settings_form = ReviewerSettingsForm(request.POST, instance=settings, exclude_fields=exclude_fields)
16761677
if settings_form.is_valid():
16771678
settings = settings_form.save()
1679+
if settings_form.has_changed():
1680+
update_change_reason(settings, "Updated %s" % ", ".join(settings_form.changed_data) )
16781681

16791682
changes = []
16801683
if settings.get_min_interval_display() != prev_min_interval:
@@ -1785,6 +1788,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
17851788
'settings_form': settings_form,
17861789
'period_form': period_form,
17871790
'unavailable_periods': unavailable_periods,
1791+
'reviewersettings': settings,
17881792
})
17891793

17901794

ietf/review/admin.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import simple_history
2+
13
from django.contrib import admin
24

35
from ietf.review.models import (ReviewerSettings, ReviewSecretarySettings, UnavailablePeriod,
46
ReviewWish, NextReviewerInTeam, ReviewRequest, ReviewTeamSettings )
57

6-
class ReviewerSettingsAdmin(admin.ModelAdmin):
8+
class ReviewerSettingsAdmin(simple_history.admin.SimpleHistoryAdmin):
79
def acronym(self, obj):
810
return obj.team.acronym
911
list_display = ['id', 'person', 'acronym', 'min_interval', 'filter_re', 'remind_days_before_deadline', ]
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.16 on 2018-11-09 08:31
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
import ietf.utils.models
9+
import ietf.utils.validators
10+
import simple_history.models
11+
12+
13+
class Migration(migrations.Migration):
14+
15+
dependencies = [
16+
('group', '0003_groupfeatures_data'),
17+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
18+
('person', '0008_auto_20181014_1448'),
19+
('review', '0005_set_secdir_notify_ad_when'),
20+
]
21+
22+
operations = [
23+
migrations.CreateModel(
24+
name='HistoricalReviewerSettings',
25+
fields=[
26+
('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
27+
('min_interval', models.IntegerField(blank=True, choices=[(7, b'Once per week'), (14, b'Once per fortnight'), (30, b'Once per month'), (61, b'Once per two months'), (91, b'Once per quarter')], null=True, verbose_name=b'Can review at most')),
28+
('filter_re', models.CharField(blank=True, help_text=b'Draft names matching this regular expression should not be assigned', max_length=255, validators=[ietf.utils.validators.RegexStringValidator()], verbose_name=b'Filter regexp')),
29+
('skip_next', models.IntegerField(default=0, verbose_name=b'Skip next assignments')),
30+
('remind_days_before_deadline', models.IntegerField(blank=True, help_text=b"To get an email reminder in case you forget to do an assigned review, enter the number of days before review deadline you want to receive it. Clear the field if you don't want a reminder.", null=True)),
31+
('expertise', models.TextField(blank=True, default=b'', help_text=b"Describe the reviewer's expertise in this team's area", max_length=2048, verbose_name=b"Reviewer's expertise in this team's area")),
32+
('history_id', models.AutoField(primary_key=True, serialize=False)),
33+
('history_change_reason', models.CharField(max_length=100, null=True)),
34+
('history_date', models.DateTimeField()),
35+
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
36+
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
37+
('person', ietf.utils.models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='person.Person')),
38+
('team', ietf.utils.models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='group.Group')),
39+
],
40+
options={
41+
'ordering': ('-history_date', '-history_id'),
42+
'get_latest_by': 'history_date',
43+
'verbose_name': 'historical reviewer settings',
44+
},
45+
bases=(simple_history.models.HistoricalChanges, models.Model),
46+
),
47+
]

ietf/review/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import datetime
22

3+
from simple_history.models import HistoricalRecords
4+
35
from django.db import models
46

57
from ietf.doc.models import Document
@@ -11,6 +13,7 @@
1113

1214
class ReviewerSettings(models.Model):
1315
"""Keeps track of admin data associated with a reviewer in a team."""
16+
history = HistoricalRecords()
1417
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
1518
person = ForeignKey(Person)
1619
INTERVALS = [

ietf/review/resources.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
from ietf.review.models import (ReviewerSettings, ReviewRequest,
1111
UnavailablePeriod, ReviewWish, NextReviewerInTeam,
12-
ReviewSecretarySettings, ReviewTeamSettings )
12+
ReviewSecretarySettings, ReviewTeamSettings,
13+
HistoricalReviewerSettings )
1314

1415

1516
from ietf.person.resources import PersonResource
@@ -173,3 +174,33 @@ class Meta:
173174
}
174175
api.review.register(ReviewTeamSettingsResource())
175176

177+
178+
179+
from ietf.person.resources import PersonResource
180+
from ietf.group.resources import GroupResource
181+
from ietf.utils.resources import UserResource
182+
class HistoricalReviewerSettingsResource(ModelResource):
183+
team = ToOneField(GroupResource, 'team', null=True)
184+
person = ToOneField(PersonResource, 'person', null=True)
185+
history_user = ToOneField(UserResource, 'history_user', null=True)
186+
class Meta:
187+
queryset = HistoricalReviewerSettings.objects.all()
188+
serializer = api.Serializer()
189+
cache = SimpleCache()
190+
#resource_name = 'historicalreviewersettings'
191+
filtering = {
192+
"id": ALL,
193+
"min_interval": ALL,
194+
"filter_re": ALL,
195+
"skip_next": ALL,
196+
"remind_days_before_deadline": ALL,
197+
"expertise": ALL,
198+
"history_id": ALL,
199+
"history_change_reason": ALL,
200+
"history_date": ALL,
201+
"history_type": ALL,
202+
"team": ALL_WITH_RELATIONS,
203+
"person": ALL_WITH_RELATIONS,
204+
"history_user": ALL_WITH_RELATIONS,
205+
}
206+
api.review.register(HistoricalReviewerSettingsResource())

ietf/templates/group/change_reviewer_settings.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,24 @@ <h4>Add a new period</h4>
8383
</form>
8484
</div>
8585

86+
<h3>History</h3>
87+
88+
<div id="history">
89+
<table class="table table-condensed table-striped">
90+
<tr>
91+
<th class="col-md-1">Date</th>
92+
<th class="col-md-1">By</th>
93+
<th class="col-md-10">Description</th>
94+
</tr>
95+
{% for h in reviewersettings.history.all %}
96+
<tr>
97+
<td>{{h.history_date|date}}</td>
98+
<td>{{h.history_user.person}}</td>
99+
<td>{{h.history_change_reason}}</td>
100+
</tr>
101+
{% endfor %}
102+
</table>
103+
</div>
86104
<p style="padding-top: 2em;">
87105
<a href="{{ back_url }}" class="btn btn-default">Back</a>
88106
</p>

0 commit comments

Comments
 (0)