1+ from django .conf import settings
2+ from django import forms
3+ from idtracker .models import PersonOrOrgInfo
4+ from django .db .models import Q
5+ from django .template .loader import render_to_string
6+ from django .core .mail import EmailMessage
7+
8+
9+ class ManagingShepherdForm (forms .Form ):
10+ email = forms .EmailField (required = False )
11+ is_assign_current = forms .BooleanField (required = False )
12+
13+
14+ def __init__ (self , * args , ** kwargs ):
15+ if kwargs .has_key ('current_person' ):
16+ self .current_person = kwargs .pop ('current_person' )
17+ return super (ManagingShepherdForm , self ).__init__ (* args , ** kwargs )
18+
19+ def clean_email (self ):
20+ email = self .cleaned_data .get ('email' )
21+ if not email :
22+ return None
23+
24+ try :
25+ PersonOrOrgInfo .objects . \
26+ filter (emailaddress__type__in = [ "INET" , "Prim" ,],
27+ emailaddress__address = email ) \
28+ [:1 ].get ()
29+ except PersonOrOrgInfo .DoesNotExist :
30+ if self .cleaned_data .get ('is_assign_current' ):
31+ self ._send_email (email )
32+ raise forms .ValidationError ("Person with such email does not exist" )
33+ return email
34+
35+ def clean (self ):
36+ print self .cleaned_data .get ('email' ) and self .cleaned_data .get ('is_assign_current' )
37+ if self .cleaned_data .get ('email' ) and \
38+ self .cleaned_data .get ('is_assign_current' ):
39+ raise forms .ValidationError ("You should choose to assign to current \
40+ person or input the email. Not both at te same time. " )
41+
42+ return self .cleaned_data
43+
44+ def change_shepherd (self , document , save = True ):
45+ email = self .cleaned_data .get ('email' )
46+ if email :
47+ person = PersonOrOrgInfo .objects . \
48+ filter (emailaddress__type__in = [ "INET" , "Prim" ,],
49+ emailaddress__address = email ) \
50+ [:1 ].get ()
51+ else :
52+ person = self .current_person
53+ document .shepherd = person
54+ if save :
55+ document .save ()
56+ return document
57+
58+ def _send_email (self , email ,
59+ template = 'idrfc/edit_management_shepherd_email.txt' ):
60+ subject = 'WG Delegate needs system credentials'
61+ body = render_to_string (template ,
62+ {'email' : email ,
63+ })
64+ mail = EmailMessage (subject = subject ,
65+ body = body ,
66+ to = [email , settings .DEFAULT_FROM_EMAIL , ],
67+ from_email = settings .DEFAULT_FROM_EMAIL )
68+ mail .send ()
0 commit comments