|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +# Generated by Django 1.11.18 on 2019-01-04 14:34 |
| 3 | +from __future__ import unicode_literals |
| 4 | + |
| 5 | +from tqdm import tqdm |
| 6 | + |
| 7 | +from django.db import migrations |
| 8 | + |
| 9 | +def assigned_time(model, request): |
| 10 | + e = model.objects.filter(doc=request.doc, type="assigned_review_request", review_request=request).order_by('-time', '-id').first() |
| 11 | + return e.time if e and e.time else None |
| 12 | + |
| 13 | +def done_time(model, request): |
| 14 | + if request.unused_review and request.unused_review.time: |
| 15 | + return request.unused_review.time |
| 16 | + e = model.objects.filter(doc=request.doc, type="closed_review_request", review_request=request).order_by('-time', '-id').first() |
| 17 | + time = e.time if e and e.time else None |
| 18 | + return time if time else request.time |
| 19 | + |
| 20 | +def map_request_state_to_assignment_state(req_state_id): |
| 21 | + if req_state_id == 'requested': |
| 22 | + return 'assigned' |
| 23 | + elif req_state_id in ('no-review-document', 'no-review-version'): |
| 24 | + return 'withdrawn' |
| 25 | + else: |
| 26 | + return req_state_id |
| 27 | + |
| 28 | +def forward(apps, schema_editor): |
| 29 | + ReviewRequest = apps.get_model('review', 'ReviewRequest') |
| 30 | + ReviewAssignment = apps.get_model('review', 'ReviewAssignment') |
| 31 | + Document = apps.get_model('doc', 'Document') |
| 32 | + ReviewRequestDocEvent = apps.get_model('doc','ReviewRequestDocEvent') |
| 33 | + ReviewAssignmentDocEvent = apps.get_model('doc','ReviewAssignmentDocEvent') |
| 34 | + |
| 35 | + print('') # introduce a newline before tqdm starts writing |
| 36 | + |
| 37 | + for request in tqdm(ReviewRequest.objects.exclude(unused_reviewer__isnull=True)): |
| 38 | + assignment_state = map_request_state_to_assignment_state(request.state_id) |
| 39 | + if not (assignment_state in (u'assigned', u'accepted', u'completed', u'no-response', u'overtaken', u'part-completed', u'rejected', u'withdrawn', u'unknown')): |
| 40 | + print ("Trouble with review_request",request.pk,"with state",request.state_id) |
| 41 | + exit(-1) |
| 42 | + ReviewAssignment.objects.create( |
| 43 | + review_request = request, |
| 44 | + state_id = assignment_state, |
| 45 | + reviewer = request.unused_reviewer, |
| 46 | + assigned_on = assigned_time(ReviewRequestDocEvent, request), |
| 47 | + completed_on = done_time(ReviewRequestDocEvent, request), |
| 48 | + review = request.unused_review, |
| 49 | + reviewed_rev = request.unused_reviewed_rev, |
| 50 | + result = request.unused_result, |
| 51 | + mailarch_url = request.unused_review and request.unused_review.external_url, |
| 52 | + ) |
| 53 | + Document.objects.filter(type_id='review').update(external_url='') |
| 54 | + ReviewRequest.objects.filter(state_id__in=('accepted', 'rejected', 'no-response', 'part-completed', 'completed', 'unknown')).update(state_id='assigned') |
| 55 | + ReviewRequest.objects.filter(state_id='requested',unused_reviewer__isnull=False).update(state_id='assigned') |
| 56 | + |
| 57 | + for req_event in tqdm(ReviewRequestDocEvent.objects.filter(type="assigned_review_request",review_request__unused_reviewer__isnull=False)): |
| 58 | + ReviewAssignmentDocEvent.objects.create( |
| 59 | + time = req_event.time, |
| 60 | + type = req_event.type, |
| 61 | + by = req_event.by, |
| 62 | + doc = req_event.doc, |
| 63 | + rev = req_event.rev, |
| 64 | + desc = req_event.desc, |
| 65 | + review_assignment = req_event.review_request.reviewassignment_set.first(), |
| 66 | + state_id = 'assigned' |
| 67 | + ) |
| 68 | + |
| 69 | + for req_event in tqdm(ReviewRequestDocEvent.objects.filter(type="closed_review_request", |
| 70 | + state_id__in=('completed', 'no-response', 'part-completed', 'rejected', 'unknown', 'withdrawn'), |
| 71 | + review_request__unused_reviewer__isnull=False)): |
| 72 | + ReviewAssignmentDocEvent.objects.create( |
| 73 | + time = req_event.time, |
| 74 | + type = req_event.type, |
| 75 | + by = req_event.by, |
| 76 | + doc = req_event.doc, |
| 77 | + rev = req_event.rev, |
| 78 | + desc = req_event.desc, |
| 79 | + review_assignment = req_event.review_request.reviewassignment_set.first(), |
| 80 | + state_id = req_event.state_id |
| 81 | + ) |
| 82 | + |
| 83 | + ReviewRequestDocEvent.objects.filter(type="closed_review_request", |
| 84 | + state_id__in=('completed', 'no-response', 'part-completed', 'rejected', 'unknown', 'withdrawn'), |
| 85 | + review_request__unused_reviewer__isnull=False).delete() |
| 86 | + |
| 87 | + |
| 88 | +def reverse(apps, schema_editor): |
| 89 | + ReviewAssignment = apps.get_model('review', 'ReviewAssignment') |
| 90 | + ReviewRequestDocEvent = apps.get_model('doc','ReviewRequestDocEvent') |
| 91 | + ReviewAssignmentDocEvent = apps.get_model('doc','ReviewAssignmentDocEvent') |
| 92 | + |
| 93 | + for assignment in tqdm(ReviewAssignment.objects.all()): |
| 94 | + assignment.review_request.unused_review.external_url = assignment.mailarch_url |
| 95 | + assignment.review_request.unused_review.save() |
| 96 | + assignment.review_request.state_id = assignment.state_id |
| 97 | + assignment.review_request.save() |
| 98 | + |
| 99 | + for asgn_event in tqdm(ReviewAssignmentDocEvent.objects.filter(state_id__in=('completed', 'no-response', 'part-completed', 'rejected', 'unknown', 'withdrawn'))): |
| 100 | + ReviewRequestDocEvent.objects.create( |
| 101 | + time = asgn_event.time, |
| 102 | + type = asgn_event.type, |
| 103 | + by = asgn_event.by, |
| 104 | + doc = asgn_event.doc, |
| 105 | + rev = asgn_event.rev, |
| 106 | + desc = asgn_event.desc, |
| 107 | + review_request = asgn_event.review_request, |
| 108 | + state_id = asgn_event.state_id |
| 109 | + ) |
| 110 | + ReviewAssignmentDocEvent.objects.all().delete() |
| 111 | + |
| 112 | +class Migration(migrations.Migration): |
| 113 | + |
| 114 | + dependencies = [ |
| 115 | + ('review', '0009_refactor_review_request'), |
| 116 | + ('doc','0011_reviewassignmentdocevent') |
| 117 | + ] |
| 118 | + |
| 119 | + operations = [ |
| 120 | + migrations.RunPython(forward, reverse) |
| 121 | + ] |
0 commit comments