2021-10-11 10:16:30 +03:00

324 lines
9.6 KiB
Python

from django import forms
from django.db import transaction
from django.contrib.auth.forms import UserCreationForm, UserChangeForm, PasswordChangeForm
# from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordResetForm
from course.models import Program
# from .models import User, Student, LEVEL
from .models import *
class StaffAddForm(UserCreationForm):
username = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Username", )
first_name = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="First Name", )
last_name = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Last Name", )
address = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Address", )
phone = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Mobile No.", )
email = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Email", )
password1 = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'password', 'class': 'form-control', }),
label="Password", )
password2 = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'password', 'class': 'form-control', }),
label="Password Confirmation", )
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic()
def save(self, commit=True):
user = super().save(commit=False)
user.is_lecturer = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.phone = self.cleaned_data.get('phone')
user.address = self.cleaned_data.get('address')
user.email = self.cleaned_data.get('email')
if commit:
user.save()
return user
class StudentAddForm(UserCreationForm):
username = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
'id': 'username_id'
}
),
label="Username",
)
address = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Address",
)
phone = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Mobile No.",
)
first_name = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="First name",
)
last_name = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Last name",
)
level = forms.CharField(
widget=forms.Select(
choices=LEVEL,
attrs={
'class': 'browser-default custom-select form-control',
}
),
)
department = forms.ModelChoiceField(
queryset=Program.objects.all(),
widget=forms.Select(attrs={'class': 'browser-default custom-select form-control'}),
label="Department",
)
email = forms.EmailField(
widget=forms.TextInput(
attrs={
'type': 'email',
'class': 'form-control',
}
),
label="Email Address",
)
password1 = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'password', 'class': 'form-control', }),
label="Password", )
password2 = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'password', 'class': 'form-control', }),
label="Password Confirmation", )
# def validate_email(self):
# email = self.cleaned_data['email']
# if User.objects.filter(email__iexact=email, is_active=True).exists():
# raise forms.ValidationError("Email has taken, try another email address. ")
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic()
def save(self):
user = super().save(commit=False)
user.is_student = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.address = self.cleaned_data.get('address')
user.phone = self.cleaned_data.get('phone')
user.email = self.cleaned_data.get('email')
user.save()
student = Student.objects.create(
student=user,
level=self.cleaned_data.get('level'),
department=self.cleaned_data.get('department')
)
student.save()
return user
class ProfileUpdateForm(UserChangeForm):
email = forms.EmailField(
widget=forms.TextInput(attrs={'type': 'email', 'class': 'form-control', }),
label="Email Address", )
first_name = forms.CharField(
widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="First Name", )
last_name = forms.CharField(
widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Last Name", )
phone = forms.CharField(
widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Phone No.", )
address = forms.CharField(
widget=forms.TextInput(attrs={'type': 'text', 'class': 'form-control', }),
label="Address / city", )
class Meta:
model = User
fields = ['email', 'phone', 'address', 'picture', 'first_name', 'last_name']
class EmailValidationOnForgotPassword(PasswordResetForm):
def clean_email(self):
email = self.cleaned_data['email']
if not User.objects.filter(email__iexact=email, is_active=True).exists():
msg = "There is no user registered with the specified E-mail address. "
self.add_error('email', msg)
return email
class ParentAddForm(UserCreationForm):
username = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Username",
)
address = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Address",
)
phone = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Mobile No.",
)
first_name = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="First name",
)
last_name = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'type': 'text',
'class': 'form-control',
}
),
label="Last name",
)
email = forms.EmailField(
widget=forms.TextInput(
attrs={
'type': 'email',
'class': 'form-control',
}
),
label="Email Address",
)
student = forms.ModelChoiceField(
queryset=Student.objects.all(),
widget=forms.Select(attrs={'class': 'browser-default custom-select form-control'}),
label="Student",
)
relation_ship = forms.CharField(
widget=forms.Select(
choices=RELATION_SHIP,
attrs={'class': 'browser-default custom-select form-control',}
),
)
password1 = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'password', 'class': 'form-control', }),
label="Password", )
password2 = forms.CharField(
max_length=30, widget=forms.TextInput(attrs={'type': 'password', 'class': 'form-control', }),
label="Password Confirmation", )
# def validate_email(self):
# email = self.cleaned_data['email']
# if User.objects.filter(email__iexact=email, is_active=True).exists():
# raise forms.ValidationError("Email has taken, try another email address. ")
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic()
def save(self):
user = super().save(commit=False)
user.is_parent = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.address = self.cleaned_data.get('address')
user.phone = self.cleaned_data.get('phone')
user.email = self.cleaned_data.get('email')
user.save()
parent = Parent.objects.create(
user=user,
student=self.cleaned_data.get('student'),
relation_ship=self.cleaned_data.get('relation_ship')
)
parent.save()
return user