Get SDOs the user can send liaison on behalf of. See #345

- Legacy-Id: 2335
This commit is contained in:
Emilio A. Sánchez López 2010-07-16 08:33:06 +00:00
parent 9923b59d2e
commit 9084150f53
3 changed files with 73 additions and 4 deletions

View file

@ -33,7 +33,7 @@ def is_iab_executive_director(person):
return has_role(person, Role.IAB_EXCUTIVE_DIRECTOR)
def can_add_liaison(user):
def can_add_outgoing_liaison(user):
person = get_person_for_user(user)
if not person:
return False
@ -43,3 +43,26 @@ def can_add_liaison(user):
is_iabchair(person) or is_iab_executive_director(person)):
return True
return False
def is_sdo_liaison_manager(person):
return bool(person.liaisonmanagers_set.all())
def is_sdo_authorized_individual(person):
return bool(person.sdoauthorizedindividual_set.all())
def can_add_incoming_liaison(user):
person = get_person_for_user(user)
if not person:
return False
if (is_sdo_liaison_manager(person) or
is_sdo_authorized_individual(person)):
return True
return False
def can_add_liaison(user):
return can_add_incoming_liaison(user) or can_add_outgoing_liaison(user)

View file

@ -2,7 +2,8 @@ from django import forms
from django.template.loader import render_to_string
from ietf.liaisons.models import LiaisonDetail
from ietf.liaisons.accounts import get_person_for_user
from ietf.liaisons.accounts import (can_add_outgoing_liaison, can_add_incoming_liaison,
get_person_for_user)
class LiaisonForm(forms.ModelForm):
@ -23,10 +24,23 @@ class LiaisonForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
super(LiaisonForm, self).__init__(*args, **kwargs)
self.person = get_person_for_user(user)
self.set_from_field()
self.set_replyto_field()
self.set_organization_field()
def __unicode__(self):
return self.as_div()
def set_from_field(self):
assert NotImplemented
def set_replyto_field(self):
email = self.person.email()
self.fields['replyto'].initial = email and email[1]
def set_organization_field(self):
assert NotImplemented
def as_div(self):
return render_to_string('liaisons/liaisonform.html', {'form': self})
@ -43,3 +57,35 @@ class LiaisonForm(forms.ModelForm):
# if there is no fields in this fieldset, we continue to next fieldset
continue
yield fieldset_dict
class IncomingLiaisonForm(LiaisonForm):
def set_from_field(self):
sdo_managed = [i.sdo for i in self.person.liaisonmanagers_set.all()]
sdo_authorized = [i.sdo for i in self.person.sdoauthorizedindividual_set.all()]
sdos = set(sdo_managed).union(sdo_authorized)
self.fields['from_field'].choices = [(i.pk, '%s (%s)' % (i.sdo_name, self.person)) for i in sdos]
def set_organization_field(self):
organizations = ['The IETF', 'The IESG', 'The IAB']
organizations.append('-- IETF Areas ---')
organizations.append('-- IETF Working Groups ---')
class OutgoingLiaisonForm(LiaisonForm):
def set_from_field(self):
pass
def set_organization_field(self):
pass
def liaison_form_factory(request):
user = request.user
if can_add_incoming_liaison(user):
return IncomingLiaisonForm(user)
elif can_add_outgoing_liaison(user):
return OutgoingLiaisonForm(user)
return None

View file

@ -3,12 +3,12 @@ from django.shortcuts import render_to_response
from django.template import RequestContext
from ietf.liaisons.decorators import can_submit_liaison
from ietf.liaisons.forms import LiaisonForm
from ietf.liaisons.forms import liaison_form_factory
@can_submit_liaison
def add_liaison(request):
form = LiaisonForm(request.user)
form = liaison_form_factory(request)
return render_to_response(
'liaisons/liaisondetail_edit.html',