Skip to content

Commit

Permalink
Add history to ReviewerSettings. Fixes #2147. Commit ready for merge.
Browse files Browse the repository at this point in the history
 - Legacy-Id: 15804
  • Loading branch information
rjsparks committed Dec 3, 2018
1 parent f69ad28 commit cb70724
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 2 deletions.
5 changes: 5 additions & 0 deletions ietf/group/views.py
Expand Up @@ -40,6 +40,7 @@
import datetime
from tempfile import mkstemp
from collections import OrderedDict, defaultdict
from simple_history.utils import update_change_reason

from django import forms
from django.conf import settings
Expand Down Expand Up @@ -1675,6 +1676,8 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
settings_form = ReviewerSettingsForm(request.POST, instance=settings, exclude_fields=exclude_fields)
if settings_form.is_valid():
settings = settings_form.save()
if settings_form.has_changed():
update_change_reason(settings, "Updated %s" % ", ".join(settings_form.changed_data) )

changes = []
if settings.get_min_interval_display() != prev_min_interval:
Expand All @@ -1685,6 +1688,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
if changes:
email_reviewer_availability_change(request, group, reviewer_role, "\n\n".join(changes), request.user.person)


return HttpResponseRedirect(back_url)
else:
settings_form = ReviewerSettingsForm(instance=settings,exclude_fields=exclude_fields)
Expand Down Expand Up @@ -1785,6 +1789,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
'settings_form': settings_form,
'period_form': period_form,
'unavailable_periods': unavailable_periods,
'reviewersettings': settings,
})


Expand Down
4 changes: 3 additions & 1 deletion ietf/review/admin.py
@@ -1,9 +1,11 @@
import simple_history

from django.contrib import admin

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

class ReviewerSettingsAdmin(admin.ModelAdmin):
class ReviewerSettingsAdmin(simple_history.admin.SimpleHistoryAdmin):
def acronym(self, obj):
return obj.team.acronym
list_display = ['id', 'person', 'acronym', 'min_interval', 'filter_re', 'remind_days_before_deadline', ]
Expand Down
47 changes: 47 additions & 0 deletions ietf/review/migrations/0006_historicalreviewersettings.py
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.16 on 2018-11-09 08:31
from __future__ import unicode_literals

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import ietf.utils.models
import ietf.utils.validators
import simple_history.models


class Migration(migrations.Migration):

dependencies = [
('group', '0003_groupfeatures_data'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('person', '0008_auto_20181014_1448'),
('review', '0005_set_secdir_notify_ad_when'),
]

operations = [
migrations.CreateModel(
name='HistoricalReviewerSettings',
fields=[
('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('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')),
('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')),
('skip_next', models.IntegerField(default=0, verbose_name=b'Skip next assignments')),
('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)),
('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")),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_date', models.DateTimeField()),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
('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')),
('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')),
],
options={
'ordering': ('-history_date', '-history_id'),
'get_latest_by': 'history_date',
'verbose_name': 'historical reviewer settings',
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
]
3 changes: 3 additions & 0 deletions ietf/review/models.py
@@ -1,5 +1,7 @@
import datetime

from simple_history.models import HistoricalRecords

from django.db import models

from ietf.doc.models import Document
Expand Down Expand Up @@ -27,6 +29,7 @@ class ReviewerSettings(models.Model):
skip_next = models.IntegerField(default=0, verbose_name="Skip next assignments")
remind_days_before_deadline = models.IntegerField(null=True, blank=True, help_text="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.")
expertise = models.TextField(verbose_name="Reviewer's expertise in this team's area", max_length=2048, blank=True, help_text="Describe the reviewer's expertise in this team's area", default='')
history = HistoricalRecords()

def __unicode__(self):
return u"{} in {}".format(self.person, self.team)
Expand Down
33 changes: 32 additions & 1 deletion ietf/review/resources.py
Expand Up @@ -9,7 +9,8 @@

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


from ietf.person.resources import PersonResource
Expand Down Expand Up @@ -173,3 +174,33 @@ class Meta:
}
api.review.register(ReviewTeamSettingsResource())



from ietf.person.resources import PersonResource
from ietf.group.resources import GroupResource
from ietf.utils.resources import UserResource
class HistoricalReviewerSettingsResource(ModelResource):
team = ToOneField(GroupResource, 'team', null=True)
person = ToOneField(PersonResource, 'person', null=True)
history_user = ToOneField(UserResource, 'history_user', null=True)
class Meta:
queryset = HistoricalReviewerSettings.objects.all()
serializer = api.Serializer()
cache = SimpleCache()
#resource_name = 'historicalreviewersettings'
filtering = {
"id": ALL,
"min_interval": ALL,
"filter_re": ALL,
"skip_next": ALL,
"remind_days_before_deadline": ALL,
"expertise": ALL,
"history_id": ALL,
"history_change_reason": ALL,
"history_date": ALL,
"history_type": ALL,
"team": ALL_WITH_RELATIONS,
"person": ALL_WITH_RELATIONS,
"history_user": ALL_WITH_RELATIONS,
}
api.review.register(HistoricalReviewerSettingsResource())
18 changes: 18 additions & 0 deletions ietf/templates/group/change_reviewer_settings.html
Expand Up @@ -83,6 +83,24 @@ <h4>Add a new period</h4>
</form>
</div>

<h3>History</h3>

<div id="history">
<table class="table table-condensed table-striped">
<tr>
<th class="col-md-1">Date</th>
<th class="col-md-1">By</th>
<th class="col-md-10">Description</th>
</tr>
{% for h in reviewersettings.history.all %}
<tr>
<td>{{h.history_date|date}}</td>
<td>{{h.history_user.person}}</td>
<td>{{h.history_change_reason}}</td>
</tr>
{% endfor %}
</table>
</div>
<p style="padding-top: 2em;">
<a href="{{ back_url }}" class="btn btn-default">Back</a>
</p>
Expand Down

0 comments on commit cb70724

Please sign in to comment.