diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index 0835e9179..8739766ff 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -278,6 +278,7 @@ def profile(request): 'roles': roles, 'emails': emails, 'new_email_forms': new_email_forms, + 'settings':settings, }) def confirm_new_email(request, auth): diff --git a/ietf/person/templatetags/__init__.py b/ietf/person/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/person/templatetags/person_filters.py b/ietf/person/templatetags/person_filters.py new file mode 100644 index 000000000..21bdcb700 --- /dev/null +++ b/ietf/person/templatetags/person_filters.py @@ -0,0 +1,16 @@ +# Copyright The IETF Trust 2007, All Rights Reserved + +import datetime + +from django import template + +import debug # pyflakes:ignore + +from ietf.person.utils import is_nomcom_eligible as util_is_nomcom_eligible + +register = template.Library() + +@register.filter +def is_nomcom_eligible(person, date=datetime.date.today()): + return util_is_nomcom_eligible(person,date) + diff --git a/ietf/person/utils.py b/ietf/person/utils.py index 6bdb26abe..59f83ac07 100755 --- a/ietf/person/utils.py +++ b/ietf/person/utils.py @@ -11,8 +11,9 @@ from django.contrib.auth.models import User import debug # pyflakes:ignore from ietf.nomcom.models import Nominee -from ietf.person.models import Person +from ietf.person.models import Person, Email from ietf.utils.mail import send_mail +from ietf.meeting.models import Meeting def merge_persons(source, target, file=sys.stdout, verbose=False): changes = [] @@ -181,3 +182,18 @@ def determine_merge_order(source,target): if source.user and target.user: source,target = sorted([source,target],key=lambda a: a.user.last_login if a.user.last_login else datetime.datetime.min) return source,target + +def attended_ietf_meetings(person): + return Meeting.objects.filter(type='ietf',meetingregistration__email__in=Email.objects.filter(person=person).values_list('address',flat=True)) + +def attended_in_last_five_ietf_meetings(person, date=datetime.datetime.today()): + previous_five = Meeting.objects.filter(type='ietf',date__lte=date).order_by('-date')[:5] + attended = attended_ietf_meetings(person) + return set(previous_five).intersection(attended) + +def is_nomcom_eligible(person, date=datetime.date.today()): + attended = attended_in_last_five_ietf_meetings(person, date) + is_iesg = person.role_set.filter(group__type_id='area',group__state='active',name_id='ad').exists() + is_iab = person.role_set.filter(group__acronym='iab',name_id__in=['member','chair']).exists() + is_iaoc = person.role_set.filter(group__acronym='iaoc',name_id__in=['member','chair']).exists() + return len(attended)>=3 and not (is_iesg or is_iab or is_iaoc) diff --git a/ietf/templates/registration/edit_profile.html b/ietf/templates/registration/edit_profile.html index 3b56a7ff1..4b79c7e8a 100644 --- a/ietf/templates/registration/edit_profile.html +++ b/ietf/templates/registration/edit_profile.html @@ -4,6 +4,8 @@ {% load widget_tweaks bootstrap3 %} +{% load person_filters %} + {% block title %}Profile for {{ user }}{% endblock %} {% block content %} @@ -29,6 +31,12 @@ </div> </div> + <div class="form-group"> + <label class="col-sm-2 control-label">Nomcom Eligible</label> + <div class="col-sm-1 form-control-static">{{person|is_nomcom_eligible|yesno:'Yes,No,No'}}</div> + <div class="col-sm-9 alert alert-info form-control-static">This calculation is EXPERIMENTAL.<br/>If you believe it is incorrect, make sure you've added all the email addresses you've registered for IETF meetings with to the list below.<br/>If you've done so and the calculation is still incorrect, please send a note to <a href="{{settings.SECRETARIAT_TICKET_EMAIL}}">{{settings.SECRETARIAT_TICKET_EMAIL}}</a>.<br/>See <a href="{% url 'ietf.doc.views_doc.document_main' name='rfc3777' %}">RFC 3777</a> for eligibility requirements.</div> + </div> + <div class="form-group"> <label class="col-sm-2 control-label">Email addresses</label> <div class="col-sm-10">