Save from of incoming liaisons. Manage CCs depending of sending entity. Fixes #345
- Legacy-Id: 2377
This commit is contained in:
parent
61a512dcaa
commit
eec8de1efe
|
@ -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):
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue