Add person foreign key on Role to link the role and person directly instead of through Email, this will allow us to use non-personal emails on roles
- Legacy-Id: 3418
This commit is contained in:
parent
7f5fd62a3d
commit
5c5d534104
|
@ -52,7 +52,7 @@ def nomcomREDESIGN(request):
|
|||
e = n.latest_event(type="concluded")
|
||||
n.end_year = e.time.year if e else ""
|
||||
|
||||
chair = n.role_set.get(name="chair").email
|
||||
chair = n.role_set.get(name="chair").person
|
||||
announcements = Message.objects.filter(related_groups=n).order_by('-time')
|
||||
for a in announcements:
|
||||
a.to_name = address_re.sub("", a.to)
|
||||
|
|
|
@ -710,7 +710,7 @@ class BallotWrapper:
|
|||
return
|
||||
|
||||
from redesign.person.models import Person
|
||||
active_ads = Person.objects.filter(email__role__name="ad", email__role__group__state="active").distinct()
|
||||
active_ads = Person.objects.filter(role__name="ad", role__group__state="active").distinct()
|
||||
|
||||
positions = []
|
||||
seen = {}
|
||||
|
|
|
@ -313,7 +313,7 @@ def generate_approval_mail_approved(request, doc):
|
|||
made_by = "This document is the product of the %s." % doc.group.name_with_wg
|
||||
|
||||
director = doc.ad
|
||||
other_director = Person.objects.filter(email__role__group__role__email__person=director, email__role__group__role__name="ad").exclude(pk=director.pk)
|
||||
other_director = Person.objects.filter(role__group__role__person=director, role__group__role__name="ad").exclude(pk=director.pk)
|
||||
|
||||
if doc.group.type_id != "individ" and other_director:
|
||||
contacts = "The IESG contact persons are %s and %s." % (director.name, other_director[0].name)
|
||||
|
@ -497,7 +497,7 @@ def generate_issue_ballot_mailREDESIGN(request, doc):
|
|||
full_status = full_intended_status(doc.intended_std_level.name)
|
||||
status = full_status.replace("a ", "").replace("an ", "")
|
||||
|
||||
active_ads = Person.objects.filter(email__role__name="ad", email__role__group__state="active").distinct()
|
||||
active_ads = Person.objects.filter(role__name="ad", role__group__state="active").distinct()
|
||||
|
||||
e = doc.latest_event(type="started_iesg_process")
|
||||
positions = BallotPositionDocEvent.objects.filter(doc=doc, type="changed_ballot_position", time__gte=e.time).order_by("-time", '-id').select_related('ad')
|
||||
|
|
|
@ -382,7 +382,7 @@ class EditInfoFormREDESIGN(forms.Form):
|
|||
intended_std_level = forms.ModelChoiceField(IntendedStdLevelName.objects.all(), empty_label=None, required=True)
|
||||
status_date = forms.DateField(required=False, help_text="Format is YYYY-MM-DD")
|
||||
via_rfc_editor = forms.BooleanField(required=False, label="Via IRTF or RFC Editor")
|
||||
ad = forms.ModelChoiceField(Person.objects.filter(email__role__name="ad", email__role__group__state="active").order_by('name'), label="Responsible AD", empty_label=None, required=True)
|
||||
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'), label="Responsible AD", empty_label=None, required=True)
|
||||
create_in_state = forms.ModelChoiceField(IesgDocStateName.objects.filter(slug__in=("pub-req", "watching")), empty_label=None, required=True)
|
||||
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False)
|
||||
note = forms.CharField(widget=forms.Textarea, label="IESG note", required=False)
|
||||
|
|
|
@ -298,9 +298,9 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|||
def __init__(self, *args, **kwargs):
|
||||
super(SearchForm, self).__init__(*args, **kwargs)
|
||||
responsible = Document.objects.values_list('ad', flat=True).distinct()
|
||||
active_ads = list(Person.objects.filter(email__role__name="ad",
|
||||
email__role__group__type="area",
|
||||
email__role__group__state="active").distinct())
|
||||
active_ads = list(Person.objects.filter(role__name="ad",
|
||||
role__group__type="area",
|
||||
role__group__state="active").distinct())
|
||||
inactive_ads = list(Person.objects.filter(pk__in=responsible)
|
||||
.exclude(pk__in=[x.pk for x in active_ads]))
|
||||
extract_last_name = lambda x: x.name_parts()[3]
|
||||
|
@ -382,8 +382,8 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|||
docs = docs.filter(group__acronym=query["group"])
|
||||
elif by == "area":
|
||||
docs = docs.filter(Q(group__parent=query["area"]) |
|
||||
Q(ad__email__role__name="ad",
|
||||
ad__email__role__group=query["area"]))
|
||||
Q(ad__role__name="ad",
|
||||
ad__role__group=query["area"]))
|
||||
elif by == "ad":
|
||||
docs = docs.filter(ad=query["ad"])
|
||||
elif by == "state":
|
||||
|
@ -571,9 +571,9 @@ def by_ad(request, name):
|
|||
ad_name = None
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
responsible = Document.objects.values_list('ad', flat=True).distinct()
|
||||
for p in Person.objects.filter(Q(email__role__name="ad",
|
||||
email__role__group__type="area",
|
||||
email__role__group__state="active")
|
||||
for p in Person.objects.filter(Q(role__name="ad",
|
||||
role__group__type="area",
|
||||
role__group__state="active")
|
||||
| Q(pk__in=responsible)):
|
||||
if name == p.name.lower().replace(" ", "."):
|
||||
ad_id = p.id
|
||||
|
|
|
@ -1060,6 +1060,7 @@ class Role(models.Model):
|
|||
IAB_EXCUTIVE_DIRECTOR = 4
|
||||
IRTF_CHAIR = 5
|
||||
IAD_CHAIR = 6
|
||||
RSOC_CHAIR = 7
|
||||
|
||||
# This __str__ makes it odd to use as a ForeignKey.
|
||||
def __str__(self):
|
||||
|
|
|
@ -84,8 +84,8 @@ def has_role(user, role_names):
|
|||
return False
|
||||
|
||||
role_qs = {
|
||||
"Area Director": Q(email__person=person, name="ad", group__state="active"),
|
||||
"Secretariat": Q(email__person=person, name="secr", group__acronym="secretariat")
|
||||
"Area Director": Q(person=person, name="ad", group__type="area", group__state="active"),
|
||||
"Secretariat": Q(person=person, name="secr", group__acronym="secretariat")
|
||||
}
|
||||
|
||||
filter_expr = Q()
|
||||
|
@ -108,4 +108,5 @@ def role_required(*role_names):
|
|||
return decorate
|
||||
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
# overwrite group_required
|
||||
group_required = lambda *group_names: role_required(*[n.replace("Area_Director", "Area Director") for n in group_names])
|
||||
|
|
|
@ -77,7 +77,7 @@ def profile(request):
|
|||
person = None
|
||||
try:
|
||||
person = request.user.get_profile()
|
||||
roles = Role.objects.filter(email__person=person).distinct()
|
||||
roles = Role.objects.filter(person=person)
|
||||
except Person.DoesNotExist:
|
||||
pass
|
||||
|
||||
|
|
|
@ -21,14 +21,14 @@ def is_wgchair(person):
|
|||
return bool(person.wgchair_set.all())
|
||||
|
||||
def is_wgchairREDESIGN(person):
|
||||
return bool(Role.objects.filter(name="chair", group__type="wg", group__state="active", email__person=person))
|
||||
return bool(Role.objects.filter(name="chair", group__type="wg", group__state="active", person=person))
|
||||
|
||||
|
||||
def is_wgdelegate(person):
|
||||
return bool(person.wgdelegate_set.all())
|
||||
|
||||
def is_delegateREDESIGN(person):
|
||||
return bool(Role.objects.filter(name="delegate", group__type="wg", group__state="active", email__person=person))
|
||||
return bool(Role.objects.filter(name="delegate", group__type="wg", group__state="active", person=person))
|
||||
|
||||
|
||||
def is_chair_of_draft(user, draft):
|
||||
|
@ -47,7 +47,7 @@ def is_chair_of_draftREDESIGN(user, draft):
|
|||
if not user.is_authenticated() or not user.get_profile() or not draft.group:
|
||||
return False
|
||||
|
||||
return bool(Role.objects.filter(name="chair", group=draft.group, email__person=user.get_profile()))
|
||||
return bool(Role.objects.filter(name="chair", group=draft.group, person=user.get_profile()))
|
||||
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
from ietf.wgchairs.accounts import is_secretariat, get_person_for_user
|
||||
|
|
|
@ -43,27 +43,27 @@ def get_person_for_user(user):
|
|||
|
||||
|
||||
def is_areadirector(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="ad", group__state="active", group__type="area"))
|
||||
return bool(Role.objects.filter(person=person, name="ad", group__state="active", group__type="area"))
|
||||
|
||||
|
||||
def is_wgchair(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="chair", group__state="active", group__type="wg"))
|
||||
return bool(Role.objects.filter(person=person, name="chair", group__state="active", group__type="wg"))
|
||||
|
||||
|
||||
def is_wgsecretary(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="sec", group__state="active", group__type="wg"))
|
||||
return bool(Role.objects.filter(person=person, name="sec", group__state="active", group__type="wg"))
|
||||
|
||||
|
||||
def is_ietfchair(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="chair", group__acronym="ietf"))
|
||||
return bool(Role.objects.filter(person=person, name="chair", group__acronym="ietf"))
|
||||
|
||||
|
||||
def is_iabchair(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="chair", group__acronym="iab"))
|
||||
return bool(Role.objects.filter(person=person, name="chair", group__acronym="iab"))
|
||||
|
||||
|
||||
def is_iab_executive_director(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="execdir", group__acronym="iab"))
|
||||
return bool(Role.objects.filter(person=person, name="execdir", group__acronym="iab"))
|
||||
|
||||
|
||||
def can_add_outgoing_liaison(user):
|
||||
|
@ -80,15 +80,15 @@ def can_add_outgoing_liaison(user):
|
|||
|
||||
|
||||
def is_sdo_liaison_manager(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="liaiman", group__type="sdo"))
|
||||
return bool(Role.objects.filter(person=person, name="liaiman", group__type="sdo"))
|
||||
|
||||
|
||||
def is_sdo_authorized_individual(person):
|
||||
return bool(Role.objects.filter(email__person=person, name="auth", group__type="sdo"))
|
||||
return bool(Role.objects.filter(person=person, name="auth", group__type="sdo"))
|
||||
|
||||
|
||||
def is_secretariat(user):
|
||||
return user.is_authenticated() and bool(Role.objects.filter(email__person__user=user, name="secr", group__acronym="secretariat"))
|
||||
return user.is_authenticated() and bool(Role.objects.filter(person__user=user, name="secr", group__acronym="secretariat"))
|
||||
|
||||
|
||||
def can_add_incoming_liaison(user):
|
||||
|
@ -109,13 +109,13 @@ def can_add_liaison(user):
|
|||
|
||||
def is_sdo_manager_for_outgoing_liaison(person, liaison):
|
||||
if liaison.from_group and liaison.from_group.type_id == "sdo":
|
||||
return bool(liaison.from_group.role_set.filter(name="liaiman", email__person=person))
|
||||
return bool(liaison.from_group.role_set.filter(name="liaiman", person=person))
|
||||
return False
|
||||
|
||||
|
||||
def is_sdo_manager_for_incoming_liaison(person, liaison):
|
||||
if liaison.to_group and liaison.to_group.type_id == "sdo":
|
||||
return bool(liaison.to_group.role_set.filter(name="liaiman", email__person=person))
|
||||
return bool(liaison.to_group.role_set.filter(name="liaiman", person=person))
|
||||
return False
|
||||
|
||||
|
||||
|
|
|
@ -307,7 +307,7 @@ class IncomingLiaisonForm(LiaisonForm):
|
|||
if is_secretariat(self.user):
|
||||
sdos = Group.objects.filter(type="sdo", state="active")
|
||||
else:
|
||||
sdos = Group.objects.filter(type="sdo", state="active", role__email__person=self.person, role__name__in=("liaiman", "auth")).distinct()
|
||||
sdos = Group.objects.filter(type="sdo", state="active", role__person=self.person, role__name__in=("liaiman", "auth")).distinct()
|
||||
self.fields['from_field'].choices = [('sdo_%s' % i.pk, i.name) for i in sdos.order_by("name")]
|
||||
self.fields['from_field'].widget.submitter = unicode(self.person)
|
||||
|
||||
|
@ -316,7 +316,7 @@ class IncomingLiaisonForm(LiaisonForm):
|
|||
|
||||
def get_post_only(self):
|
||||
from_entity = self.get_from_entity()
|
||||
if is_secretariat(self.user) or Role.objects.filter(email__person=self.person, group=from_entity.obj, name="auth"):
|
||||
if is_secretariat(self.user) or Role.objects.filter(person=self.person, group=from_entity.obj, name="auth"):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -327,7 +327,7 @@ class IncomingLiaisonForm(LiaisonForm):
|
|||
|
||||
|
||||
def liaison_manager_sdos(person):
|
||||
return Group.objects.filter(type="sdo", state="active", role__email__person=person, role__name="liaiman").distinct()
|
||||
return Group.objects.filter(type="sdo", state="active", role__person=person, role__name="liaiman").distinct()
|
||||
|
||||
class OutgoingLiaisonForm(LiaisonForm):
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ def send_sdo_reminder(sdo):
|
|||
|
||||
subject = 'Request for update of list of authorized individuals'
|
||||
to_email = manager_role.email.address
|
||||
name = manager_role.email.get_name()
|
||||
name = manager_role.person.name
|
||||
|
||||
authorized_list = role_persons_with_fixed_email(sdo, "auth")
|
||||
body = render_to_string('liaisons/sdo_reminder.txt', dict(
|
||||
|
|
|
@ -47,6 +47,7 @@ def make_liaison_models():
|
|||
Role.objects.create(
|
||||
name_id="liaiman",
|
||||
group=sdo,
|
||||
person=p,
|
||||
email=email)
|
||||
|
||||
# authorized individual
|
||||
|
@ -61,6 +62,7 @@ def make_liaison_models():
|
|||
Role.objects.create(
|
||||
name_id="auth",
|
||||
group=sdo,
|
||||
person=p,
|
||||
email=email)
|
||||
|
||||
mars_group = Group.objects.get(acronym="mars")
|
||||
|
|
|
@ -29,10 +29,10 @@ class FakePerson(object):
|
|||
# fine-grained enough so the form code also has some rules
|
||||
|
||||
def all_sdo_managers():
|
||||
return [proxy_personify_role(r) for r in Role.objects.filter(group__type="sdo", name="liaiman").select_related("email").distinct()]
|
||||
return [proxy_personify_role(r) for r in Role.objects.filter(group__type="sdo", name="liaiman").select_related("person").distinct()]
|
||||
|
||||
def role_persons_with_fixed_email(group, role_name):
|
||||
return [proxy_personify_role(r) for r in Role.objects.filter(group=group, name=role_name).select_related("email").distinct()]
|
||||
return [proxy_personify_role(r) for r in Role.objects.filter(group=group, name=role_name).select_related("person").distinct()]
|
||||
|
||||
class Entity(object):
|
||||
|
||||
|
@ -139,7 +139,7 @@ class AreaEntity(Entity):
|
|||
|
||||
def needs_approval(self, person=None):
|
||||
# Check if person is an area director
|
||||
if self.obj.role_set.filter(email__person=person, name="ad"):
|
||||
if self.obj.role_set.filter(person=person, name="ad"):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -177,7 +177,7 @@ class WGEntity(Entity):
|
|||
|
||||
def needs_approval(self, person=None):
|
||||
# Check if person is director of this wg area
|
||||
if self.obj.parent and self.obj.parent.role_set.filter(email__person=person, name="ad"):
|
||||
if self.obj.parent and self.obj.parent.role_set.filter(person=person, name="ad"):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -202,7 +202,7 @@ class SDOEntity(Entity):
|
|||
return [p for p in role_persons_with_fixed_email(self.obj, "liaiman") if p != person]
|
||||
|
||||
def post_only(self, person, user):
|
||||
if is_secretariat(user) or self.obj.role_set.filter(email__person=person, name="auth"):
|
||||
if is_secretariat(user) or self.obj.role_set.filter(person=person, name="auth"):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -297,11 +297,11 @@ class AreaEntityManager(EntityManager):
|
|||
return AreaEntity(name=obj.area_acronym.name, obj=obj)
|
||||
|
||||
def can_send_on_behalf(self, person):
|
||||
query_filter = dict(role__email__person=person, role__name="ad")
|
||||
query_filter = dict(role__person=person, role__name="ad")
|
||||
return self.get_managed_list(query_filter)
|
||||
|
||||
def can_approve_list(self, person):
|
||||
query_filter = dict(role__email__person=person, role__name="ad")
|
||||
query_filter = dict(role__person=person, role__name="ad")
|
||||
return self.get_managed_list(query_filter)
|
||||
|
||||
|
||||
|
@ -328,12 +328,12 @@ class WGEntityManager(EntityManager):
|
|||
return WGEntity(name=obj.group_acronym.name, obj=obj)
|
||||
|
||||
def can_send_on_behalf(self, person):
|
||||
wgs = Group.objects.filter(role__email__person=person, role__name__in=("chair", "secretary")).values_list('pk', flat=True)
|
||||
wgs = Group.objects.filter(role__person=person, role__name__in=("chair", "secretary")).values_list('pk', flat=True)
|
||||
query_filter = {'pk__in': wgs}
|
||||
return self.get_managed_list(query_filter)
|
||||
|
||||
def can_approve_list(self, person):
|
||||
query_filter = dict(parent__role__email__person=person, parent__role__name="ad")
|
||||
query_filter = dict(parent__role__person=person, parent__role__name="ad")
|
||||
return self.get_managed_list(query_filter)
|
||||
|
||||
|
||||
|
|
|
@ -11,10 +11,9 @@ from ietf.utils.test_utils import login_testing_unauthorized
|
|||
from ietf.utils.test_runner import mail_outbox
|
||||
from ietf.utils.test_data import make_test_data
|
||||
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
from redesign.person.models import Person, Email
|
||||
from redesign.group.models import Group, Role
|
||||
from redesign.doc.models import Document
|
||||
from redesign.person.models import Person, Email
|
||||
from redesign.group.models import Group, Role
|
||||
from redesign.doc.models import Document
|
||||
|
||||
class SubmitTestCase(django.test.TestCase):
|
||||
fixtures = ['names']
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
<h1>IAB/IESG Nominating Committee</h1>
|
||||
|
||||
<h3>Current Committee Chair: <a href="mailto:{{ curr_chair.address }}">{{ curr_chair.get_name }}</a></h3>
|
||||
<h3>Current Committee Chair: <a href="mailto:{{ curr_chair.email_address }}">{{ curr_chair.name }}</a></h3>
|
||||
|
||||
{% for regime in regimes %}
|
||||
<hr>
|
||||
<h1>Messages from {{ regime.group.start_year }} - {{ regime.group.end_year }}</h1>
|
||||
<h4>Committee Chair: <a href="mailto:{{ regime.chair.address }}">{{ regime.chair.get_name }}</a></h4>
|
||||
<h4>Committee Chair: <a href="mailto:{{ regime.chair.email_address }}">{{ regime.chair.name }}</a></h4>
|
||||
<table class="ietf-table">
|
||||
<tr>
|
||||
<th width="10%">Date</th>
|
||||
|
|
|
@ -69,6 +69,7 @@ def make_test_data():
|
|||
Role.objects.create(
|
||||
name_id="ad",
|
||||
group=area,
|
||||
person=p,
|
||||
email=email)
|
||||
|
||||
# create a bunch of ads for swarm tests
|
||||
|
@ -86,6 +87,7 @@ def make_test_data():
|
|||
Role.objects.create(
|
||||
name_id="ad",
|
||||
group=area,
|
||||
person=p,
|
||||
email=email)
|
||||
|
||||
# group chair
|
||||
|
@ -101,6 +103,7 @@ def make_test_data():
|
|||
Role.objects.create(
|
||||
name_id="chair",
|
||||
group=group,
|
||||
person=p,
|
||||
email=wgchair,
|
||||
)
|
||||
|
||||
|
@ -117,6 +120,7 @@ def make_test_data():
|
|||
Role.objects.create(
|
||||
name_id="delegate",
|
||||
group=group,
|
||||
person=p,
|
||||
email=email,
|
||||
)
|
||||
|
||||
|
@ -132,6 +136,7 @@ def make_test_data():
|
|||
Role.objects.create(
|
||||
name_id="secr",
|
||||
group=secretariat,
|
||||
person=p,
|
||||
email=email,
|
||||
)
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ def is_area_director_for_group(person, group):
|
|||
return bool(group.area.area.areadirector_set.filter(person=person).count())
|
||||
|
||||
def is_area_director_for_groupREDESIGN(person, group):
|
||||
return bool(Role.objects.filter(group=group.parent, email__person=person, name="ad"))
|
||||
return bool(Role.objects.filter(group=group.parent, person=person, name="ad"))
|
||||
|
||||
|
||||
def is_group_chair(person, group):
|
||||
|
@ -20,14 +20,14 @@ def is_group_chair(person, group):
|
|||
return False
|
||||
|
||||
def is_group_chairREDESIGN(person, group):
|
||||
return bool(Role.objects.filter(group=group, email__person=person, name="chair"))
|
||||
return bool(Role.objects.filter(group=group, person=person, name="chair"))
|
||||
|
||||
|
||||
def is_group_delegate(person, group):
|
||||
return bool(group.wgdelegate_set.filter(person=person).count())
|
||||
|
||||
def is_group_delegateREDESIGN(person, group):
|
||||
return bool(Role.objects.filter(group=group, email__person=person, name="delegate"))
|
||||
return bool(Role.objects.filter(group=group, person=person, name="delegate"))
|
||||
|
||||
|
||||
def get_person_for_user(user):
|
||||
|
|
|
@ -264,9 +264,9 @@ class AddDelegateForm(RelatedWGForm):
|
|||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
created = False
|
||||
e = Email.objects.get(address=self.cleaned_data.get('email'))
|
||||
if not Role.objects.filter(name="delegate", group=self.wg, email=e):
|
||||
if not Role.objects.filter(name="delegate", group=self.wg, person=person, email=e):
|
||||
delegate, created = Role.objects.get_or_create(
|
||||
name=RoleName.objects.get(slug="delegate"), group=self.wg, email=e)
|
||||
name=RoleName.objects.get(slug="delegate"), group=self.wg, person=e.person, email=e)
|
||||
else:
|
||||
(delegate, created) = WGDelegate.objects.get_or_create(wg=self.wg,
|
||||
person=person)
|
||||
|
|
|
@ -47,10 +47,7 @@ class ProtoWriteUp(models.Model):
|
|||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
from redesign.group.models import Role
|
||||
class WGDelegateProxy(Role):
|
||||
#person = models.ForeignKey(PersonOrOrgInfo)
|
||||
@property
|
||||
def person(self):
|
||||
return self.email.person
|
||||
#person = models.ForeignKey(PersonOrOrgInfo) # same name
|
||||
#wg = models.ForeignKey(IETFWG)
|
||||
@property
|
||||
def wg(self):
|
||||
|
|
|
@ -383,7 +383,7 @@ class InternetDraft(Document):
|
|||
elif self.ad:
|
||||
# return area for AD
|
||||
try:
|
||||
area = Group.objects.get(role__name="ad", role__email=self.ad, state="active")
|
||||
area = Group.objects.get(role__name="ad", role__person=self.ad, state="active")
|
||||
return Area().from_object(area)
|
||||
except Group.DoesNotExist:
|
||||
return None
|
||||
|
@ -566,7 +566,7 @@ class InternetDraft(Document):
|
|||
# return remarks
|
||||
def active_positions(self):
|
||||
"""Returns a list of dicts, with AD and Position tuples"""
|
||||
active_ads = Person.objects.filter(email__role__name="ad", email__role__group__state="active")
|
||||
active_ads = Person.objects.filter(role__name="ad", role__group__state="active")
|
||||
res = []
|
||||
def add(ad, pos):
|
||||
from person.proxy import IESGLogin as IESGLoginProxy
|
||||
|
|
|
@ -22,10 +22,10 @@ class GroupAdmin(admin.ModelAdmin):
|
|||
raw_id_fields = ["charter", "parent", "ad"]
|
||||
|
||||
def role_list(self, obj):
|
||||
roles = Role.objects.filter(group=obj).order_by("name", "email__person__name").select_related('email')
|
||||
roles = Role.objects.filter(group=obj).order_by("name", "person__name").select_related('person')
|
||||
res = []
|
||||
for r in roles:
|
||||
res.append(u'<a href="../../person/person/%s/">%s</a> (<a href="../../group/role/%s/">%s)' % (r.email.person.pk, escape(r.email.person.name), r.pk, r.name.name))
|
||||
res.append(u'<a href="../../person/person/%s/">%s</a> (<a href="../../group/role/%s/">%s)' % (r.person.pk, escape(r.person.name), r.pk, r.name.name))
|
||||
return ", ".join(res)
|
||||
role_list.short_description = "Persons"
|
||||
role_list.allow_tags = True
|
||||
|
@ -98,11 +98,12 @@ admin.site.register(Group, GroupAdmin)
|
|||
admin.site.register(GroupHistory)
|
||||
|
||||
class RoleAdmin(admin.ModelAdmin):
|
||||
list_display = ["name", "email", "group"]
|
||||
list_display = ["name", "person", "email", "group"]
|
||||
list_display_links = ["name"]
|
||||
search_fields = ["name", "email"]
|
||||
search_fields = ["name", "person", "email"]
|
||||
list_filter = ["name"]
|
||||
ordering = ["id"]
|
||||
raw_id_fields = ["email", "group"]
|
||||
raw_id_fields = ["email", "person", "group"]
|
||||
|
||||
admin.site.register(Role, RoleAdmin)
|
||||
admin.site.register(RoleHistory, RoleAdmin)
|
||||
|
|
|
@ -84,6 +84,7 @@ class GroupEvent(models.Model):
|
|||
class Role(models.Model):
|
||||
name = models.ForeignKey(RoleName)
|
||||
group = models.ForeignKey(Group)
|
||||
person = models.ForeignKey(Person)
|
||||
email = models.ForeignKey(Email, help_text="Email address used by person for this role")
|
||||
def __unicode__(self):
|
||||
return u"%s is %s in %s" % (self.email.get_name(), self.name.name, self.group.acronym or self.group.name)
|
||||
|
@ -96,6 +97,7 @@ class RoleHistory(models.Model):
|
|||
# GroupHistory instead
|
||||
name = models.ForeignKey(RoleName)
|
||||
group = models.ForeignKey(GroupHistory)
|
||||
person = models.ForeignKey(Person)
|
||||
email = models.ForeignKey(Email, help_text="Email address used by person for this role")
|
||||
def __unicode__(self):
|
||||
return u"%s is %s in %s" % (self.email.get_name(), self.name.name, self.group.acronym)
|
||||
|
|
|
@ -51,7 +51,7 @@ for o in WGDelegate.objects.all().order_by("pk"):
|
|||
group = Group.objects.get(acronym=o.wg.group_acronym.acronym)
|
||||
email = get_or_create_email(o, create_fake=False)
|
||||
|
||||
Role.objects.get_or_create(name=delegate_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=delegate_role, group=group, person=email.person, email=email)
|
||||
|
||||
# SDOAuthorizedIndividual
|
||||
for o in SDOAuthorizedIndividual.objects.all().order_by("pk"):
|
||||
|
@ -60,7 +60,7 @@ for o in SDOAuthorizedIndividual.objects.all().order_by("pk"):
|
|||
group = Group.objects.get(name=o.sdo.sdo_name, type="sdo")
|
||||
email = get_or_create_email(o, create_fake=False)
|
||||
|
||||
Role.objects.get_or_create(name=authorized_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=authorized_role, group=group, person=email.person, email=email)
|
||||
|
||||
# LiaisonManagers
|
||||
for o in LiaisonManagers.objects.all().order_by("pk"):
|
||||
|
@ -69,7 +69,7 @@ for o in LiaisonManagers.objects.all().order_by("pk"):
|
|||
group = Group.objects.get(name=o.sdo.sdo_name, type="sdo")
|
||||
email = Email.objects.get(address__iexact=o.person.email(priority=o.email_priority)[1])
|
||||
|
||||
Role.objects.get_or_create(name=liaison_manager_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=liaison_manager_role, group=group, person=email.person, email=email)
|
||||
|
||||
# Role
|
||||
for o in OldRole.objects.all().order_by('pk'):
|
||||
|
@ -81,6 +81,9 @@ for o in OldRole.objects.all().order_by('pk'):
|
|||
|
||||
print "importing Role", o.id, o.role_name
|
||||
|
||||
email = get_or_create_email(o, create_fake=False)
|
||||
official_email = email
|
||||
|
||||
if o.role_name.endswith("Executive Director"):
|
||||
acronym = acronym[:-(len("Executive Director") + 1)]
|
||||
role = exec_director_role
|
||||
|
@ -88,11 +91,20 @@ for o in OldRole.objects.all().order_by('pk'):
|
|||
if o.id == OldRole.IAD_CHAIR:
|
||||
acronym = "ietf"
|
||||
role = adm_director_role
|
||||
official_email, _ = Email.objects.get_or_create(address="iad@ietf.org")
|
||||
|
||||
if o.id == OldRole.IETF_CHAIR:
|
||||
official_email, _ = Email.objects.get_or_create(address="chair@ietf.org")
|
||||
|
||||
if o.id == OldRole.IAB_CHAIR:
|
||||
official_email, _ = Email.objects.get_or_create(address="iab-chair@ietf.org")
|
||||
|
||||
if o.id == OldRole.RSOC_CHAIR:
|
||||
official_email, _ = Email.objects.get_or_create(address="rsoc-chair@iab.org")
|
||||
|
||||
group = Group.objects.get(acronym=acronym)
|
||||
email = get_or_create_email(o, create_fake=False)
|
||||
|
||||
Role.objects.get_or_create(name=role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=role, group=group, person=email.person, email=official_email)
|
||||
|
||||
# WGEditor
|
||||
for o in WGEditor.objects.all():
|
||||
|
@ -102,7 +114,7 @@ for o in WGEditor.objects.all():
|
|||
email = get_or_create_email(o, create_fake=True)
|
||||
group = Group.objects.get(acronym=acronym)
|
||||
|
||||
Role.objects.get_or_create(name=editor_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=editor_role, group=group, person=email.person, email=email)
|
||||
|
||||
# WGSecretary
|
||||
for o in WGSecretary.objects.all():
|
||||
|
@ -112,7 +124,7 @@ for o in WGSecretary.objects.all():
|
|||
email = get_or_create_email(o, create_fake=True)
|
||||
group = Group.objects.get(acronym=acronym)
|
||||
|
||||
Role.objects.get_or_create(name=secretary_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=secretary_role, group=group, person=email.person, email=email)
|
||||
|
||||
# WGTechAdvisor
|
||||
for o in WGTechAdvisor.objects.all():
|
||||
|
@ -122,7 +134,7 @@ for o in WGTechAdvisor.objects.all():
|
|||
email = get_or_create_email(o, create_fake=True)
|
||||
group = Group.objects.get(acronym=acronym)
|
||||
|
||||
Role.objects.get_or_create(name=techadvisor_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=techadvisor_role, group=group, person=email.person, email=email)
|
||||
|
||||
# WGChair
|
||||
for o in WGChair.objects.all():
|
||||
|
@ -149,7 +161,7 @@ for o in WGChair.objects.all():
|
|||
|
||||
email = get_or_create_email(o, create_fake=True)
|
||||
|
||||
Role.objects.get_or_create(name=chair_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=chair_role, group=group, person=email.person, email=email)
|
||||
|
||||
# IRTFChair
|
||||
for o in IRTFChair.objects.all():
|
||||
|
@ -159,9 +171,10 @@ for o in IRTFChair.objects.all():
|
|||
email = get_or_create_email(o, create_fake=True)
|
||||
group = Group.objects.get(acronym=acronym)
|
||||
|
||||
Role.objects.get_or_create(name=chair_role, group=group, email=email)
|
||||
Role.objects.get_or_create(name=chair_role, group=group, person=email.person, email=email)
|
||||
|
||||
# NomCom chairs
|
||||
official_email, _ = Email.objects.get_or_create(address="nomcom-chair@ietf.org")
|
||||
nomcom_groups = list(Group.objects.filter(acronym__startswith="nomcom").exclude(acronym="nomcom"))
|
||||
for o in ChairsHistory.objects.filter(chair_type=OldRole.NOMCOM_CHAIR):
|
||||
print "importing NOMCOM chair", o
|
||||
|
@ -170,8 +183,8 @@ for o in ChairsHistory.objects.filter(chair_type=OldRole.NOMCOM_CHAIR):
|
|||
break
|
||||
|
||||
email = get_or_create_email(o, create_fake=False)
|
||||
|
||||
Role.objects.get_or_create(name=chair_role, group=g, email=email)
|
||||
|
||||
Role.objects.get_or_create(name=chair_role, group=g, person=email.person, email=official_email)
|
||||
|
||||
# IESGLogin
|
||||
for o in IESGLogin.objects.all():
|
||||
|
@ -188,8 +201,8 @@ for o in IESGLogin.objects.all():
|
|||
email = get_or_create_email(o, create_fake=False)
|
||||
# current ADs are imported below
|
||||
if email and o.user_level == IESGLogin.SECRETARIAT_LEVEL:
|
||||
if not Role.objects.filter(name=secretary_role, email=email):
|
||||
Role.objects.create(name=secretary_role, group=Group.objects.get(acronym="secretariat"), email=email)
|
||||
if not Role.objects.filter(name=secretary_role, person=email.person):
|
||||
Role.objects.create(name=secretary_role, group=Group.objects.get(acronym="secretariat"), person=email.person, email=email)
|
||||
|
||||
# AreaDirector
|
||||
for o in AreaDirector.objects.all():
|
||||
|
@ -209,13 +222,13 @@ for o in AreaDirector.objects.all():
|
|||
role_type = inactive_area_director_role
|
||||
|
||||
r = Role.objects.filter(name__in=(area_director_role, inactive_area_director_role),
|
||||
email=email)
|
||||
person=email.person)
|
||||
if r and r[0].group == "iesg":
|
||||
r[0].group = area
|
||||
r[0].name = role_type
|
||||
r[0].save()
|
||||
else:
|
||||
Role.objects.get_or_create(name=role_type, group=area, email=email)
|
||||
Role.objects.get_or_create(name=role_type, group=area, person=email.person, email=email)
|
||||
|
||||
# IESGHistory
|
||||
emails_for_time = {}
|
||||
|
@ -241,13 +254,13 @@ for o in IESGHistory.objects.all().order_by('meeting__start_date', 'pk'):
|
|||
emails_for_time[key].append(email)
|
||||
|
||||
history = find_history_active_at(area, meeting_time)
|
||||
if (history and history.rolehistory_set.filter(email__person=email.person) or
|
||||
not history and area.role_set.filter(email__person=email.person)):
|
||||
if (history and history.rolehistory_set.filter(person=email.person) or
|
||||
not history and area.role_set.filter(person=email.person)):
|
||||
continue
|
||||
|
||||
if history and history.time == meeting_time:
|
||||
# add to existing GroupHistory
|
||||
RoleHistory.objects.create(name=area_director_role, group=history, email=email)
|
||||
RoleHistory.objects.create(name=area_director_role, group=history, person=email.person, email=email)
|
||||
else:
|
||||
existing = history if history else area
|
||||
|
||||
|
@ -271,5 +284,5 @@ for o in IESGHistory.objects.all().order_by('meeting__start_date', 'pk'):
|
|||
# we need to add all emails for this area at this time
|
||||
# because the new GroupHistory resets the known roles
|
||||
for e in emails_for_time[key]:
|
||||
RoleHistory.objects.get_or_create(name=area_director_role, group=h, email=e)
|
||||
RoleHistory.objects.get_or_create(name=area_director_role, group=h, person=e.person, email=e)
|
||||
|
||||
|
|
|
@ -48,10 +48,10 @@ class IESGLogin(Person):
|
|||
def __unicode__(self):
|
||||
return self.name
|
||||
def is_current_ad(self):
|
||||
return self in Person.objects.filter(email__role__name="ad", email__role__group__state="active").distinct()
|
||||
return self in Person.objects.filter(role__name="ad", role__group__state="active").distinct()
|
||||
@staticmethod
|
||||
def active_iesg():
|
||||
return IESGLogin.objects.filter(email__role__name="ad", email__role__group__state="active").distinct().order_by('name')
|
||||
return IESGLogin.objects.filter(role__name="ad", role__group__state="active").distinct().order_by('name')
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
|
|
@ -3,7 +3,7 @@ from django.db.models.query import QuerySet
|
|||
|
||||
def proxy_personify_role(role):
|
||||
"""Turn role into person with email() method using email from role."""
|
||||
p = role.email.person
|
||||
p = role.person
|
||||
p.email = lambda: (p.name, role.email.address)
|
||||
return p
|
||||
|
||||
|
|
Loading…
Reference in a new issue