Get SDOs the user can send liaison on behalf of. See #345
- Legacy-Id: 2335
This commit is contained in:
parent
9923b59d2e
commit
9084150f53
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in a new issue