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
This commit is contained in:
Ole Laursen 2016-10-17 19:37:56 +00:00
parent 38109e5f13
commit 399bb3bf4d
7 changed files with 34 additions and 13 deletions

View file

@ -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(),
)

View file

@ -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",
)

View file

@ -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,
),
]

View file

@ -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."""

View file

@ -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")

View file

@ -35,7 +35,7 @@
{% for o in unavailable_periods %}
<tr class="unavailable-period-{{ o.state }}">
<td>
{{ o.start_date }} - {{ o.end_date|default:"indefinite" }}
{{ o.start_date|default:"indefinite" }} - {{ o.end_date|default:"indefinite" }}
</td>
<td>{{ o.get_availability_display }}</td>
<td>

View file

@ -1,7 +1,7 @@
<table class="simple-table">
{% for p in unavailable_periods %}
<tr class="unavailable-period-{{ p.state }}">
<td>{{ p.start_date }} - {{ p.end_date|default:"" }}</td>
<td>{{ p.start_date|default:"" }} - {{ p.end_date|default:"" }}</td>
<td>{{ p.get_availability_display }}</td>
</tr>
{% endfor %}