1212from django .utils .encoding import force_text
1313from django .utils .safestring import mark_safe
1414
15-
15+ from ietf . name . models import DocRelationshipName
1616from ietf .liaisons .accounts import (can_add_outgoing_liaison , can_add_incoming_liaison ,
1717 get_person_for_user , is_secretariat , is_sdo_liaison_manager )
1818from ietf .liaisons .utils import IETFHM
1919from ietf .liaisons .widgets import (FromWidget , ReadOnlyWidget , ButtonWidget ,
2020 ShowAttachmentsWidget , RelatedLiaisonWidget )
21- from ietf .liaisons .models import LiaisonStatement , LiaisonStatementPurposeName , LiaisonStatementEvent
21+ from ietf .liaisons .models import (LiaisonStatement , LiaisonStatementPurposeName , LiaisonStatementEvent ,
22+ RelatedLiaisonStatement )
2223from ietf .group .models import Group , Role
2324from ietf .person .models import Person , Email
2425from ietf .doc .models import Document
@@ -45,7 +46,7 @@ class LiaisonForm(forms.Form):
4546 require = ['id_attach_title' , 'id_attach_file' ],
4647 required_label = 'title and file' ),
4748 required = False )
48- related_to = forms .ModelChoiceField (LiaisonStatement .objects .all (), label = u'Related Liaison' , widget = RelatedLiaisonWidget , required = False )
49+ related_to = forms .ModelMultipleChoiceField (LiaisonStatement .objects .all (), label = u'Related Liaison' , widget = RelatedLiaisonWidget , required = False )
4950
5051 fieldsets = [('From' , ('from_field' , 'response_contacts' )),
5152 ('To' , ('organization' , 'to_poc' )),
@@ -162,6 +163,10 @@ def check_email(self, value):
162163 except UnicodeEncodeError as e :
163164 raise forms .ValidationError ('Invalid email address: %s (check character %d)' % (addr ,e .start ))
164165
166+ def clean_related_to (self ):
167+ related_list = self .data .getlist ('related_to' )
168+ return [i for i in related_list if i ]
169+
165170 def clean_technical_contact (self ):
166171 value = self .cleaned_data .get ('technical_contact' , None )
167172 self .check_email (value )
@@ -218,21 +223,16 @@ def save(self, *args, **kwargs):
218223 l .purpose = LiaisonStatementPurposeName .objects .get (order = self .cleaned_data ["purpose" ])
219224 l .body = self .cleaned_data ["body" ].strip ()
220225 l .deadline = self .cleaned_data ["deadline_date" ]
221- l .related_to = self .cleaned_data ["related_to" ]
222226 l .response_contacts = self .cleaned_data ["response_contacts" ]
223227 l .technical_contact = self .cleaned_data ["technical_contact" ]
224228
225229 now = datetime .datetime .now ()
226230
227- l .modified = now
228- l .submitted = datetime .datetime .combine (self .cleaned_data ["submitted_date" ], now .time ())
229- if not l .approved :
230- l .approved = now
231-
232231 self .save_extra_fields (l )
233232
234233 l .save () # we have to save here to make sure we get an id for the attachments
235234 self .save_attachments (l )
235+ self .save_related_liaisons (l )
236236
237237 return l
238238
@@ -278,6 +278,16 @@ def save_attachments(self, instance):
278278 attach_file .write (attached_file .read ())
279279 attach_file .close ()
280280
281+ def save_related_liaisons (self , instance ):
282+ rel = DocRelationshipName .objects .get (slug = 'refold' )
283+ for i in self .cleaned_data .get ('related_to' , []):
284+ try :
285+ instance .source_of_set .get_or_create (
286+ target = LiaisonStatement .objects .get (id = i ),
287+ relationship = rel )
288+ except LiaisonStatement .DoesNotExist :
289+ continue
290+
281291 def clean_title (self ):
282292 title = self .cleaned_data .get ('title' , None )
283293 if self .instance and self .instance .pk :
@@ -389,10 +399,10 @@ def save_extra_fields(self, liaison):
389399 super (OutgoingLiaisonForm , self ).save_extra_fields (liaison )
390400 from_entity = self .get_from_entity ()
391401 needs_approval = from_entity .needs_approval (self .person )
392- if not needs_approval or self .cleaned_data .get ('approved' , False ):
393- liaison .approved = datetime .datetime .now ()
394- else :
395- liaison .approved = None
402+ # if not needs_approval or self.cleaned_data.get('approved', False):
403+ # liaison.approved = datetime.datetime.now()
404+ # else:
405+ # liaison.approved = None
396406
397407 def clean_to_poc (self ):
398408 value = self .cleaned_data .get ('to_poc' , None )
0 commit comments