From 399bb3bf4dcf6569a3335f56e2be50fdc0e40d29 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Mon, 17 Oct 2016 19:37:56 +0000 Subject: [PATCH] Make UnavailablePeriod.start_date nullable and import the unavailable periods from the Perl tool with start date null as we don't know when they started. - Legacy-Id: 12161 --- ietf/group/views_review.py | 12 +++++------ ietf/review/import_from_review_tool.py | 2 +- .../migrations/0002_auto_20161017_1218.py | 21 +++++++++++++++++++ ietf/review/models.py | 6 +++--- ietf/review/utils.py | 2 +- .../group/change_reviewer_settings.html | 2 +- ietf/templates/review/unavailable_table.html | 2 +- 7 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 ietf/review/migrations/0002_auto_20161017_1218.py diff --git a/ietf/group/views_review.py b/ietf/group/views_review.py index 2c33b9889..73c572398 100644 --- a/ietf/group/views_review.py +++ b/ietf/group/views_review.py @@ -124,7 +124,7 @@ def reviewer_overview(request, acronym, group_type=None): person.settings_url = urlreverse("ietf.group.views_review.change_reviewer_settings", kwargs=kwargs) person.unavailable_periods = unavailable_periods.get(person.pk, []) person.completely_unavailable = any(p.availability == "unavailable" - and p.start_date <= today and (p.end_date is None or today <= p.end_date) + and (p.start_date is None or p.start_date <= today) and (p.end_date is None or today <= p.end_date) for p in person.unavailable_periods) MAX_REQS = 5 @@ -384,13 +384,13 @@ class EndUnavailablePeriodForm(forms.Form): def __init__(self, start_date, *args, **kwargs): super(EndUnavailablePeriodForm, self).__init__(*args, **kwargs) - self.fields["end_date"] = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1", "start-date": start_date.isoformat() }) + self.fields["end_date"] = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1", "start-date": start_date.isoformat() if start_date else "" }) self.start_date = start_date def clean_end_date(self): end = self.cleaned_data["end_date"] - if end < self.start_date: + if self.start_date and end < self.start_date: raise forms.ValidationError("End date must be equal to or come after start date.") return end @@ -457,7 +457,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None): if not in_the_past: msg = "Unavailable for review: {} - {} ({})".format( - period.start_date.isoformat(), + period.start_date.isoformat() if period.start_date else "indefinite", period.end_date.isoformat() if period.end_date else "indefinite", period.get_availability_display(), ) @@ -496,7 +496,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None): if not in_the_past: msg = "Removed unavailable period: {} - {} ({})".format( - period.start_date.isoformat(), + period.start_date.isoformat() if period.start_date else "indefinite", period.end_date.isoformat() if period.end_date else "indefinite", period.get_availability_display(), ) @@ -518,7 +518,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None): period.save() msg = "Set end date of unavailable period: {} - {} ({})".format( - period.start_date.isoformat(), + period.start_date.isoformat() if period.start_date else "indefinite", period.end_date.isoformat() if period.end_date else "indefinite", period.get_availability_display(), ) diff --git a/ietf/review/import_from_review_tool.py b/ietf/review/import_from_review_tool.py index 820ff5b1f..984936919 100755 --- a/ietf/review/import_from_review_tool.py +++ b/ietf/review/import_from_review_tool.py @@ -145,7 +145,7 @@ with db_con.cursor() as c: UnavailablePeriod.objects.create( team=team, person=email.person, - start_date=today, + start_date=None, end_date=end_date, availability="unavailable", ) diff --git a/ietf/review/migrations/0002_auto_20161017_1218.py b/ietf/review/migrations/0002_auto_20161017_1218.py new file mode 100644 index 000000000..03901a129 --- /dev/null +++ b/ietf/review/migrations/0002_auto_20161017_1218.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import datetime + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='unavailableperiod', + name='start_date', + field=models.DateField(default=datetime.date.today, help_text=b"Choose the start date so that you can still do a review if it's assigned just before the start date - this usually means you should mark yourself unavailable for assignment some time before you are actually away.", null=True), + preserve_default=True, + ), + ] diff --git a/ietf/review/models.py b/ietf/review/models.py index ae7e91e33..08d5a4c3b 100644 --- a/ietf/review/models.py +++ b/ietf/review/models.py @@ -34,7 +34,7 @@ class ReviewerSettings(models.Model): class UnavailablePeriod(models.Model): team = models.ForeignKey(Group, limit_choices_to=~models.Q(resultusedinreviewteam=None)) person = models.ForeignKey(Person) - start_date = models.DateField(default=datetime.date.today, help_text="Choose the start date so that you can still do a review if it's assigned just before the start date - this usually means you should mark yourself unavailable for assignment some time before you are actually away.") + start_date = models.DateField(default=datetime.date.today, null=True, help_text="Choose the start date so that you can still do a review if it's assigned just before the start date - this usually means you should mark yourself unavailable for assignment some time before you are actually away.") end_date = models.DateField(blank=True, null=True, help_text="Leaving the end date blank means that the period continues indefinitely. You can end it later.") AVAILABILITY_CHOICES = [ ("canfinish", "Can do follow-ups"), @@ -49,7 +49,7 @@ class UnavailablePeriod(models.Model): def state(self): import datetime today = datetime.date.today() - if self.start_date <= today: + if self.start_date is None or self.start_date <= today: if not self.end_date or today <= self.end_date: return "active" else: @@ -58,7 +58,7 @@ class UnavailablePeriod(models.Model): return "future" def __unicode__(self): - return u"{} is unavailable in {} {} - {}".format(self.person, self.team.acronym, self.start_date, self.end_date or "") + return u"{} is unavailable in {} {} - {}".format(self.person, self.team.acronym, self.start_date or "", self.end_date or "") class ReviewWish(models.Model): """Reviewer wishes to review a document when it becomes available for review.""" diff --git a/ietf/review/utils.py b/ietf/review/utils.py index 966cfe804..5d1bcc0c4 100644 --- a/ietf/review/utils.py +++ b/ietf/review/utils.py @@ -63,7 +63,7 @@ def current_unavailable_periods_for_reviewers(team): unavailable_period_qs = UnavailablePeriod.objects.filter( Q(end_date__gte=today) | Q(end_date=None), - start_date__lte=today, + Q(start_date__lte=today) | Q(start_date=None), team=team, ).order_by("end_date") diff --git a/ietf/templates/group/change_reviewer_settings.html b/ietf/templates/group/change_reviewer_settings.html index 3c5ae3b6c..e77b63ccd 100644 --- a/ietf/templates/group/change_reviewer_settings.html +++ b/ietf/templates/group/change_reviewer_settings.html @@ -35,7 +35,7 @@ {% for o in unavailable_periods %} - {{ o.start_date }} - {{ o.end_date|default:"indefinite" }} + {{ o.start_date|default:"indefinite" }} - {{ o.end_date|default:"indefinite" }} {{ o.get_availability_display }} diff --git a/ietf/templates/review/unavailable_table.html b/ietf/templates/review/unavailable_table.html index dcb5d2836..ece575fe0 100644 --- a/ietf/templates/review/unavailable_table.html +++ b/ietf/templates/review/unavailable_table.html @@ -1,7 +1,7 @@ {% for p in unavailable_periods %} - + {% endfor %}
{{ p.start_date }} - {{ p.end_date|default:"" }}{{ p.start_date|default:"" }} - {{ p.end_date|default:"" }} {{ p.get_availability_display }}