22from django .template .loader import render_to_string
33
44from ietf .liaisons .models import LiaisonDetail
5- from ietf .liaisons .accounts import get_person_for_user
5+ from ietf .liaisons .accounts import (can_add_outgoing_liaison , can_add_incoming_liaison ,
6+ get_person_for_user )
67
78
89class LiaisonForm (forms .ModelForm ):
@@ -23,10 +24,23 @@ class Meta:
2324 def __init__ (self , user , * args , ** kwargs ):
2425 super (LiaisonForm , self ).__init__ (* args , ** kwargs )
2526 self .person = get_person_for_user (user )
27+ self .set_from_field ()
28+ self .set_replyto_field ()
29+ self .set_organization_field ()
2630
2731 def __unicode__ (self ):
2832 return self .as_div ()
2933
34+ def set_from_field (self ):
35+ assert NotImplemented
36+
37+ def set_replyto_field (self ):
38+ email = self .person .email ()
39+ self .fields ['replyto' ].initial = email and email [1 ]
40+
41+ def set_organization_field (self ):
42+ assert NotImplemented
43+
3044 def as_div (self ):
3145 return render_to_string ('liaisons/liaisonform.html' , {'form' : self })
3246
@@ -43,3 +57,35 @@ def get_fieldsets(self):
4357 # if there is no fields in this fieldset, we continue to next fieldset
4458 continue
4559 yield fieldset_dict
60+
61+
62+ class IncomingLiaisonForm (LiaisonForm ):
63+
64+ def set_from_field (self ):
65+ sdo_managed = [i .sdo for i in self .person .liaisonmanagers_set .all ()]
66+ sdo_authorized = [i .sdo for i in self .person .sdoauthorizedindividual_set .all ()]
67+ sdos = set (sdo_managed ).union (sdo_authorized )
68+ self .fields ['from_field' ].choices = [(i .pk , '%s (%s)' % (i .sdo_name , self .person )) for i in sdos ]
69+
70+ def set_organization_field (self ):
71+ organizations = ['The IETF' , 'The IESG' , 'The IAB' ]
72+ organizations .append ('-- IETF Areas ---' )
73+ organizations .append ('-- IETF Working Groups ---' )
74+
75+
76+ class OutgoingLiaisonForm (LiaisonForm ):
77+
78+ def set_from_field (self ):
79+ pass
80+
81+ def set_organization_field (self ):
82+ pass
83+
84+
85+ def liaison_form_factory (request ):
86+ user = request .user
87+ if can_add_incoming_liaison (user ):
88+ return IncomingLiaisonForm (user )
89+ elif can_add_outgoing_liaison (user ):
90+ return OutgoingLiaisonForm (user )
91+ return None
0 commit comments