Save from of incoming liaisons. Manage CCs depending of sending entity. Fixes #345

- Legacy-Id: 2377
This commit is contained in:
Emilio A. Sánchez López 2010-07-23 10:04:13 +00:00
parent 61a512dcaa
commit eec8de1efe
3 changed files with 65 additions and 21 deletions

View file

@ -8,7 +8,7 @@ from django.template.loader import render_to_string
from ietf.liaisons.accounts import (can_add_outgoing_liaison, can_add_incoming_liaison,
get_person_for_user)
from ietf.liaisons.models import LiaisonDetail, Uploads
from ietf.liaisons.utils import IETFHierarchyManager
from ietf.liaisons.utils import IETFHM
from ietf.liaisons.widgets import (FromWidget, ReadOnlyWidget, ButtonWidget,
ShowAttachmentsWidget)
@ -56,7 +56,7 @@ class LiaisonForm(forms.ModelForm):
if kwargs.get('data', None):
kwargs['data'].update({'person': self.person.pk})
super(LiaisonForm, self).__init__(*args, **kwargs)
self.hm = IETFHierarchyManager()
self.hm = IETFHM
self.set_from_field()
self.set_replyto_field()
self.set_organization_field()
@ -123,7 +123,11 @@ class LiaisonForm(forms.ModelForm):
self._errors['attachments'] = ErrorList([u'You must provide a body or attachment files'])
return self.cleaned_data
def get_organization(self):
def get_from_entity(self):
organization_key = self.cleaned_data.get('from_field')
return self.hm.get_entity_by_key(organization_key)
def get_to_entity(self):
organization_key = self.cleaned_data.get('organization')
return self.hm.get_entity_by_key(organization_key)
@ -132,7 +136,9 @@ class LiaisonForm(forms.ModelForm):
liaison = super(LiaisonForm, self).save(*args, **kwargs)
liaison.submitted_date = now
liaison.last_modified_date = now
organization = self.get_organization()
from_entity = self.get_from_entity()
liaison.from_raw_body = from_entity.name
organization = self.get_to_entity()
liaison.to_body = organization.name
liaison.to_poc = ', '.join([i.email()[1] for i in organization.get_poc()])
liaison.submitter_name, liaison.submitter_email = self.person.email()
@ -166,11 +172,11 @@ class IncomingLiaisonForm(LiaisonForm):
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, i.sdo_name) for i in sdos]
self.fields['from_field'].choices = [('sdo_%s' % i.pk, i.sdo_name) for i in sdos]
self.fields['from_field'].widget.submitter = unicode(self.person)
def set_organization_field(self):
self.fields['organization'].choices = self.hm.get_all_decorated_entities()
self.fields['organization'].choices = self.hm.get_all_incoming_entities()
class OutgoingLiaisonForm(LiaisonForm):

View file

@ -1,4 +1,5 @@
from ietf.idtracker.models import Area, IETFWG
from ietf.liaisons.models import SDOs
IETFCHAIR = {'name': u'The IETF Chair', 'address': u'chair@ietf.org'}
IESG = {'name': u'The IESG', 'address': u'iesg@ietf.org'}
@ -30,7 +31,7 @@ class IETFEntity(object):
return [self.poc]
return self.poc
def get_cc(self):
def get_cc(self, person=None):
if not isinstance(self.cc, list):
return [self.cc]
return self.cc
@ -41,7 +42,7 @@ class AreaEntity(IETFEntity):
def get_poc(self):
return [i.person for i in self.obj.areadirector_set.all()]
def get_cc(self):
def get_cc(self, person=None):
return [FakePerson(**IETFCHAIR)]
@ -50,7 +51,7 @@ class WGEntity(IETFEntity):
def get_poc(self):
return [i.person for i in self.obj.wgchair_set.all()]
def get_cc(self):
def get_cc(self, person=None):
result = [i.person for i in self.obj.area_directors()]
if self.obj.email_address:
result.append(FakePerson(name ='%s Discussion List' % self.obj.group_acronym.name,
@ -58,6 +59,21 @@ class WGEntity(IETFEntity):
return result
class SDOEntity(IETFEntity):
def get_poc(self):
return []
def get_cc(self, person=None):
return []
def get_from_cc(self, person=None):
manager = self.obj.liaisonmanager()
if manager and manager.person!=person:
return [manager.person]
return []
class IETFEntityManager(object):
def __init__(self, pk=None, name=None, queryset=None, poc=None, cc=None):
@ -114,6 +130,26 @@ class WGEntityManager(IETFEntityManager):
return WGEntity(name=obj.group_acronym.name, obj=obj)
class SDOEntityManager(IETFEntityManager):
def __init__(self, pk=None, name=None, queryset=None, poc=None):
super(SDOEntityManager, self).__init__(pk, name, queryset, poc)
if self.queryset == None:
self.queryset = SDOs.objects.all()
def get_managed_list(self):
return [(u'%s_%s' % (self.pk, i.pk), i.sdo_name) for i in self.queryset.order_by('sdo_name')]
def get_entity(self, pk=None):
if not pk:
return None
try:
obj = self.queryset.get(pk=pk)
except self.queryset.model.DoesNotExist:
return None
return SDOEntity(name=obj.sdo_name, obj=obj)
class IETFHierarchyManager(object):
def __init__(self):
@ -129,6 +165,7 @@ class IETFHierarchyManager(object):
cc=FakePerson(**IAB)),
'area': AreaEntityManager(pk='area', name=u'IETF Areas'),
'wg': WGEntityManager(pk='wg', name=u'IETF Working Groups'),
'sdo': SDOEntityManager(pk='sdo', name=u'Standards Development Organizations'),
}
def get_entity_by_key(self, entity_id):
@ -147,7 +184,7 @@ class IETFHierarchyManager(object):
entities += manager.get_managed_list()
return entities
def get_all_decorated_entities(self):
def get_all_incoming_entities(self):
entities = []
results = []
for key in ['ietf', 'iesg', 'iab']:
@ -156,3 +193,9 @@ class IETFHierarchyManager(object):
entities.append(('IETF Areas', self.managers['area'].get_managed_list()))
entities.append(('IETF Working Groups', self.managers['wg'].get_managed_list()))
return entities
def get_all_outgoing_entities(self):
entities = [(self.manager['sdo'].name, self.managers['sdo'].get_managed_list())]
return entities
IETFHM = IETFHierarchyManager()

View file

@ -8,7 +8,7 @@ from ietf.liaisons.accounts import get_person_for_user
from ietf.liaisons.decorators import can_submit_liaison
from ietf.liaisons.forms import liaison_form_factory
from ietf.liaisons.models import SDOs
from ietf.liaisons.utils import IETFHierarchyManager
from ietf.liaisons.utils import IETFHM
@can_submit_liaison
@ -34,7 +34,7 @@ def get_poc_for_incoming(request):
if not entity_id:
result = {'poc': None, 'error': 'No entity id'}
else:
entity = IETFHierarchyManager().get_entity_by_key(entity_id)
entity = IETFHM.get_entity_by_key(entity_id)
if not entity:
result = {'poc': None, 'error': 'Invalid entity id'}
else:
@ -49,20 +49,15 @@ def get_cc_for_incoming(request):
sdo_id = request.GET.get('sdo_id', None)
if not entity_id and not sdo_id:
result = {'cc': [], 'error': 'No entity id and no sdo id'}
person = get_person_for_user(request.user)
if entity_id:
entity = IETFHierarchyManager().get_entity_by_key(entity_id)
entity = IETFHM.get_entity_by_key(entity_id)
if not entity:
result = {'cc': [], 'error': 'Invalid entity id'}
else:
result = {'error': False, 'cc': [i.email() for i in entity.get_cc()]}
if sdo_id:
try:
sdo = SDOs.objects.get(pk=sdo_id)
manager = sdo.liaisonmanager()
person = get_person_for_user(request.user)
if manager and manager.person!=person:
result['cc'].append(manager.person.email())
except SDOs.DoesNotExist:
result['error']='Invalid sdo id'
from_entity = IETFHM.get_entity_by_key(sdo_id)
result['cc'] += [i.email() for i in from_entity.get_from_cc(person=person)]
json_result = simplejson.dumps(result)
return HttpResponse(json_result, mimetype='text/javascript')