|
18 | 18 | from ietf.name.models import NomineePositionStateName, FeedbackTypeName |
19 | 19 | from ietf.group.models import Group, GroupEvent |
20 | 20 | from ietf.message.models import Message |
| 21 | +from ietf.meeting.models import Meeting |
21 | 22 |
|
22 | 23 | from ietf.nomcom.decorators import nomcom_private_key_required |
23 | 24 | from ietf.nomcom.forms import (NominateForm, NominateNewPersonForm, FeedbackForm, QuestionnaireForm, |
@@ -1223,3 +1224,32 @@ def extract_email_lists(request, year): |
1223 | 1224 | 'noresp': noresp, |
1224 | 1225 | 'bypos': bypos, |
1225 | 1226 | }) |
| 1227 | + |
| 1228 | +@role_required("Nomcom Chair", "Nomcom Advisor", "Secretariat") |
| 1229 | +def eligible(request, year): |
| 1230 | + nomcom = get_nomcom_by_year(year) |
| 1231 | + |
| 1232 | + date = datetime.date.today() |
| 1233 | + previous_five = Meeting.objects.filter(type='ietf',date__lte=date).order_by('-date')[:5] |
| 1234 | + attendees = {} |
| 1235 | + potentials = set() |
| 1236 | + for m in previous_five: |
| 1237 | + registration_emails = m.meetingregistration_set.values_list('email',flat=True) |
| 1238 | + attendees[m] = Person.objects.filter(email__address__in=registration_emails).distinct() |
| 1239 | + potentials.update(attendees[m].exclude(role__group__type_id='area',role__group__state='active',role__name_id='ad').exclude(role__group__acronym='iab',role__name_id__in=['member','chair']).exclude(role__group__acronym='iaoc',role__name_id__in=['member','chair'])) |
| 1240 | + eligible_persons = [] |
| 1241 | + for p in potentials: |
| 1242 | + count = 0 |
| 1243 | + for m in previous_five: |
| 1244 | + if p in attendees[m]: |
| 1245 | + count += 1 |
| 1246 | + if count >= 3: |
| 1247 | + eligible_persons.append(p) |
| 1248 | + |
| 1249 | + eligible_persons.sort(key=lambda p: p.last_name() ) |
| 1250 | + |
| 1251 | + return render(request, 'nomcom/eligible.html', |
| 1252 | + {'nomcom':nomcom, |
| 1253 | + 'year':year, |
| 1254 | + 'eligible_persons':eligible_persons, |
| 1255 | + }) |
0 commit comments