From fdffa9ce8648b9d5f3218d6a1030cbbd5f4d8665 Mon Sep 17 00:00:00 2001 From: Saksham-1508 Date: Sun, 6 Feb 2022 13:52:56 +0530 Subject: [PATCH 1/7] created user specific forms --- AlumniConnect/forms.py | 440 +++++++++++++++++++++++++-- AlumniConnect/urls.py | 1 + applications/alumniprofile/models.py | 27 +- 3 files changed, 424 insertions(+), 44 deletions(-) diff --git a/AlumniConnect/forms.py b/AlumniConnect/forms.py index e387c6ad..9fdc7b2a 100644 --- a/AlumniConnect/forms.py +++ b/AlumniConnect/forms.py @@ -2,10 +2,351 @@ from django import forms from applications.alumniprofile.models import Profile, Constants, Batch from django.contrib.auth.models import User +from django.contrib.auth.forms import UserCreationForm +from django.core.exceptions import ValidationError from crispy_forms.helper import FormHelper from crispy_forms.layout import Layout, Submit, Row, Column, Div, Field from crispy_forms.bootstrap import InlineRadios +import re +# --------------------------------REGISTRATION FORMS FOR STUDENTS AND ALUMNI START-------------------------------------------------------- +class Alumni_NewRegister(forms.ModelForm): + date_of_birth = forms.DateField( + widget=forms.TextInput( + attrs={'type': 'date'} + ), + ) + date_of_joining = forms.DateField( + widget=forms.TextInput( + attrs={'type': 'date'} + ), + required=False, + ) + current_address = forms.CharField( + widget=forms.Textarea( + attrs={'rows': 3, 'placeholder': 'Enter Address'} + ), + max_length=4000, + ) + permanent_address = forms.CharField( + widget=forms.Textarea( + attrs={'rows': 3, 'placeholder': 'Enter Permanent Address', } + ), + max_length=4000, + required=False, + ) + country = forms.ChoiceField(widget=forms.Select( + attrs={'id': 'countryId', 'class': 'countries order-alpha presel-IN custom-select', 'name': 'country'})) + state = forms.ChoiceField( + widget=forms.Select(attrs={'id': 'stateId', 'class': 'states order-alpha custom-select', 'name': 'state'})) + city = forms.ChoiceField( + widget=forms.Select(attrs={'id': 'cityId', 'class': 'cities order-alpha custom-select', 'name': 'city'})) + linkedin = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Linkedin URL'})) + website = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Website'}), required=False) + facebook = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Facebook URL'}), required=False) + # checkbox_terms = forms.BooleanField(required=True) + instagram = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Instagram Username'}), required=False) + checkbox_update = forms.BooleanField(required=True) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['fathers_name'].label = "Father/Mother's Name" + self.fields['spouse_name'].label = "Spouse's Name" + self.fields['mobile1'].label = "Mobile No." + self.fields['mobile2'].label = "Alternate Mobile No." + self.fields['batch'].label = 'Year of Passing' + self.fields['sex'].label = 'Gender' + self.fields['phone_no'].label = 'Phone No.' + self.fields['date_of_birth'].label = 'Date of Birth' + self.fields['year_of_admission'].label = 'Year of Admission' + # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the SAC' + self.fields[ + 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' + self.helper = FormHelper() + self.helper.layout = Layout( + Div( + Field('name', css_class="form-control", wrapper_class='col-md-5'), + Field('fathers_name', css_class="form-control", wrapper_class='col-md-5'), + css_class='form-row my-3', + ), + Div( + Field('sex', css_class="custom-select", wrapper_class="col-md-5"), + Field('spouse_name', css_class="form-control", wrapper_class='col-md-5'), + css_class='form-row my-3', + ), + Div( + Field('email', css_class="form-control", wrapper_class='col-md-5'), + css_class='form-row my-3', + ), + Div( + Field('date_of_birth', css_class="form-control", wrapper_class='col-md-4'), + Field('year_of_admission', css_class="custom-select", wrapper_class='col-md-4'), + Field('batch', css_class="custom-select", wrapper_class="col-md-4"), + css_class='form-row my-3', + ), + Div( + Field('branch', css_class="custom-select", wrapper_class="col-md-5"), + Field('programme', css_class="custom-select", wrapper_class="col-md-5"), + css_class='form-row my-3', + ), + Div( + Field('mobile1', css_class="form-control", wrapper_class='col-md-5'), + Field('mobile2', css_class="form-control", wrapper_class='col-md-5'), + css_class='form-row my-3', + ), + Div( + Field('current_address', css_class="form-control", wrapper_class='col-md'), + css_class='form-row my-3', + ), + Div( + Field('country', wrapper_class="col-md-4"), + Field('state', wrapper_class="col-md-4"), + Field('city', wrapper_class="col-md-4"), + css_class='form-row my-3', + ), + Div( + Field('permanent_address', css_class="form-control", wrapper_class='col-md'), + css_class='form-row my-3', + ), + InlineRadios('working_status'), + Div( + Field('current_position', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), + Field('current_organisation', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), + Field('date_of_joining', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), + Field('past_experience', css_class="form-control", wrapper_class="col-md-6 col-lg-4"), + css_class='form-row my-3', + ), + Div( + Field('current_course', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), + Field('current_university', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), + css_class='form-row my-3', + ), + Div( + Field('linkedin', css_class="form-control", wrapper_class='col-md-6'), + Field('website', css_class="form-control", wrapper_class='col-md-6'), + css_class='form-row my-3', + ), + Div( + Field('facebook', css_class="form-control", wrapper_class='col-md-6'), + Field('instagram', css_class="form-control", wrapper_class='col-md-6'), + css_class='form-row my-3', + ), + Field('profile_picture', css_class="w-100"), + # 'profile_picture', + 'checkbox_update', + Submit('submit', 'Register'), + ) + + def clean(self): + super(Alumini_NewRegister, self).clean() # if necessary + del self._errors['country'] + del self._errors['city'] + del self._errors['state'] + return self.cleaned_data + + class Meta: + model = Profile + + fields = [ + 'city', + 'country', + 'state', + 'year_of_admission', + 'alternate_email', + 'phone_no', + 'mobile1', + 'mobile2', + 'facebook', + 'instagram', + 'name', + 'fathers_name', + 'spouse_name', + 'sex', + 'email', + 'roll_no', + 'date_of_birth', + 'date_of_joining', + 'working_status', + 'branch', + 'programme', + 'batch', + 'current_address', + 'permanent_address', + 'phone_no', + 'current_position', + 'current_organisation', + 'past_experience', + 'current_course', + 'current_university', + 'linkedin', + 'website', + 'profile_picture'] + + widgets = { + 'working_status': forms.RadioSelect(choices=Constants.WORKING_STATUS), + } + + +class Student_NewRegister(forms.ModelForm): + date_of_birth = forms.DateField( + widget=forms.TextInput( + attrs={'type': 'date'} + ), + ) + date_of_joining = forms.DateField( + widget=forms.TextInput( + attrs={'type': 'date'} + ), + required=False, + ) + current_address = forms.CharField( + widget=forms.Textarea( + attrs={'rows': 3, 'placeholder': 'Enter Address'} + ), + max_length=4000, + ) + permanent_address = forms.CharField( + widget=forms.Textarea( + attrs={'rows': 3, 'placeholder': 'Enter Permanent Address', } + ), + max_length=4000, + required=False, + ) + country = forms.ChoiceField(widget=forms.Select( + attrs={'id': 'countryId', 'class': 'countries order-alpha presel-IN custom-select', 'name': 'country'})) + state = forms.ChoiceField( + widget=forms.Select(attrs={'id': 'stateId', 'class': 'states order-alpha custom-select', 'name': 'state'})) + city = forms.ChoiceField( + widget=forms.Select(attrs={'id': 'cityId', 'class': 'cities order-alpha custom-select', 'name': 'city'})) + linkedin = forms.URLField(widget=forms.TextInput( + attrs={'placeholder': 'Linkedin URL'})) + website = forms.URLField(widget=forms.TextInput( + attrs={'placeholder': 'Website'}), required=False) + facebook = forms.URLField(widget=forms.TextInput( + attrs={'placeholder': 'Facebook URL'}), required=False) + # checkbox_terms = forms.BooleanField(required=True) + instagram = forms.CharField(widget=forms.TextInput( + attrs={'placeholder': 'Instagram Username'}), required=False) + checkbox_update = forms.BooleanField(required=True) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['fathers_name'].label = "Father/Mother's Name" + self.fields['mobile1'].label = "Mobile No." + self.fields['mobile2'].label = "Alternate Mobile No." + self.fields['batch'].label = 'Year of Passing' + self.fields['sex'].label = 'Gender' + self.fields['date_of_birth'].label = 'Date of Birth' + self.fields['year_of_admission'].label = 'Year of Admission' + # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the SAC' + self.fields[ + 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' + self.helper = FormHelper() + + self.helper.layout = Layout( + Div( + Field('name', css_class="form-control",wrapper_class='col-md-5'), + Field('fathers_name', css_class="form-control",wrapper_class='col-md-5'), + css_class='form-row my-3', + ), + Div( + Field('email', css_class="form-control",wrapper_class='col-md-5'), + Field('sex', css_class="custom-select",wrapper_class="col-md-5"), + css_class='form-row my-3', + ), + Div( + Field('date_of_birth', css_class="form-control", + wrapper_class='col-md-4'), + Field('year_of_admission', css_class="custom-select", + wrapper_class='col-md-4'), + Field('batch', css_class="custom-select", + wrapper_class="col-md-4"), + css_class='form-row my-3', + ), + Div( + Field('branch', css_class="custom-select", + wrapper_class="col-md-5"), + Field('programme', css_class="custom-select", + wrapper_class="col-md-5"), + css_class='form-row my-3', + ), + Div( + Field('mobile1', css_class="form-control", + wrapper_class='col-md-5'), + Field('mobile2', css_class="form-control", + wrapper_class='col-md-5'), + css_class='form-row my-3', + ), + Div( + Field('current_address', css_class="form-control", + wrapper_class='col-md'), + css_class='form-row my-3', + ), + Div( + Field('country', wrapper_class="col-md-4"), + Field('state', wrapper_class="col-md-4"), + Field('city', wrapper_class="col-md-4"), + css_class='form-row my-3', + ), + Div( + Field('permanent_address', css_class="form-control", + wrapper_class='col-md'), + css_class='form-row my-3', + ), + Div( + Field('linkedin', css_class="form-control", + wrapper_class='col-md-6'), + Field('website', css_class="form-control", + wrapper_class='col-md-6'), + css_class='form-row my-3', + ), + Div( + Field('facebook', css_class="form-control", + wrapper_class='col-md-6'), + Field('instagram', css_class="form-control", + wrapper_class='col-md-6'), + css_class='form-row my-3', + ), + Field('profile_picture', css_class="w-100"), + # 'profile_picture', + 'checkbox_update', + + Submit('submit', 'Register'), + ) + + def clean(self): + super(Student_NewRegister, self).clean() # if necessary + del self._errors['country'] + del self._errors['city'] + del self._errors['state'] + return self.cleaned_data + + class Meta: + model = Profile + + fields = [ + 'city', + 'country', + 'state', + 'year_of_admission', + 'mobile1', + 'mobile2', + 'facebook', + 'instagram', + 'name', + 'fathers_name', + 'sex', + 'email', + 'date_of_birth', + 'branch', + 'programme', + 'batch', + 'current_address', + 'permanent_address', + 'linkedin', + 'website', + 'profile_picture'] + +# --------------------------------REGISTRATION FORMS FOR STUDENTS AND ALUMNI END-------------------------------------------------------- class RegisterForm(forms.ModelForm): def __init__(self, *args, **kwargs): @@ -16,7 +357,7 @@ def __init__(self, *args, **kwargs): Column('batch', css_class='form-group col-md-4 mb-0'), Column('programme', css_class='form-group col-md-4 mb-0'), Column('branch', css_class='form-group col-md-4 mb-0'), - css_class='form-row' + css_class='form-row my-3' ), Submit('submit', 'Search', css_class=''), ) @@ -66,7 +407,7 @@ class ProfileEdit(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['fathers_name'].label = "Father/Mother's Name" - self.fields['husbands_name'].label = "Husband's Name" + self.fields['spouse_name'].label = "Husband's Name" self.fields['mobile1'].label = "Mobile No." self.fields['mobile2'].label = "Alternate Mobile No." self.fields['batch'].label = 'Year of Passing' @@ -82,48 +423,48 @@ def __init__(self, *args, **kwargs): Field('roll_no', css_class="form-control", wrapper_class='col-md-4'), Field('name', css_class="form-control", wrapper_class='col-md-4'), Field('sex', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('fathers_name', css_class="form-control", wrapper_class='col-md-6'), - Field('husbands_name', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + Field('spouse_name', css_class="form-control", wrapper_class='col-md-6'), + css_class='form-row my-3', ), Div( Field('date_of_birth', css_class="form-control", wrapper_class='col-md-4'), Field('year_of_admission', css_class="custom-select", wrapper_class='col-md-4'), Field('batch', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('branch', css_class="custom-select", wrapper_class="col-md-6"), Field('programme', css_class="custom-select", wrapper_class="col-md-6"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('mobile1', css_class="form-control", wrapper_class='col-md-4'), Field('mobile2', css_class="form-control", wrapper_class='col-md-4'), Field('phone_no', css_class="form-control", wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('email', css_class="form-control", wrapper_class='col-md-6'), Field('alternate_email', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('current_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('country', wrapper_class="col-md-4"), Field('state', wrapper_class="col-md-4"), Field('city', wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('permanent_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row', + css_class='form-row my-3', ), InlineRadios('working_status'), Div( @@ -131,22 +472,22 @@ def __init__(self, *args, **kwargs): Field('current_organisation', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), Field('date_of_joining', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), Field('past_experience', css_class="form-control", wrapper_class="col-md-6 col-lg-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('current_course', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), Field('current_university', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('linkedin', css_class="form-control", wrapper_class='col-md-6'), Field('website', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('facebook', css_class="form-control", wrapper_class='col-md-6'), Field('instagram', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + css_class='form-row my-3', ), Field('profile_picture', css_class="w-100"), # 'profile_picture', @@ -176,7 +517,7 @@ class Meta: 'instagram', 'name', 'fathers_name', - 'husbands_name', + 'spouse_name', 'sex', 'email', 'roll_no', @@ -251,7 +592,7 @@ class NewRegister(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['fathers_name'].label = "Father/Mother's Name" - self.fields['husbands_name'].label = "Husband's Name" + self.fields['spouse_name'].label = "Husband's Name" self.fields['mobile1'].label = "Mobile No." self.fields['mobile2'].label = "Alternate Mobile No." self.fields['batch'].label = 'Year of Passing' @@ -270,48 +611,48 @@ def __init__(self, *args, **kwargs): Field('roll_no', css_class="form-control", wrapper_class='col-md-4'), Field('name', css_class="form-control", wrapper_class='col-md-4'), Field('sex', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('fathers_name', css_class="form-control", wrapper_class='col-md-6'), - Field('husbands_name', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + Field('spouse_name', css_class="form-control", wrapper_class='col-md-6'), + css_class='form-row my-3', ), Div( Field('date_of_birth', css_class="form-control", wrapper_class='col-md-4'), Field('year_of_admission', css_class="custom-select", wrapper_class='col-md-4'), Field('batch', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('branch', css_class="custom-select", wrapper_class="col-md-6"), Field('programme', css_class="custom-select", wrapper_class="col-md-6"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('mobile1', css_class="form-control", wrapper_class='col-md-4'), Field('mobile2', css_class="form-control", wrapper_class='col-md-4'), Field('phone_no', css_class="form-control", wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('email', css_class="form-control", wrapper_class='col-md-6'), Field('alternate_email', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('current_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('country', wrapper_class="col-md-4"), Field('state', wrapper_class="col-md-4"), Field('city', wrapper_class="col-md-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('permanent_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row', + css_class='form-row my-3', ), InlineRadios('working_status'), Div( @@ -319,22 +660,22 @@ def __init__(self, *args, **kwargs): Field('current_organisation', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), Field('date_of_joining', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), Field('past_experience', css_class="form-control", wrapper_class="col-md-6 col-lg-4"), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('current_course', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), Field('current_university', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('linkedin', css_class="form-control", wrapper_class='col-md-6'), Field('website', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + css_class='form-row my-3', ), Div( Field('facebook', css_class="form-control", wrapper_class='col-md-6'), Field('instagram', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row', + css_class='form-row my-3', ), Field('profile_picture', css_class="w-100"), # 'profile_picture', @@ -365,7 +706,7 @@ class Meta: 'instagram', 'name', 'fathers_name', - 'husbands_name', + 'spouse_name', 'sex', 'email', 'roll_no', @@ -392,6 +733,39 @@ class Meta: } +class SignUp(UserCreationForm): + username = forms.CharField( + label='Enter Username', min_length=4, max_length=150, widget=forms.TextInput(attrs={'placeholder': 'Enter your roll number'})) + email = forms.EmailField(label='Enter email', widget=forms.EmailInput( + attrs={'placeholder': 'Enter your email'})) + password1 = forms.CharField( + label='Enter password', widget=forms.PasswordInput(attrs={'placeholder': 'Enter your password'})) + password2 = forms.CharField( + label='Confirm password', widget=forms.PasswordInput(attrs={'placeholder': 'Reenter your password'})) + user_type = forms.ChoiceField(choices=(('A', 'Alumini'), ('S', 'Student'))) + + def clean_email(self): + email = self.cleaned_data['email'].lower() + r = User.objects.filter(email=email) + if re.findall("iiitdmj.ac.in$", email): + raise ValidationError( + "Institute email id is not accepted.Kindly enter your personal email id.") + return email + + def clean_username(self): + username = self.cleaned_data.get('username').lower() + r = User.objects.filter(username=username) + match = re.search('20\w\w\w\d\d\d', username) + match2 = re.search('20\d\d\d\d\d', username) + if(match == match2 == None): + raise ValidationError( + 'Please enter your institute roll number.' + ) + return username + + class Meta: + model = User + fields = ['username', 'email', 'password1', 'password2', 'user_type'] class PasswordResetRequestForm(forms.Form): roll_no = forms.IntegerField(label=("Roll No.")) email = forms.CharField(label=("Email"), max_length=254) diff --git a/AlumniConnect/urls.py b/AlumniConnect/urls.py index 75d37304..25a5e789 100644 --- a/AlumniConnect/urls.py +++ b/AlumniConnect/urls.py @@ -38,6 +38,7 @@ path('logout/', LogoutView.as_view(), name='logout'), path('register/', views.register, name='register'), path('newregister/', views.new_register, name='new_register'), + path('signup/', views.signup, name='signup'), re_path(r'^activate/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', views.activate, name='activate'), path('confirm/', TemplateView.as_view(template_name='AlumniConnect/confirm_email.html'), name = 'confirm'), path('success/', TemplateView.as_view(template_name='AlumniConnect/account_success.html'), name = 'success'), diff --git a/applications/alumniprofile/models.py b/applications/alumniprofile/models.py index c599a1bd..520496fc 100644 --- a/applications/alumniprofile/models.py +++ b/applications/alumniprofile/models.py @@ -10,6 +10,10 @@ class Constants: + USER_TYPE = ( + ('S','Student'), + ('A','Alumni') + ) SEX_CHOICES = ( ('M', 'Male'), ('F', 'Female'), @@ -28,6 +32,7 @@ class Constants: ('CSE', 'Computer Science and Engineering'), ('ECE', 'Electronics and Communication Engineering'), ('ME', 'Mechanical Engineering'), + ('SM', 'Smart Manufacturing'), ('NS', 'Natural Sciences'), ('MT', 'Mechatronics'), ('DS', 'Design'), @@ -41,11 +46,11 @@ class Constants: ) YEAR_OF_ADDMISSION = tuple((n, str(n)) for n in range(2005, datetime.datetime.now().year)) - + class Batch(models.Model): + # batch = models.IntegerField(primary_key=True,choices=Constants.BATCH_OF,default=2009) batch = models.IntegerField(primary_key=True) - def __str__(self): return str(self.batch) @@ -57,16 +62,16 @@ def upload_photo(instance, filename): class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) - roll_no = models.IntegerField(primary_key=True) - email = models.EmailField(null=False, default="") - alternate_email = models.EmailField(null=True, blank=True) + roll_no = models.CharField(primary_key=True,max_length=8) + email = models.EmailField(default="") + alternate_email = models.EmailField(null=True) year_of_admission = models.IntegerField(null=True, choices=Constants.YEAR_OF_ADDMISSION) batch = models.ForeignKey(Batch, on_delete=models.CASCADE) - name = models.CharField(max_length=1000, default="", null=False) + name = models.CharField(max_length=1000, default="", null=True) fathers_name = models.CharField(max_length=1000, default="") - husbands_name = models.CharField(null=True, blank=True, max_length=1000, default="") - programme = models.CharField(max_length=1000, choices=Constants.PROG_CHOICES, null=False) - branch = models.CharField(choices=Constants.BRANCH, max_length=1000, null=False) + spouse_name = models.CharField(null=True, blank=True, max_length=1000, default="") + programme = models.CharField(max_length=1000, choices=Constants.PROG_CHOICES) + branch = models.CharField(choices=Constants.BRANCH, max_length=1000) sex = models.CharField(max_length=2, choices=Constants.SEX_CHOICES, default='M') date_of_birth = models.DateField(default=datetime.date(1970, 1, 1)) current_address = models.TextField(max_length=1000, default="") @@ -74,7 +79,7 @@ class Profile(models.Model): mobile1 = models.BigIntegerField(null=True) mobile2 = models.BigIntegerField(null=True, blank=True) phone_no = models.BigIntegerField(null=True, blank=True) - working_status = models.CharField(max_length=1000, choices=Constants.WORKING_STATUS, default='1', null=False) + working_status = models.CharField(max_length=1000, choices=Constants.WORKING_STATUS, default='1') current_position = models.CharField(max_length=1000, null=True, blank=True) current_organisation = models.CharField(max_length=1000, null=True, blank=True) past_experience = models.IntegerField(null=True, blank=True) @@ -94,7 +99,7 @@ class Profile(models.Model): mail_sent = models.BooleanField(default=False) verify = models.BooleanField(null=True) mail_sent_tracker = FieldTracker(fields=['verify']) - + user_type = models.CharField(max_length=2, choices=Constants.USER_TYPE, default='A') def __str__(self): return self.name From c607e7df7516a08bbb7b3f2da9cc9026fe11c2be Mon Sep 17 00:00:00 2001 From: Saksham-1508 Date: Mon, 7 Feb 2022 23:04:59 +0530 Subject: [PATCH 2/7] removed extra fields from forms --- AlumniConnect/forms.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/AlumniConnect/forms.py b/AlumniConnect/forms.py index 9fdc7b2a..b0bacff0 100644 --- a/AlumniConnect/forms.py +++ b/AlumniConnect/forms.py @@ -55,9 +55,9 @@ def __init__(self, *args, **kwargs): self.fields['mobile2'].label = "Alternate Mobile No." self.fields['batch'].label = 'Year of Passing' self.fields['sex'].label = 'Gender' - self.fields['phone_no'].label = 'Phone No.' self.fields['date_of_birth'].label = 'Date of Birth' self.fields['year_of_admission'].label = 'Year of Admission' + self.fields['alternate_email'].label = 'Alternate Email' # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the SAC' self.fields[ 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' @@ -74,7 +74,7 @@ def __init__(self, *args, **kwargs): css_class='form-row my-3', ), Div( - Field('email', css_class="form-control", wrapper_class='col-md-5'), + Field('alternate_email', css_class="form-control", wrapper_class='col-md-5'), css_class='form-row my-3', ), Div( @@ -137,7 +137,7 @@ def __init__(self, *args, **kwargs): ) def clean(self): - super(Alumini_NewRegister, self).clean() # if necessary + super(Alumni_NewRegister, self).clean() # if necessary del self._errors['country'] del self._errors['city'] del self._errors['state'] @@ -151,8 +151,6 @@ class Meta: 'country', 'state', 'year_of_admission', - 'alternate_email', - 'phone_no', 'mobile1', 'mobile2', 'facebook', @@ -161,8 +159,7 @@ class Meta: 'fathers_name', 'spouse_name', 'sex', - 'email', - 'roll_no', + 'alternate_email', 'date_of_birth', 'date_of_joining', 'working_status', @@ -171,7 +168,6 @@ class Meta: 'batch', 'current_address', 'permanent_address', - 'phone_no', 'current_position', 'current_organisation', 'past_experience', @@ -237,6 +233,7 @@ def __init__(self, *args, **kwargs): self.fields['sex'].label = 'Gender' self.fields['date_of_birth'].label = 'Date of Birth' self.fields['year_of_admission'].label = 'Year of Admission' + self.fields['alternate_email'].label = 'Alternate Email' # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the SAC' self.fields[ 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' @@ -249,7 +246,7 @@ def __init__(self, *args, **kwargs): css_class='form-row my-3', ), Div( - Field('email', css_class="form-control",wrapper_class='col-md-5'), + Field('alternate_email', css_class="form-control",wrapper_class='col-md-5'), Field('sex', css_class="custom-select",wrapper_class="col-md-5"), css_class='form-row my-3', ), @@ -332,7 +329,7 @@ class Meta: 'mobile2', 'facebook', 'instagram', - 'name', + 'alternate_email', 'fathers_name', 'sex', 'email', @@ -742,7 +739,7 @@ class SignUp(UserCreationForm): label='Enter password', widget=forms.PasswordInput(attrs={'placeholder': 'Enter your password'})) password2 = forms.CharField( label='Confirm password', widget=forms.PasswordInput(attrs={'placeholder': 'Reenter your password'})) - user_type = forms.ChoiceField(choices=(('A', 'Alumini'), ('S', 'Student'))) + user_type = forms.ChoiceField(choices=(('A', 'Alumni'), ('S', 'Student'))) def clean_email(self): email = self.cleaned_data['email'].lower() From e410dfbc6c7b3b1949a8169451bc0de726b1b2af Mon Sep 17 00:00:00 2001 From: Saksham-1508 Date: Thu, 10 Feb 2022 09:57:24 +0530 Subject: [PATCH 3/7] name field added in student form --- AlumniConnect/forms.py | 6 ++++-- templates/AlumniConnect/login.html | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/AlumniConnect/forms.py b/AlumniConnect/forms.py index b0bacff0..7da9a986 100644 --- a/AlumniConnect/forms.py +++ b/AlumniConnect/forms.py @@ -175,7 +175,8 @@ class Meta: 'current_university', 'linkedin', 'website', - 'profile_picture'] + 'profile_picture', + 'checkbox_update'] widgets = { 'working_status': forms.RadioSelect(choices=Constants.WORKING_STATUS), @@ -321,6 +322,7 @@ class Meta: model = Profile fields = [ + 'name', 'city', 'country', 'state', @@ -332,12 +334,12 @@ class Meta: 'alternate_email', 'fathers_name', 'sex', - 'email', 'date_of_birth', 'branch', 'programme', 'batch', 'current_address', + 'checkbox_update', 'permanent_address', 'linkedin', 'website', diff --git a/templates/AlumniConnect/login.html b/templates/AlumniConnect/login.html index c55e74d5..c8bf71de 100644 --- a/templates/AlumniConnect/login.html +++ b/templates/AlumniConnect/login.html @@ -34,7 +34,7 @@

From c64916493ee9f52548047c3b5ee6d2910ec4cd1f Mon Sep 17 00:00:00 2001 From: Saksham-1508 Date: Fri, 18 Feb 2022 23:21:19 +0530 Subject: [PATCH 6/7] moved model forms to template --- AlumniConnect/forms.py | 491 +---------------- AlumniConnect/urls.py | 1 + AlumniConnect/views.py | 49 +- applications/adminportal/views.py | 3 +- applications/alumniprofile/models.py | 16 +- templates/AlumniConnect/acc_active_email.html | 498 +++++++++++++++++- templates/AlumniConnect/confirm_email.html | 4 +- templates/AlumniConnect/confirm_profile.html | 74 +++ templates/AlumniConnect/profileedit.html | 122 +++-- templates/AlumniConnect/signup.html | 112 +++- templates/alumniprofile/profile_form.html | 284 ++++++++++ 11 files changed, 1047 insertions(+), 607 deletions(-) create mode 100644 templates/AlumniConnect/confirm_profile.html create mode 100644 templates/alumniprofile/profile_form.html diff --git a/AlumniConnect/forms.py b/AlumniConnect/forms.py index 1077b3c1..6aa98542 100644 --- a/AlumniConnect/forms.py +++ b/AlumniConnect/forms.py @@ -9,135 +9,20 @@ from crispy_forms.bootstrap import InlineRadios import re # --------------------------------REGISTRATION FORMS FOR STUDENTS AND ALUMNI START-------------------------------------------------------- -class Alumni_NewRegister(forms.ModelForm): - date_of_birth = forms.DateField( - widget=forms.TextInput( - attrs={'type': 'date'} - ), - ) - date_of_joining = forms.DateField( - widget=forms.TextInput( - attrs={'type': 'date'} - ), - required=False, - ) - current_address = forms.CharField( - widget=forms.Textarea( - attrs={'rows': 3, 'placeholder': 'Enter Address'} - ), - max_length=4000, - ) - permanent_address = forms.CharField( - widget=forms.Textarea( - attrs={'rows': 3, 'placeholder': 'Enter Permanent Address', } - ), - max_length=4000, - required=False, - ) + +class ProfileNewRegister(forms.ModelForm): + country = forms.ChoiceField(widget=forms.Select( attrs={'id': 'countryId', 'class': 'countries order-alpha presel-IN custom-select', 'name': 'country'})) state = forms.ChoiceField( widget=forms.Select(attrs={'id': 'stateId', 'class': 'states order-alpha custom-select', 'name': 'state'})) city = forms.ChoiceField( widget=forms.Select(attrs={'id': 'cityId', 'class': 'cities order-alpha custom-select', 'name': 'city'})) - linkedin = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Linkedin URL'})) - website = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Website'}), required=False) - facebook = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Facebook URL'}), required=False) - # checkbox_terms = forms.BooleanField(required=True) - instagram = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Instagram Username'}), required=False) + checkbox_update = forms.BooleanField(required=True) - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.fields['fathers_name'].label = "Father/Mother's Name" - self.fields['spouse_name'].label = "Spouse's Name" - self.fields['mobile1'].label = "Mobile No." - self.fields['mobile2'].label = "Alternate Mobile No." - self.fields['batch'].label = 'Year of Passing' - self.fields['sex'].label = 'Gender' - self.fields['date_of_birth'].label = 'Date of Birth' - self.fields['year_of_admission'].label = 'Year of Admission' - self.fields['alternate_email'].label = 'Alternate Email' - # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the SAC' - self.fields[ - 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' - self.helper = FormHelper() - self.helper.layout = Layout( - Div( - Field('name', css_class="form-control", wrapper_class='col-md-5'), - Field('fathers_name', css_class="form-control", wrapper_class='col-md-5'), - css_class='form-row my-3', - ), - Div( - Field('sex', css_class="custom-select", wrapper_class="col-md-5"), - Field('spouse_name', css_class="form-control", wrapper_class='col-md-5'), - css_class='form-row my-3', - ), - Div( - Field('alternate_email', css_class="form-control", wrapper_class='col-md-5'), - css_class='form-row my-3', - ), - Div( - Field('date_of_birth', css_class="form-control", wrapper_class='col-md-4'), - Field('year_of_admission', css_class="custom-select", wrapper_class='col-md-4'), - Field('batch', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('branch', css_class="custom-select", wrapper_class="col-md-5"), - Field('programme', css_class="custom-select", wrapper_class="col-md-5"), - css_class='form-row my-3', - ), - Div( - Field('mobile1', css_class="form-control", wrapper_class='col-md-5'), - Field('mobile2', css_class="form-control", wrapper_class='col-md-5'), - css_class='form-row my-3', - ), - Div( - Field('current_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row my-3', - ), - Div( - Field('country', wrapper_class="col-md-4"), - Field('state', wrapper_class="col-md-4"), - Field('city', wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('permanent_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row my-3', - ), - InlineRadios('working_status'), - Div( - Field('current_position', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('current_organisation', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('date_of_joining', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('past_experience', css_class="form-control", wrapper_class="col-md-6 col-lg-4"), - css_class='form-row my-3', - ), - Div( - Field('current_course', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('current_university', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - css_class='form-row my-3', - ), - Div( - Field('linkedin', css_class="form-control", wrapper_class='col-md-6'), - Field('website', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Div( - Field('facebook', css_class="form-control", wrapper_class='col-md-6'), - Field('instagram', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Field('profile_picture', css_class="w-100"), - # 'profile_picture', - 'checkbox_update', - Submit('submit', 'Register'), - ) - def clean(self): - super(Alumni_NewRegister, self).clean() # if necessary + super(ProfileNewRegister, self).clean() # if necessary del self._errors['country'] del self._errors['city'] del self._errors['state'] @@ -182,169 +67,6 @@ class Meta: 'working_status': forms.RadioSelect(choices=Constants.WORKING_STATUS), } - -class Student_NewRegister(forms.ModelForm): - date_of_birth = forms.DateField( - widget=forms.TextInput( - attrs={'type': 'date'} - ), - ) - date_of_joining = forms.DateField( - widget=forms.TextInput( - attrs={'type': 'date'} - ), - required=False, - ) - current_address = forms.CharField( - widget=forms.Textarea( - attrs={'rows': 3, 'placeholder': 'Enter Address'} - ), - max_length=4000, - ) - permanent_address = forms.CharField( - widget=forms.Textarea( - attrs={'rows': 3, 'placeholder': 'Enter Permanent Address', } - ), - max_length=4000, - required=False, - ) - country = forms.ChoiceField(widget=forms.Select( - attrs={'id': 'countryId', 'class': 'countries order-alpha presel-IN custom-select', 'name': 'country'})) - state = forms.ChoiceField( - widget=forms.Select(attrs={'id': 'stateId', 'class': 'states order-alpha custom-select', 'name': 'state'})) - city = forms.ChoiceField( - widget=forms.Select(attrs={'id': 'cityId', 'class': 'cities order-alpha custom-select', 'name': 'city'})) - linkedin = forms.URLField(widget=forms.TextInput( - attrs={'placeholder': 'Linkedin URL'})) - website = forms.URLField(widget=forms.TextInput( - attrs={'placeholder': 'Website'}), required=False) - facebook = forms.URLField(widget=forms.TextInput( - attrs={'placeholder': 'Facebook URL'}), required=False) - # checkbox_terms = forms.BooleanField(required=True) - instagram = forms.CharField(widget=forms.TextInput( - attrs={'placeholder': 'Instagram Username'}), required=False) - checkbox_update = forms.BooleanField(required=True) - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.fields['fathers_name'].label = "Father/Mother's Name" - self.fields['mobile1'].label = "Mobile No." - self.fields['mobile2'].label = "Alternate Mobile No." - self.fields['batch'].label = 'Year of Passing' - self.fields['sex'].label = 'Gender' - self.fields['date_of_birth'].label = 'Date of Birth' - self.fields['year_of_admission'].label = 'Year of Admission' - self.fields['alternate_email'].label = 'Alternate Email' - # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the SAC' - self.fields[ - 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' - self.helper = FormHelper() - - self.helper.layout = Layout( - Div( - Field('name', css_class="form-control",wrapper_class='col-md-5'), - Field('fathers_name', css_class="form-control",wrapper_class='col-md-5'), - css_class='form-row my-3', - ), - Div( - Field('alternate_email', css_class="form-control",wrapper_class='col-md-5'), - Field('sex', css_class="custom-select",wrapper_class="col-md-5"), - css_class='form-row my-3', - ), - Div( - Field('date_of_birth', css_class="form-control", - wrapper_class='col-md-4'), - Field('year_of_admission', css_class="custom-select", - wrapper_class='col-md-4'), - Field('batch', css_class="custom-select", - wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('branch', css_class="custom-select", - wrapper_class="col-md-5"), - Field('programme', css_class="custom-select", - wrapper_class="col-md-5"), - css_class='form-row my-3', - ), - Div( - Field('mobile1', css_class="form-control", - wrapper_class='col-md-5'), - Field('mobile2', css_class="form-control", - wrapper_class='col-md-5'), - css_class='form-row my-3', - ), - Div( - Field('current_address', css_class="form-control", - wrapper_class='col-md'), - css_class='form-row my-3', - ), - Div( - Field('country', wrapper_class="col-md-4"), - Field('state', wrapper_class="col-md-4"), - Field('city', wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('permanent_address', css_class="form-control", - wrapper_class='col-md'), - css_class='form-row my-3', - ), - Div( - Field('linkedin', css_class="form-control", - wrapper_class='col-md-6'), - Field('website', css_class="form-control", - wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Div( - Field('facebook', css_class="form-control", - wrapper_class='col-md-6'), - Field('instagram', css_class="form-control", - wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Field('profile_picture', css_class="w-100"), - # 'profile_picture', - 'checkbox_update', - - Submit('submit', 'Register'), - ) - - def clean(self): - super(Student_NewRegister, self).clean() # if necessary - del self._errors['country'] - del self._errors['city'] - del self._errors['state'] - return self.cleaned_data - - class Meta: - model = Profile - - fields = [ - 'name', - 'city', - 'country', - 'state', - 'year_of_admission', - 'mobile1', - 'mobile2', - 'facebook', - 'instagram', - 'alternate_email', - 'fathers_name', - 'sex', - 'date_of_birth', - 'branch', - 'programme', - 'batch', - 'current_address', - 'checkbox_update', - 'permanent_address', - 'linkedin', - 'website', - 'profile_picture'] - # --------------------------------REGISTRATION FORMS FOR STUDENTS AND ALUMNI END-------------------------------------------------------- class RegisterForm(forms.ModelForm): @@ -550,198 +272,9 @@ class Meta: } -class NewRegister(forms.ModelForm): - date_of_birth = forms.DateField( - widget=forms.TextInput( - attrs={'type': 'date'} - ), - ) - date_of_joining = forms.DateField( - widget=forms.TextInput( - attrs={'type': 'date'} - ), - required=False, - ) - current_address = forms.CharField( - widget=forms.Textarea( - attrs={'rows': 3, 'placeholder': 'Enter Address'} - ), - max_length=4000, - ) - permanent_address = forms.CharField( - widget=forms.Textarea( - attrs={'rows': 3, 'placeholder': 'Enter Permanent Address', } - ), - max_length=4000, - required=False, - ) - country = forms.ChoiceField(widget=forms.Select( - attrs={'id': 'countryId', 'class': 'countries order-alpha presel-IN custom-select', 'name': 'country'})) - state = forms.ChoiceField( - widget=forms.Select(attrs={'id': 'stateId', 'class': 'states order-alpha custom-select', 'name': 'state'})) - city = forms.ChoiceField( - widget=forms.Select(attrs={'id': 'cityId', 'class': 'cities order-alpha custom-select', 'name': 'city'})) - linkedin = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Linkedin URL'})) - website = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Website'}), required=False) - facebook = forms.URLField(widget=forms.TextInput(attrs={'placeholder': 'Facebook URL'}), required=False) - # checkbox_terms = forms.BooleanField(required=True) - instagram = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Instagram Username'}), required=False) - checkbox_update = forms.BooleanField(required=True) - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.fields['fathers_name'].label = "Father/Mother's Name" - self.fields['spouse_name'].label = "Husband's Name" - self.fields['mobile1'].label = "Mobile No." - self.fields['mobile2'].label = "Alternate Mobile No." - self.fields['batch'].label = 'Year of Passing' - self.fields['sex'].label = 'Gender' - self.fields['phone_no'].label = 'Phone No.' - self.fields['roll_no'].label = 'Roll No.' - self.fields['date_of_birth'].label = 'Date of Birth' - self.fields['year_of_admission'].label = 'Year of Admission' - self.fields['alternate_email'].label = 'Alternate Email' - # self.fields['checkbox_terms'].label = 'I abide by the Terms and Conditions of the Alumni Cell' - self.fields[ - 'checkbox_update'].label = 'I will update my information at regular intervals and will engage in the Alumni network actively.' - self.helper = FormHelper() - self.helper.layout = Layout( - Div( - Field('roll_no', css_class="form-control", wrapper_class='col-md-4'), - Field('name', css_class="form-control", wrapper_class='col-md-4'), - Field('sex', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('fathers_name', css_class="form-control", wrapper_class='col-md-6'), - Field('spouse_name', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Div( - Field('date_of_birth', css_class="form-control", wrapper_class='col-md-4'), - Field('year_of_admission', css_class="custom-select", wrapper_class='col-md-4'), - Field('batch', css_class="custom-select", wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('branch', css_class="custom-select", wrapper_class="col-md-6"), - Field('programme', css_class="custom-select", wrapper_class="col-md-6"), - css_class='form-row my-3', - ), - Div( - Field('mobile1', css_class="form-control", wrapper_class='col-md-4'), - Field('mobile2', css_class="form-control", wrapper_class='col-md-4'), - Field('phone_no', css_class="form-control", wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('email', css_class="form-control", wrapper_class='col-md-6'), - Field('alternate_email', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Div( - Field('current_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row my-3', - ), - Div( - Field('country', wrapper_class="col-md-4"), - Field('state', wrapper_class="col-md-4"), - Field('city', wrapper_class="col-md-4"), - css_class='form-row my-3', - ), - Div( - Field('permanent_address', css_class="form-control", wrapper_class='col-md'), - css_class='form-row my-3', - ), - InlineRadios('working_status'), - Div( - Field('current_position', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('current_organisation', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('date_of_joining', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('past_experience', css_class="form-control", wrapper_class="col-md-6 col-lg-4"), - css_class='form-row my-3', - ), - Div( - Field('current_course', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - Field('current_university', css_class="form-control", wrapper_class='col-md-6 col-lg-4'), - css_class='form-row my-3', - ), - Div( - Field('linkedin', css_class="form-control", wrapper_class='col-md-6'), - Field('website', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Div( - Field('facebook', css_class="form-control", wrapper_class='col-md-6'), - Field('instagram', css_class="form-control", wrapper_class='col-md-6'), - css_class='form-row my-3', - ), - Field('profile_picture', css_class="w-100"), - # 'profile_picture', - 'checkbox_update', - Submit('submit', 'Register'), - ) - - def clean(self): - super(NewRegister, self).clean() # if necessary - del self._errors['country'] - del self._errors['city'] - del self._errors['state'] - return self.cleaned_data - - class Meta: - model = Profile - - fields = [ - 'city', - 'country', - 'state', - 'year_of_admission', - 'alternate_email', - 'phone_no', - 'mobile1', - 'mobile2', - 'facebook', - 'instagram', - 'name', - 'fathers_name', - 'spouse_name', - 'sex', - 'email', - 'roll_no', - 'date_of_birth', - 'date_of_joining', - 'working_status', - 'branch', - 'programme', - 'batch', - 'current_address', - 'permanent_address', - 'phone_no', - 'current_position', - 'current_organisation', - 'past_experience', - 'current_course', - 'current_university', - 'linkedin', - 'website', - 'profile_picture'] - - widgets = { - 'working_status': forms.RadioSelect(choices=Constants.WORKING_STATUS), - } - - class SignUp(UserCreationForm): - username = forms.CharField( - label='Enter Username', min_length=4, max_length=150, widget=forms.TextInput(attrs={'placeholder': 'Enter your roll number'})) - email = forms.EmailField(label='Enter email', widget=forms.EmailInput( - attrs={'placeholder': 'Enter your email'})) - password1 = forms.CharField( - label='Enter password', widget=forms.PasswordInput(attrs={'placeholder': 'Enter your password'})) - password2 = forms.CharField( - label='Confirm password', widget=forms.PasswordInput(attrs={'placeholder': 'Reenter your password'})) - user_type = forms.ChoiceField(choices=(('A', 'Alumni'), ('S', 'Student'))) + + user_role = forms.ChoiceField(choices=(('A', 'Alumni'), ('S', 'Student'))) def clean_email(self): email = self.cleaned_data['email'].lower() @@ -756,9 +289,11 @@ def clean_email(self): def clean_username(self): username = self.cleaned_data.get('username').lower() r = User.objects.filter(username=username) - match = re.search('20\w\w\w\d\d\d', username) - match2 = re.search('20\d\d\d\d\d', username) - if(match == match2 == None): + + # New regex matching for institute id (also added in signup.html) + match = re.search('20(([A-Za-z]{3,5})|(\d{2}))\d{2,5}', username) + + if(match == None): raise ValidationError( 'Please enter your institute roll number.' ) @@ -766,7 +301,7 @@ def clean_username(self): class Meta: model = User - fields = ['username', 'email', 'password1', 'password2', 'user_type'] + fields = ['username', 'email', 'password1', 'password2', 'user_role'] class PasswordResetRequestForm(forms.Form): roll_no = forms.IntegerField(label=("Roll No.")) email = forms.CharField(label=("Email"), max_length=254) diff --git a/AlumniConnect/urls.py b/AlumniConnect/urls.py index 7309b169..c9d0bd7e 100644 --- a/AlumniConnect/urls.py +++ b/AlumniConnect/urls.py @@ -41,6 +41,7 @@ path('signup/', views.signup, name='signup'), re_path(r'^activate/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', views.activate, name='activate'), path('confirm/', TemplateView.as_view(template_name='AlumniConnect/confirm_email.html'), name = 'confirm'), + path('confirmprofile/', TemplateView.as_view(template_name='AlumniConnect/confirm_profile.html'), name = 'confirmprofile'), path('success/', TemplateView.as_view(template_name='AlumniConnect/account_success.html'), name = 'success'), re_path('^', include('django.contrib.auth.urls')), path('password/', views.change_password, name='change_password'), diff --git a/AlumniConnect/views.py b/AlumniConnect/views.py index 79efa930..c9ab4e61 100644 --- a/AlumniConnect/views.py +++ b/AlumniConnect/views.py @@ -20,7 +20,7 @@ from django.utils.encoding import force_bytes from django.utils.html import strip_tags from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode -from .forms import RegisterForm, ProfileEdit, Alumni_NewRegister, Student_NewRegister, SignUp +from .forms import RegisterForm, ProfileEdit, ProfileNewRegister, SignUp from .token import account_activation_token from applications.events_news.models import Event, Attendees from applications.alumniprofile.models import Batch, Profile, Constants @@ -125,23 +125,21 @@ def signup(request): if form.is_valid(): # CREATING THE USER FROM THE MODEL FORM DATA - user = form.save(commit=False) - user.username = form.cleaned_data.get('username') - user.email = str(form.cleaned_data.get('email')) + user = form.save() user.is_active = False user.save() - # THEN CREATING THE PROFILE INSTANCE AND SAVING THE USER AND USER_TYPE + # THEN CREATING THE PROFILE INSTANCE AND SAVING THE USER AND user_role profile = Profile.objects.create( roll_no=form.cleaned_data.get('username'), email=form.cleaned_data.get('email'), - user_type=form.cleaned_data.get('user_type'), + user_role=form.cleaned_data.get('user_role'), batch = Batch(2009), user=user, ) profile.save() + # Send Account Activation Email current_site = get_current_site(request) - from_email = settings.DEFAULT_FROM_EMAIL to = [user.email] subject = '[noreply] SAC Account Activation' @@ -157,13 +155,14 @@ def signup(request): fail_silently=False, html_message=html_message, ) messages.success( - request, f'Your account has been created! You are now able to log in') + request, f'Your account has been created! Complete your profile to log in') return render(request, 'AlumniConnect/confirm_email.html') + return render(request, 'AlumniConnect/signup.html', {'form': form}) # return HttpResponseRedirect('/') else: form = SignUp() - return render(request, 'AlumniConnect/signup.html', {'form': form}) + return render(request, 'AlumniConnect/signup.html',{'form':form}) @login_required @@ -188,13 +187,13 @@ def profileedit(request, id): @login_required def profile_completion(request): profile = Profile.objects.get(roll_no=request.user.username) + if profile.name: + return HttpResponseRedirect('/') if request.method == 'POST': - if profile.user_type == 'A': - form = Alumni_NewRegister( - request.POST, request.FILES, instance=profile) - else: - form = Student_NewRegister( - request.POST, request.FILES, instance=profile) + + form = ProfileNewRegister( + request.POST, request.FILES, instance=profile) + # print (request.POST) if form.is_valid(): try: @@ -209,25 +208,23 @@ def profile_completion(request): profile.country = request.POST['country'] profile.state = request.POST['state'] profile.city = request.POST['city'] - profile.user.first_name = first_name - profile.user.last_name = last_name + profile.batch = Batch(request.POST['batch']) request.user.first_name = first_name request.user.last_name = last_name request.user.is_active = False - profile.save() request.user.save() + profile.save() + mappt = addPoints({'city': str(request.POST['city']), 'state': str(request.POST['state']), 'country': str(request.POST['country'])}) print('Adding Map Point Status: ' + str(mappt)) - return HttpResponseRedirect('/') + return HttpResponseRedirect('/confirmprofile/') else: - user_type = 'Alumni' if profile.user_type == 'A' else 'Student' - if profile.user_type == 'A': - form = Alumni_NewRegister() - else: - form = Student_NewRegister() - return render(request, 'AlumniConnect/profileedit.html', {'form': form, 'edit': False}) + form = ProfileNewRegister() + batches = list(Batch.objects.all().order_by('batch')) + context = {'form': form, 'edit': False, 'programmes': Constants.PROG_CHOICES, 'user_role': profile.user_role,'branches': Constants.BRANCH, 'batch_year': batches, 'year_of_admission': Constants.YEAR_OF_ADDMISSION} + return render(request, 'AlumniConnect/profileedit.html', context) def activate(request, uidb64, token): print('inside activate') @@ -241,7 +238,7 @@ def activate(request, uidb64, token): if u is not None and account_activation_token.check_token(u, token) and not u.first_name: u.is_active = True u.save() - # login(request, u) + login(request, u) # return HttpResponse('Thank you for your email confirmation. Now you can login your account.') return HttpResponseRedirect('/profilecompletion/') else: diff --git a/applications/adminportal/views.py b/applications/adminportal/views.py index 3cba41e6..04273006 100644 --- a/applications/adminportal/views.py +++ b/applications/adminportal/views.py @@ -128,12 +128,13 @@ def registrations_index(request): send_verification_email(request, profile) profile.mail_sent = True profile.verify = True + profile.user.is_active = True messages.add_message(request, messages.SUCCESS, "Registration Success, Mail sent to {}".format(profile.name)) elif 'decline' in request.POST: profile.verify = False messages.add_message(request, messages.SUCCESS, "Registration Declined for {}".format(profile.name)) - + profile.user.save() profile.save() except Exception: print(Exception) diff --git a/applications/alumniprofile/models.py b/applications/alumniprofile/models.py index 62f9bfb4..dd4840ac 100644 --- a/applications/alumniprofile/models.py +++ b/applications/alumniprofile/models.py @@ -10,7 +10,7 @@ class Constants: - USER_TYPE = ( + USER_ROLE = ( ('S','Student'), ('A','Alumni') ) @@ -42,14 +42,14 @@ class Constants: WORKING_STATUS = ( ('Is Working', 'Is Working'), ('Is Pursuing Higher Studies', 'Is Pursuing Higher Studies'), - ('Is Self Employed', 'Is Self Employed') + ('Is Self Employed', 'Is Self Employed'), + ('Student', 'Student') ) YEAR_OF_ADDMISSION = tuple((n, str(n)) for n in range(2005, datetime.datetime.now().year)) -class Batch(models.Model): - # batch = models.IntegerField(primary_key=True,choices=Constants.BATCH_OF,default=2009) +class Batch(models.Model): batch = models.IntegerField(primary_key=True) def __str__(self): return str(self.batch) @@ -62,9 +62,9 @@ def upload_photo(instance, filename): class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) - roll_no = models.CharField(primary_key=True,max_length=8) + roll_no = models.CharField(primary_key=True,max_length=15) email = models.EmailField(unique=True,default="") - alternate_email = models.EmailField(null=True) + alternate_email = models.EmailField(null=True,blank=True) year_of_admission = models.IntegerField(null=True, choices=Constants.YEAR_OF_ADDMISSION) batch = models.ForeignKey(Batch, on_delete=models.CASCADE) name = models.CharField(max_length=1000, default="", null=True) @@ -79,7 +79,7 @@ class Profile(models.Model): mobile1 = models.BigIntegerField(null=True) mobile2 = models.BigIntegerField(null=True, blank=True) phone_no = models.BigIntegerField(null=True, blank=True) - working_status = models.CharField(max_length=1000, choices=Constants.WORKING_STATUS, default='1') + working_status = models.CharField(max_length=1000, blank=True,choices=Constants.WORKING_STATUS, default='1') current_position = models.CharField(max_length=1000, null=True, blank=True) current_organisation = models.CharField(max_length=1000, null=True, blank=True) past_experience = models.IntegerField(null=True, blank=True) @@ -99,7 +99,7 @@ class Profile(models.Model): mail_sent = models.BooleanField(default=False) verify = models.BooleanField(null=True) mail_sent_tracker = FieldTracker(fields=['verify']) - user_type = models.CharField(max_length=2, choices=Constants.USER_TYPE, default='A') + user_role = models.CharField(max_length=2, choices=Constants.USER_ROLE, default='A') def __str__(self): return self.name diff --git a/templates/AlumniConnect/acc_active_email.html b/templates/AlumniConnect/acc_active_email.html index ccdc3f7c..703bbd37 100644 --- a/templates/AlumniConnect/acc_active_email.html +++ b/templates/AlumniConnect/acc_active_email.html @@ -1,12 +1,486 @@ -{% autoescape off %} -Hi {{ user }},
-
-Your account has successfully created. Please click below link to activate your account...
-Username : {{ user }}
-
-http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
-
-
-Regards,
-SAC -{% endautoescape %} \ No newline at end of file + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ + + + + + +
+
+ + + + + + +
+
+
+ Thanks for signing up, + {{ user }}! 
+
+
+
+ + + + + + +
+
+
+ Your account has been created. +
+ Your username is: {{user}}. +
+
+ Please click on the below link to complete your profile. +
+
+ Thank + you! 
+
+
+
+ + + + + + +
+
+ + + + + + +
+ + + + + + +
+ Complete Profile +
+
+ + + + + + +
+
+ + + + + + +
+
+
+ We kindly request you to:
+
+
+
+ 1. + Keep your profile up-to-date.
+
+
+
+ 2. + Post relevant job postings on the website so that your juniors may get benefitted.
+ +
+
+
+ + + + + + +
+ + + + + + +
+ Visit website +
+
+ + + + + + +
+
+
+ +
+ +
+ +
+
+
+
+
+ + + + + diff --git a/templates/AlumniConnect/confirm_email.html b/templates/AlumniConnect/confirm_email.html index 2125c87c..f715cacc 100644 --- a/templates/AlumniConnect/confirm_email.html +++ b/templates/AlumniConnect/confirm_email.html @@ -37,10 +37,10 @@

- Thank you for registering to IIITDMJ Alumni Association. You will be receiving an email from Admin after verification. + Thank you for registering to IIITDMJ Alumni Association. You will be receiving an email for verifying your email address.

- Thank you again! + Once verified, you'll be able to go ahead and complete your profile.

diff --git a/templates/AlumniConnect/confirm_profile.html b/templates/AlumniConnect/confirm_profile.html new file mode 100644 index 00000000..3082d76c --- /dev/null +++ b/templates/AlumniConnect/confirm_profile.html @@ -0,0 +1,74 @@ +{% extends 'globals/base.html' %} +{% load crispy_forms_tags %} + +{% load static %} + +{% block title %} +Alumni Connect +{% endblock %} + +{% block body %} +{% include 'globals/navbar.html' %} +
+ +
+
+
+
+

+ +

+
+
+

+ ALUMNI CONNECT +

+
+
+
+
+ +
+
+ +
+ +
+{% include 'globals/footer.html' %} +{% endblock %} + \ No newline at end of file diff --git a/templates/AlumniConnect/profileedit.html b/templates/AlumniConnect/profileedit.html index 73409eaf..794c0d92 100644 --- a/templates/AlumniConnect/profileedit.html +++ b/templates/AlumniConnect/profileedit.html @@ -31,58 +31,74 @@ window.onload = load; {% endblock %} @@ -130,7 +146,11 @@

Registration Form

{% csrf_token %} - {% crispy form %} + {% if edit %} + {% crispy form %} + {% else %} + {% include 'alumniprofile/profile_form.html' %} + {% endif %}
diff --git a/templates/AlumniConnect/signup.html b/templates/AlumniConnect/signup.html index e939c54b..b95d31c2 100644 --- a/templates/AlumniConnect/signup.html +++ b/templates/AlumniConnect/signup.html @@ -2,19 +2,22 @@ {% load static %} {% load crispy_forms_tags %} {% block title %} -AlumniConnect - Login +AlumniConnect - SignUp {% endblock %} {% block body %} {% include 'globals/navbar.html' %} -
+ +

- +

@@ -28,37 +31,88 @@

- +{% if form.errors %} + {% for field in form %} + {% for error in field.errors %} + + {% endfor %} + {% endfor %} +{% endif %}
-