Merge pull request #38 from taavi/review-assignments-script
Adds a manage.py script to assign reviewers to talks.
This commit is contained in:
		
						commit
						349422fae8
					
				
					 2 changed files with 27 additions and 3 deletions
				
			
		
							
								
								
									
										17
									
								
								symposion/reviews/management/commands/assign_reviewers.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								symposion/reviews/management/commands/assign_reviewers.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| import csv | ||||
| import os | ||||
| import random | ||||
| 
 | ||||
| from django.contrib.auth import models | ||||
| from django.core.management.base import BaseCommand | ||||
| 
 | ||||
| from symposion.reviews.models import ReviewAssignment | ||||
| from symposion.proposals.models import ProposalBase | ||||
| 
 | ||||
| 
 | ||||
| class Command(BaseCommand): | ||||
| 
 | ||||
|     def handle(self, *args, **options): | ||||
|         for proposal in ProposalBase.objects.filter(cancelled=0): | ||||
|             print "Creating assignments for %s" % (proposal.title,) | ||||
|             ReviewAssignment.create_assignments(proposal) | ||||
|  | @ -43,6 +43,8 @@ class ReviewAssignment(models.Model): | |||
|     AUTO_ASSIGNED_INITIAL = 0 | ||||
|     OPT_IN = 1 | ||||
|     AUTO_ASSIGNED_LATER = 2 | ||||
| 
 | ||||
|     NUM_REVIEWERS = 3 | ||||
|      | ||||
|     ORIGIN_CHOICES = [ | ||||
|         (AUTO_ASSIGNED_INITIAL, "auto-assigned, initial"), | ||||
|  | @ -66,7 +68,10 @@ class ReviewAssignment(models.Model): | |||
|                 speaker.user_id | ||||
|                 for speaker in speakers | ||||
|                 if speaker.user_id is not None | ||||
|             ] | ||||
|             ] + [ | ||||
|                 assignment.user_id | ||||
|                 for assignment in ReviewAssignment.objects.filter( | ||||
|                     proposal_id=proposal.id)] | ||||
|         ).filter( | ||||
|             groups__name="reviewers", | ||||
|         ).filter( | ||||
|  | @ -74,9 +79,11 @@ class ReviewAssignment(models.Model): | |||
|         ).annotate( | ||||
|             num_assignments=models.Count("reviewassignment") | ||||
|         ).order_by( | ||||
|             "num_assignments", | ||||
|             "num_assignments", "?", | ||||
|         ) | ||||
|         for reviewer in reviewers[:3]: | ||||
|         num_assigned_reviewers = ReviewAssignment.objects.filter( | ||||
|             proposal_id=proposal.id, opted_out=0).count() | ||||
|         for reviewer in reviewers[:max(0, cls.NUM_REVIEWERS - num_assigned_reviewers)]: | ||||
|             cls._default_manager.create( | ||||
|                 proposal=proposal, | ||||
|                 user=reviewer, | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 James Tauber
						James Tauber