Guest User

Untitled

a guest
May 24th, 2017
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.05 KB | None | 0 0
  1. from django import forms
  2. from django.contrib.auth import authenticate
  3. from .models import User, VoterCardApplication, VoterCard, PoliticalParty, ConstituencyElectionCandidateDetail, ElectionMobileOTP, ElectionEmailOTP, UserRegistrationMobileOTP
  4. from datetime import datetime
  5.  
  6.  
  7. class UserRegistrationForm(forms.ModelForm):
  8. password1 = forms.CharField(widget=forms.PasswordInput(), min_length=6)
  9. password2 = forms.CharField(widget=forms.PasswordInput())
  10.  
  11. class Meta:
  12. model = User
  13. fields = ['voter_id' ,'email', 'first_name', 'last_name', 'mobile_number', 'aadhar_number', 'security_question_1_answer', 'security_question_2_answer', 'security_question_3_answer']
  14.  
  15. def __init__(self, *args, **kwargs):
  16. super(UserRegistrationForm, self).__init__(*args, **kwargs)
  17.  
  18. # set css class and properties
  19. for field in self.fields:
  20. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  21.  
  22. def clean_mobile_number(self):
  23. mobile_number = self.cleaned_data.get('mobile_number', '')
  24.  
  25. if not mobile_number.isdigit():
  26. raise forms.ValidationError("Please enter a valid mobile number")
  27.  
  28. if len(mobile_number) != 10:
  29. raise forms.ValidationError("Please enter a 10 digit mobile number")
  30.  
  31. return mobile_number
  32.  
  33. def clean_aadhar_number(self):
  34. aadhar_number = self.cleaned_data.get('aadhar_number', '')
  35.  
  36. if not aadhar_number.isdigit():
  37. raise forms.ValidationError("Please enter a valid aadhar number")
  38.  
  39. if len(aadhar_number) != 12:
  40. raise forms.ValidationError("Please enter a 12 digit aadhar number")
  41.  
  42. return aadhar_number
  43.  
  44. def clean_voter_id(self):
  45. voter_id = self.cleaned_data.get('voter_id', '')
  46.  
  47. try:
  48. # search in voter database if any voter application with approved status and given voter id exists
  49. VoterCard.objects.get(voter_id=voter_id)
  50. except: # raise error if not found
  51. raise forms.ValidationError('This voter id does not exist in our records. Please enter a correct voter id')
  52.  
  53. return voter_id
  54.  
  55. def clean(self):
  56. """
  57. Verifies that the values entered into the password fields match
  58. """
  59. cleaned_data = super(UserRegistrationForm, self).clean()
  60. if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
  61. if self.cleaned_data['password1'] != self.cleaned_data['password2']:
  62. self._errors['password1'] = self.error_class(["Passwords do not match."])
  63. return self.cleaned_data
  64.  
  65. def save(self, commit=True):
  66. user = super(UserRegistrationForm, self).save(commit=False)
  67.  
  68. # save password in hashed format
  69. user.set_password(self.cleaned_data['password1'])
  70.  
  71. if commit:
  72. user.save() # save to database
  73.  
  74. return user
  75.  
  76.  
  77. class UserRegistrationStep3Form(forms.Form):
  78.  
  79. mobile_otp = forms.CharField()
  80.  
  81. def __init__(self, *args, **kwargs):
  82. self.user = kwargs.pop('user', None)
  83. super(UserRegistrationStep3Form, self).__init__(*args, **kwargs)
  84.  
  85. # set css class and properties
  86. for field in self.fields:
  87. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:300px'})
  88.  
  89. def clean_mobile_otp(self):
  90. mobile_otp = self.cleaned_data.get('mobile_otp', '')
  91.  
  92. if not mobile_otp.isdigit():
  93. raise forms.ValidationError('Invalid OTP')
  94.  
  95. otp_object = UserRegistrationMobileOTP.objects.filter(user=self.user).first()
  96. if not otp_object or mobile_otp != otp_object.otp_code:
  97. raise forms.ValidationError('Invalid OTP code')
  98.  
  99. if not otp_object.is_otp_valid():
  100. raise forms.ValidationError('OTP has expired. Please try again.')
  101.  
  102. return mobile_otp
  103.  
  104.  
  105. class UserLoginForm(forms.Form):
  106. """
  107. Login form
  108. """
  109.  
  110. voter_id = forms.CharField(max_length=255, widget=forms.TextInput())
  111. password = forms.CharField(widget=forms.PasswordInput())
  112.  
  113. def __init__(self, *args, **kwargs):
  114. super(UserLoginForm, self).__init__(*args, **kwargs)
  115.  
  116. # set css class and properties
  117. for field in self.fields:
  118. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:300px'})
  119.  
  120. def clean_voter_id(self):
  121. voter_id = self.cleaned_data['voter_id']
  122. if not User.objects.filter(voter_id=voter_id).exists():
  123. raise forms.ValidationError('This voter id is not registered with us.')
  124. return voter_id
  125.  
  126. def clean(self):
  127. cleaned_data = super(UserLoginForm, self).clean()
  128. if not self._errors:
  129. self.user = authenticate(username=cleaned_data['voter_id'], password=cleaned_data['password'])
  130. if not self.user:
  131. self._errors['voter_id'] = self.error_class(['User ID and Password do not match'])
  132. return cleaned_data
  133.  
  134.  
  135. class VoterCardApplicationForm(forms.ModelForm):
  136.  
  137. class Meta:
  138. model = VoterCardApplication
  139. exclude = ['created_on', 'application_status', 'voter_id', 'message']
  140.  
  141. def __init__(self, *args, **kwargs):
  142. super(VoterCardApplicationForm, self).__init__(*args, **kwargs)
  143.  
  144. # set css class and properties
  145. for field in self.fields:
  146. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  147.  
  148. def clean_mobile_number(self):
  149. mobile_number = self.cleaned_data.get('mobile_number', '')
  150.  
  151. if not mobile_number.isdigit():
  152. raise forms.ValidationError("Please enter a valid mobile number")
  153.  
  154. if len(mobile_number) != 10:
  155. raise forms.ValidationError("Please enter a 10 digit mobile number")
  156.  
  157. return mobile_number
  158.  
  159. def clean_residence_pincode(self):
  160. residence_pincode = self.cleaned_data.get('residence_pincode', '')
  161.  
  162. if not residence_pincode.isdigit():
  163. raise forms.ValidationError("Please enter a valid pincode")
  164.  
  165. if len(residence_pincode) != 6:
  166. raise forms.ValidationError("Please enter a 6 digit pincode")
  167.  
  168. return residence_pincode
  169.  
  170. def clean(self):
  171. cleaned_data = super(VoterCardApplicationForm, self).clean()
  172.  
  173. if not self._errors:
  174.  
  175. # check valid date of birth
  176. year_of_birth = self.cleaned_data['year_of_birth']
  177. month_of_birth = self.cleaned_data['month_of_birth']
  178. day_of_birth = self.cleaned_data['day_of_birth']
  179.  
  180. try:
  181. date_of_birth = datetime(year=year_of_birth, month=month_of_birth, day=day_of_birth)
  182. except:
  183. self._errors['year_of_birth'] = self.error_class(['Please enter a valid date of birth'])
  184.  
  185.  
  186. return cleaned_data
  187.  
  188.  
  189. class PoliticalPartyCreateForm(forms.ModelForm):
  190.  
  191. class Meta:
  192. model = PoliticalParty
  193. fields = ['name', 'abbreviation', 'founded_by', 'party_logo', 'objectives']
  194.  
  195. def __init__(self, *args, **kwargs):
  196. super(PoliticalPartyCreateForm, self).__init__(*args, **kwargs)
  197.  
  198. # set css class and properties
  199. for field in self.fields:
  200. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  201.  
  202.  
  203. def clean_abbreviation(self):
  204. abbreviation = self.cleaned_data.get('abbreviation', '')
  205. return abbreviation.upper()
  206.  
  207.  
  208. class ConstituencyElectionCandidateNominationForm(forms.ModelForm):
  209.  
  210. class Meta:
  211. model = ConstituencyElectionCandidateDetail
  212. fields = ['political_party', 'election_motto', 'election_objectives', 'candidate_election_picture']
  213.  
  214. def __init__(self, *args, **kwargs):
  215. super(ConstituencyElectionCandidateNominationForm, self).__init__(*args, **kwargs)
  216.  
  217. # only display approved political parties
  218. self.fields['political_party'].queryset = PoliticalParty.objects.filter(is_approved=True)
  219. self.fields['political_party'].empty_label = 'Independent'
  220.  
  221. # set css class and properties
  222. for field in self.fields:
  223. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  224.  
  225.  
  226. class ConstituencyElectionVotingStep1Form(forms.Form):
  227.  
  228. security_question_1_answer = forms.CharField(max_length=50)
  229. security_question_2_answer = forms.CharField(max_length=50)
  230. security_question_3_answer = forms.CharField(max_length=50)
  231.  
  232. def __init__(self, *args, **kwargs):
  233. self.user = kwargs.pop('user', None)
  234. super(ConstituencyElectionVotingStep1Form, self).__init__(*args, **kwargs)
  235.  
  236. # set css class and properties
  237. for field in self.fields:
  238. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  239.  
  240. def clean_security_question_1_answer(self):
  241. security_question_1_answer = self.cleaned_data.get('security_question_1_answer', '')
  242.  
  243. if security_question_1_answer != self.user.security_question_1_answer:
  244. raise forms.ValidationError('Incorrect answer')
  245.  
  246. return security_question_1_answer
  247.  
  248. def clean_security_question_2_answer(self):
  249. security_question_2_answer = self.cleaned_data.get('security_question_2_answer', '')
  250.  
  251. if security_question_2_answer != self.user.security_question_2_answer:
  252. raise forms.ValidationError('Incorrect answer')
  253.  
  254. return security_question_2_answer
  255.  
  256. def clean_security_question_3_answer(self):
  257. security_question_3_answer = self.cleaned_data.get('security_question_3_answer', '')
  258.  
  259. if security_question_3_answer != self.user.security_question_3_answer:
  260. raise forms.ValidationError('Incorrect answer')
  261.  
  262. return security_question_3_answer
  263.  
  264.  
  265. class ConstituencyElectionVotingStep2Form(forms.Form):
  266.  
  267. email_otp = forms.CharField()
  268.  
  269. def __init__(self, *args, **kwargs):
  270. self.user = kwargs.pop('user', None)
  271. self.constituency_election = kwargs.pop('constituency_election', None)
  272. super(ConstituencyElectionVotingStep2Form, self).__init__(*args, **kwargs)
  273.  
  274. # set css class and properties
  275. for field in self.fields:
  276. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  277.  
  278. def clean_email_otp(self):
  279. email_otp = self.cleaned_data.get('email_otp', '')
  280.  
  281. if not email_otp.isdigit():
  282. raise forms.ValidationError('Invalid OTP')
  283.  
  284. otp_object = ElectionEmailOTP.objects.filter(constituency_election=self.constituency_election, user=self.user).first()
  285. if not otp_object or email_otp != otp_object.otp_code:
  286. raise forms.ValidationError('Invalid OTP code')
  287.  
  288. if not otp_object.is_otp_valid():
  289. raise forms.ValidationError('OTP has expired. Please try again.')
  290.  
  291. return email_otp
  292.  
  293.  
  294. class ConstituencyElectionVotingStep3Form(forms.Form):
  295.  
  296. mobile_otp = forms.CharField()
  297.  
  298. def __init__(self, *args, **kwargs):
  299. self.user = kwargs.pop('user', None)
  300. self.constituency_election = kwargs.pop('constituency_election', None)
  301. super(ConstituencyElectionVotingStep3Form, self).__init__(*args, **kwargs)
  302.  
  303. # set css class and properties
  304. for field in self.fields:
  305. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  306.  
  307. def clean_mobile_otp(self):
  308. mobile_otp = self.cleaned_data.get('mobile_otp', '')
  309.  
  310. if not mobile_otp.isdigit():
  311. raise forms.ValidationError('Invalid OTP')
  312.  
  313. otp_object = ElectionMobileOTP.objects.filter(constituency_election=self.constituency_election, user=self.user).first()
  314. if not otp_object or mobile_otp != otp_object.otp_code:
  315. raise forms.ValidationError('Invalid OTP code')
  316.  
  317. if not otp_object.is_otp_valid():
  318. raise forms.ValidationError('OTP has expired. Please try again.')
  319.  
  320. return mobile_otp
  321.  
  322.  
  323. class ConstituencyElectionVotingForm(forms.Form):
  324.  
  325. constituency_election_candidate = forms.IntegerField()
  326.  
  327. def __init__(self, *args, **kwargs):
  328. self.user = kwargs.pop('user', None)
  329. self.constituency_election = kwargs.pop('constituency_election', None)
  330. super(ConstituencyElectionVotingForm, self).__init__(*args, **kwargs)
  331.  
  332. # set css class and properties
  333. for field in self.fields:
  334. self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
  335.  
  336. def clean_constituency_election_candidate(self):
  337. constituency_election_candidate = self.cleaned_data.get('constituency_election_candidate', 0)
  338.  
  339. if not self.constituency_election.constituency_election_candidates.filter(id=constituency_election_candidate, nomination_status=1):
  340. raise forms.ValidationError('Invalid candidate')
  341.  
  342. return constituency_election_candidate
Add Comment
Please, Sign In to add comment