44from django .core .exceptions import ObjectDoesNotExist
55from django .db import models
66from django .template .loader import render_to_string
7- from ietf .idtracker .models import Acronym ,PersonOrOrgInfo , Area
7+ from django .contrib .auth .models import User
8+ from ietf .idtracker .models import Acronym , PersonOrOrgInfo , Area , IESGLogin
89from ietf .liaisons .mail import IETFEmailMessage
10+ from ietf .ietfauth .models import LegacyLiaisonUser
11+ from ietf .utils .admin import admin_link
912
1013class LiaisonPurpose (models .Model ):
1114 purpose_id = models .AutoField (primary_key = True )
@@ -62,7 +65,7 @@ class LiaisonDetail(models.Model):
6265 from_raw_body = models .CharField (blank = True , null = True , max_length = 255 )
6366 from_raw_code = models .CharField (blank = True , null = True , max_length = 255 )
6467 approval = models .ForeignKey (OutgoingLiaisonApproval , blank = True , null = True )
65- taken_care = models .BooleanField (default = False )
68+ action_taken = models .BooleanField (default = False , db_column = 'taken_care' )
6669 related_to = models .ForeignKey ('LiaisonDetail' , blank = True , null = True )
6770 def __str__ (self ):
6871 return self .title or "<no title>"
@@ -76,7 +79,13 @@ def from_body(self):
7679 if not self .from_raw_body :
7780 return self .legacy_from_body ()
7881 return self .from_raw_body
79-
82+ def from_sdo (self ):
83+ try :
84+ name = FromBodies .objects .get (pk = self .from_id ).body_name
85+ sdo = SDOs .objects .get (sdo_name = name )
86+ return sdo
87+ except ObjectDoesNotExist :
88+ return None
8089 def legacy_from_body (self ):
8190 """The from_id field is a foreign key for either
8291 FromBodies or Acronyms, depending on whether it's
@@ -101,7 +110,7 @@ def legacy_from_body(self):
101110 return "IETF %s %s" % (acronym .acronym .upper (), kind )
102111 except ObjectDoesNotExist :
103112 pass
104- return "<unknown body %d >" % self .from_id
113+ return "<unknown body %s >" % self .from_id
105114 def from_email (self ):
106115 """If there is an entry in from_bodies, it has
107116 the desired email priority. However, if it's from
@@ -170,45 +179,85 @@ def is_pending(self):
170179
171180
172181class SDOs (models .Model ):
173- sdo_id = models .AutoField (primary_key = True )
174- sdo_name = models .CharField (blank = True , max_length = 255 )
182+ sdo_id = models .AutoField (primary_key = True , verbose_name = 'ID' )
183+ sdo_name = models .CharField (blank = True , max_length = 255 , verbose_name = 'SDO Name' )
175184 def __str__ (self ):
176185 return self .sdo_name
177186 def liaisonmanager (self ):
178187 try :
179188 return self .liaisonmanagers_set .all ()[0 ]
180189 except :
181190 return None
191+ def sdo_contact (self ):
192+ try :
193+ return self .sdoauthorizedindividual_set .all ()[0 ]
194+ except :
195+ return None
182196 class Meta :
183197 verbose_name = 'SDO'
184198 verbose_name_plural = 'SDOs'
185199 db_table = 'sdos'
186200 ordering = ('sdo_name' , )
201+ liaisonmanager_link = admin_link ('liaisonmanager' , label = 'Liaison' )
202+ sdo_contact_link = admin_link ('sdo_contact' )
187203
188- class LiaisonManagers (models .Model ):
204+ class LiaisonStatementManager (models .Model ):
189205 person = models .ForeignKey (PersonOrOrgInfo , db_column = 'person_or_org_tag' )
206+ sdo = models .ForeignKey (SDOs , verbose_name = 'SDO' )
207+ def __unicode__ (self ):
208+ return '%s (%s)' % (self .person , self .sdo )
209+ class Meta :
210+ abstract = True
211+ # Helper functions, for use in the admin interface
212+ def login_name (self ):
213+ login_name = None
214+ try :
215+ login_name = IESGLogin .objects .get (person = self .person ).login_name
216+ if User .objects .filter (username = login_name ).count ():
217+ return login_name
218+ except IESGLogin .DoesNotExist :
219+ pass
220+ try :
221+ login_name = LegacyLiaisonUser .objects .get (person = self .person ).login_name
222+ except LegacyLiaisonUser .DoesNotExist :
223+ pass
224+ return login_name
225+ def user (self ):
226+ login_name = self .login_name ()
227+ user = None
228+ if login_name :
229+ try :
230+ return User .objects .get (username = login_name ), login_name
231+ except User .DoesNotExist :
232+ pass
233+ return None , login_name
234+ def user_name (self ):
235+ user , login_name = self .user ()
236+ if user :
237+ return u'<a href="/admin/auth/user/%s/">%s</a>' % (user .id , login_name )
238+ else :
239+ return u'<a href="/admin/auth/user/"><span style="color: red">%s</span></a>' % (login_name )
240+ user_name .allow_tags = True
241+ def groups (self ):
242+ user , login_name = self .user ()
243+ return ", " .join ([ group .name for group in user .groups .all ()])
244+ person_link = admin_link ('person' )
245+ sdo_link = admin_link ('sdo' , label = 'SDO' )
246+
247+ class LiaisonManagers (LiaisonStatementManager ):
190248 email_priority = models .IntegerField (null = True , blank = True )
191- sdo = models .ForeignKey (SDOs )
192249 def email (self ):
193250 try :
194251 return self .person .emailaddress_set .get (priority = self .email_priority )
195252 except ObjectDoesNotExist :
196253 return None
197- def __unicode__ (self ):
198- return '%s (%s)' % (self .person , self .sdo )
199254 class Meta :
200255 verbose_name = 'SDO Liaison Manager'
201256 verbose_name_plural = 'SDO Liaison Managers'
202257 db_table = 'liaison_managers'
203258 ordering = ('sdo__sdo_name' , )
204259
205- class SDOAuthorizedIndividual (models .Model ):
206- person = models .ForeignKey (PersonOrOrgInfo , db_column = 'person_or_org_tag' )
207- sdo = models .ForeignKey (SDOs )
208-
209- def __unicode__ (self ):
210- return '%s (%s)' % (self .person , self .sdo )
211-
260+ class SDOAuthorizedIndividual (LiaisonStatementManager ):
212261 class Meta :
213262 verbose_name = 'SDO Authorized Individual'
214263 verbose_name_plural = 'SDO Authorized Individuals'
0 commit comments