|
7 | 7 |
|
8 | 8 | from ietf.group.models import Group, Role |
9 | 9 | from ietf.doc.models import (Document, ReviewRequestDocEvent, State, |
10 | | - LastCallDocEvent, DocumentAuthor, DocAlias) |
| 10 | + LastCallDocEvent, TelechatDocEvent, |
| 11 | + DocumentAuthor, DocAlias) |
11 | 12 | from ietf.iesg.models import TelechatDate |
12 | | -from ietf.person.models import Person, Email |
| 13 | +from ietf.person.models import Person |
13 | 14 | from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream |
14 | 15 | from ietf.review.models import (ReviewRequest, ReviewRequestStateName, ReviewTypeName, TypeUsedInReviewTeam, |
15 | 16 | ReviewerSettings, UnavailablePeriod, ReviewWish, NextReviewerInTeam) |
@@ -508,14 +509,15 @@ def suggested_review_requests_for_team(team): |
508 | 509 |
|
509 | 510 | now = datetime.datetime.now() |
510 | 511 |
|
| 512 | + reviewable_docs_qs = Document.objects.filter(type="draft").exclude(stream="ise") |
| 513 | + |
511 | 514 | requested_state = ReviewRequestStateName.objects.get(slug="requested", used=True) |
512 | 515 |
|
513 | 516 | last_call_type = ReviewTypeName.objects.get(slug="lc") |
514 | 517 | if TypeUsedInReviewTeam.objects.filter(team=team, type=last_call_type).exists(): |
515 | 518 | # in Last Call |
516 | | - last_call_docs = Document.objects.filter( |
517 | | - type="draft", |
518 | | - states=State.objects.get(type="draft-iesg", slug="lc", used=True), |
| 519 | + last_call_docs = reviewable_docs_qs.filter( |
| 520 | + states=State.objects.get(type="draft-iesg", slug="lc", used=True) |
519 | 521 | ) |
520 | 522 | last_call_expiry_events = { e.doc_id: e for e in LastCallDocEvent.objects.order_by("time", "id") } |
521 | 523 | for doc in last_call_docs: |
@@ -546,18 +548,25 @@ def suggested_review_requests_for_team(team): |
546 | 548 |
|
547 | 549 | telechat_deadline_delta = datetime.timedelta(days=2) |
548 | 550 |
|
549 | | - telechat_docs = Document.objects.filter( |
550 | | - type="draft", |
| 551 | + telechat_docs = reviewable_docs_qs.filter( |
551 | 552 | docevent__telechatdocevent__telechat_date__in=telechat_dates |
| 553 | + ).values_list("pk", flat=True) |
| 554 | + |
| 555 | + # we need to check the latest telechat event for each document |
| 556 | + # scheduled for the telechat, as the appearance might have been |
| 557 | + # cancelled/moved |
| 558 | + telechat_events = TelechatDocEvent.objects.filter( |
| 559 | + doc__in=list(telechat_docs), # explicitly turn into list so we don't get a complex and slow join sent down to the DB |
552 | 560 | ).values_list( |
553 | | - "pk", "docevent__telechatdocevent__time", "docevent__telechatdocevent__telechat_date" |
554 | | - ).order_by("pk", "docevent__telechatdocevent__telechat_date") |
555 | | - for doc_pk, events in itertools.groupby(telechat_docs, lambda t: t[0]): |
556 | | - event_time = deadline = None |
557 | | - for _, event_time, event_telechat_date in events: |
558 | | - if event_telechat_date in telechat_dates: |
559 | | - deadline = event_telechat_date - telechat_deadline_delta |
560 | | - break |
| 561 | + "doc", "pk", "time", "telechat_date" |
| 562 | + ).order_by("doc", "-time", "-id").distinct() |
| 563 | + |
| 564 | + for doc_pk, events in itertools.groupby(telechat_events, lambda t: t[0]): |
| 565 | + _, _, event_time, event_telechat_date = list(events)[0] |
| 566 | + |
| 567 | + deadline = None |
| 568 | + if event_telechat_date in telechat_dates: |
| 569 | + deadline = event_telechat_date - telechat_deadline_delta |
561 | 570 |
|
562 | 571 | if not deadline or deadline > seen_deadlines.get(doc_pk, datetime.date.max): |
563 | 572 | continue |
|
0 commit comments