|
7 | 7 | import six |
8 | 8 |
|
9 | 9 | from ietf.doc.models import DocumentAuthor, DocAlias |
| 10 | +from ietf.doc.utils import extract_complete_replaces_ancestor_mapping_for_docs |
10 | 11 | from ietf.group.models import Role |
11 | 12 | from ietf.person.models import Person |
12 | 13 | import debug # pyflakes:ignore |
@@ -261,11 +262,13 @@ def _connections_with_doc(self, doc, person_ids): |
261 | 262 |
|
262 | 263 | def _persons_with_previous_review(self, review_req, possible_person_ids): |
263 | 264 | """ |
264 | | - Collect anyone in possible_person_ids that have reviewed the request before. |
| 265 | + Collect anyone in possible_person_ids that have reviewed the document before, |
| 266 | + or an ancestor document. |
265 | 267 | Returns a set with Person IDs of anyone who has. |
266 | 268 | """ |
| 269 | + doc_names = {review_req.doc.name}.union(*extract_complete_replaces_ancestor_mapping_for_docs([review_req.doc.name]).values()) |
267 | 270 | has_reviewed_previous = ReviewRequest.objects.filter( |
268 | | - doc=review_req.doc, |
| 271 | + doc__name__in=doc_names, |
269 | 272 | reviewassignment__reviewer__person__in=possible_person_ids, |
270 | 273 | reviewassignment__state="completed", |
271 | 274 | team=self.team, |
@@ -313,30 +316,33 @@ def reviewer_settings_for(person): |
313 | 316 | print('with skipped {}'.format([r for r in rotation_list])) |
314 | 317 | print('without skip {}'.format([r for r in rotation_list_without_skip])) |
315 | 318 | print('skip counts {}'.format([(r, reviewer_settings_for(r).skip_next) for r in rotation_list])) |
| 319 | + # In order means: assigned to the first person in the rotation list with skip_next=0 |
| 320 | + # If the assignment is not in order, skip_next and NextReviewerInTeam are not modified. |
316 | 321 | in_order_assignment = rotation_list_without_skip[0] == assignee_person |
317 | 322 | print('in order: {}'.format(in_order_assignment)) |
318 | 323 |
|
319 | 324 | # Loop through the list until finding the first person with skip_next=0, |
320 | 325 | # who is not the current assignee. Anyone with skip_next>0 encountered before |
321 | 326 | # has their skip_next decreased. |
322 | 327 | current_idx = 0 |
323 | | - while in_order_assignment: |
324 | | - current_idx_person = reviewer_at_index(current_idx) |
325 | | - settings = reviewer_settings_for(current_idx_person) |
326 | | - print('evaluating {} with skip_next {}, assignee {}'.format(current_idx_person, settings.skip_next, assignee_person)) |
327 | | - if settings.skip_next > 0: |
328 | | - print('dropping skip_next') |
329 | | - settings.skip_next -= 1 |
330 | | - settings.save() |
331 | | - elif current_idx_person != assignee_person: |
332 | | - print('nr appointed') |
333 | | - nr = NextReviewerInTeam.objects.filter(team=self.team).first() or NextReviewerInTeam( |
334 | | - team=self.team) |
335 | | - nr.next_reviewer = current_idx_person |
336 | | - nr.save() |
337 | | - |
338 | | - break |
339 | | - current_idx += 1 |
| 328 | + if in_order_assignment: |
| 329 | + while True: |
| 330 | + current_idx_person = reviewer_at_index(current_idx) |
| 331 | + settings = reviewer_settings_for(current_idx_person) |
| 332 | + print('evaluating {} with skip_next {}, assignee {}'.format(current_idx_person, settings.skip_next, assignee_person)) |
| 333 | + if settings.skip_next > 0: |
| 334 | + print('dropping skip_next') |
| 335 | + settings.skip_next -= 1 |
| 336 | + settings.save() |
| 337 | + elif current_idx_person != assignee_person: |
| 338 | + print('nr appointed') |
| 339 | + nr = NextReviewerInTeam.objects.filter(team=self.team).first() or NextReviewerInTeam( |
| 340 | + team=self.team) |
| 341 | + nr.next_reviewer = current_idx_person |
| 342 | + nr.save() |
| 343 | + |
| 344 | + break |
| 345 | + current_idx += 1 |
340 | 346 |
|
341 | 347 | if add_skip: |
342 | 348 | print('raising skip count for assignee') |
|
0 commit comments