diff --git a/ietf/doc/models.py b/ietf/doc/models.py index 6b850e98a..5e199c695 100644 --- a/ietf/doc/models.py +++ b/ietf/doc/models.py @@ -509,6 +509,10 @@ class Document(DocumentInfo): e = self.latest_event(TelechatDocEvent, type="scheduled_for_telechat") return e.telechat_date if e and e.telechat_date and e.telechat_date >= datetime.date.today() else None + def past_telechat_date(self): + e = self.latest_event(TelechatDocEvent, type="scheduled_for_telechat") + return e.telechat_date if e and e.telechat_date and e.telechat_date < datetime.date.today() else None + def area_acronym(self): g = self.group if g: diff --git a/ietf/group/views_review.py b/ietf/group/views_review.py index 9f757713a..41791cb8f 100644 --- a/ietf/group/views_review.py +++ b/ietf/group/views_review.py @@ -26,7 +26,9 @@ from ietf.review.utils import (can_manage_review_requests_for_team, reviewer_rotation_list, latest_review_requests_for_reviewers, augment_review_requests_with_events, - get_default_filter_re,) + get_default_filter_re, + days_needed_to_fulfill_min_interval_for_reviewers, + ) from ietf.doc.models import LastCallDocEvent from ietf.group.models import Role from ietf.group.utils import get_group_or_404, construct_group_menu_context @@ -142,6 +144,8 @@ def reviewer_overview(request, acronym, group_type=None): req_data_for_reviewers = latest_review_requests_for_reviewers(group) review_state_by_slug = { n.slug: n for n in ReviewRequestStateName.objects.all() } + days_needed = days_needed_to_fulfill_min_interval_for_reviewers(group) + for person in reviewers: person.settings = reviewer_settings.get(person.pk) or ReviewerSettings(team=group, person=person) person.settings_url = None @@ -155,6 +159,8 @@ def reviewer_overview(request, acronym, group_type=None): person.completely_unavailable = any(p.availability == "unavailable" 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) + person.busy = person.id in days_needed + MAX_CLOSED_REQS = 10 req_data = req_data_for_reviewers.get(person.pk, []) diff --git a/ietf/static/ietf/css/ietf.css b/ietf/static/ietf/css/ietf.css index 025bc0168..a58f4cce2 100644 --- a/ietf/static/ietf/css/ietf.css +++ b/ietf/static/ietf/css/ietf.css @@ -550,7 +550,15 @@ table.simple-table td:last-child { } .reviewer-overview .completely-unavailable { - opacity: 0.6; + background-color: #D8D8D8; +} + +.reviewer-overview .skip-next { + background-color: #E4E4E4; +} + +.reviewer-overview .busy { + background-color: #F0F0F0; } /* === Statistics =========================================================== */ diff --git a/ietf/templates/group/manage_review_requests.html b/ietf/templates/group/manage_review_requests.html index 3ff06116e..d52c0f6cf 100644 --- a/ietf/templates/group/manage_review_requests.html +++ b/ietf/templates/group/manage_review_requests.html @@ -148,6 +148,7 @@ + {% if r.doc.past_telechat_date %} (was on {{r.doc.past_telechat_date}} telechat) {% endif %} diff --git a/ietf/templates/group/reviewer_overview.html b/ietf/templates/group/reviewer_overview.html index a2fd85205..d780f9e43 100644 --- a/ietf/templates/group/reviewer_overview.html +++ b/ietf/templates/group/reviewer_overview.html @@ -16,7 +16,13 @@

Reviewers

Status of the reviewers in {{ group.acronym }}, ordered by their - rotation with the next reviewer in the rotation at the top.

+ rotation with the next reviewer in the rotation at the top. Rows with darker backgrounds have the following meaning: +

+
+

Has already been assigned a document within the given interval.

+

Will be skipped the next time at the top of rotation.

+

Is not available to do reviews at this time.

+
{% if reviewers %} @@ -29,7 +35,10 @@ {% for person in reviewers %} - +
{% if person.settings_url %}{% endif %}{{ person }}{% if person.settings_url %}{% endif %}