summaryrefslogtreecommitdiff
path: root/allotter/forms.py
blob: 0623ff5e7083f6394e4676aad7eb2304060c9f77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

from django import forms
from allotter.models import Profile
from django.forms.extras.widgets import SelectDateWidget

from django.contrib.auth import authenticate
from django.contrib.auth.models import User

from string import digits, letters, punctuation

from allotter.models import BIRTH_YEAR_CHOICES, GENDER_CHOICES, EXAMINATION_SUBJECTS, CATEGORIES

PWD_CHARS = letters + punctuation + digits

class RegistrationForm(forms.Form):
    #5 Digit Registration Number would be used as username
    username = forms.IntegerField(help_text="Enter your Registration Number")
    
    password = forms.CharField(max_length=30,
        widget=forms.PasswordInput())
    
    confirm_password = forms.CharField(max_length=30,
        widget=forms.PasswordInput())

    email = forms.EmailField()

    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    
    app_no = forms.IntegerField(help_text="Enter your Application Number")

    exam_code = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
        choices=EXAMINATION_SUBJECTS,
        help_text="Options available depends on the qualified Exam")
   
    #All India Rank
    air = forms.DecimalField(help_text="All India Rank")
    
    dob = forms.DateField(widget=SelectDateWidget(years=BIRTH_YEAR_CHOICES))
    
    gender = forms.ChoiceField(widget=forms.RadioSelect, choices=GENDER_CHOICES)
    category = forms.ChoiceField(widget=forms.RadioSelect, choices=CATEGORIES)
    
    #Physical Disability
    pd = forms.BooleanField()
    

    def clean_username(self):
        u_name = self.cleaned_data["username"]
        
        if str(u_name).strip(digits) and len(u_name) != 7:
            msg = "Not a valid Registration Number"
            raise forms.ValidationError(msg)

        try:
            User.objects.get(username__exact = u_name)
            raise forms.ValidationError("Registration Number already exists.")
        except User.DoesNotExist:
            return u_name

        
    def clean_password(self):  
        pwd = self.cleaned_data['password']
        if pwd.strip(PWD_CHARS):
            raise forms.ValidationError("Only letters, digits and punctuation \
            are allowed in password")

    def clean_confirm_password(self):
        c_pwd = self.cleaned_data['confirm_password']
        pwd = self.data['password']
        if c_pwd != pwd:
            raise forms.ValidationError("Passwords do not match")

        return c_pwd

	def save(self):
		u_name = self.cleaned_data["username"]
		pwd = self.cleaned_data["password"]
		email = self.cleaned_data['email']
		new_user = User.objects.create_user(u_name, email, pwd)

        new_user.first_name = self.cleaned_data["first_name"]
        new_user.last_name = self.cleaned_data["last_name"]
        new_user.save()
        cleaned_data = self.cleaned_data
        new_profile = Profile(user=new_user)
        new_profile.exam_code = cleaned_data["exam_code"]
        new_profile.gender = cleaned_data["gender"]
        new_profile.rank = cleaned_data["air"]
        new_profile.category = cleaned_data["category"]
        new_profile.dob = cleaned_date["dob"]
        new_profile.application_number = cleaned_data["app_no"]
        new_profile.save()

        return u_name, pwd

class UserLoginForm(forms.Form):
    username = forms.IntegerField(help_text="Registration Number of Applicant")
    password = forms.CharField(max_length=30, widget=forms.PasswordInput(), 
        help_text="Keep it safe")

    def clean(self):
        super(UserLoginForm, self).clean()
        u_name, pwd = self.cleaned_data["username"], self.cleaned_data["password"]
        user = authenticate(username = u_name, password = pwd)

        if not user:
            raise forms.ValidationError("Invalid username/password")

        return user