diff --git a/HTTP_200/settings.py b/HTTP_200/settings.py index 4b365c14..f0018230 100644 --- a/HTTP_200/settings.py +++ b/HTTP_200/settings.py @@ -57,6 +57,7 @@ 'debug_toolbar', 'import_export', 'wifi', + 'emailform', 'rest_framework_docs', 'rest_framework.authtoken', 'notifications', @@ -263,6 +264,7 @@ ] MEDIA_ROOT = os.path.join(TEMPLATE_DIR, 'media') +MEDIA_URL = '/media/' SPAGHETTI_SAUCE = { 'apps': ['auth', 'notices', 'profiles', 'notifications'], diff --git a/HTTP_200/templates/bookmark.html b/HTTP_200/templates/bookmark.html index 99048877..b2ecfe1a 100644 --- a/HTTP_200/templates/bookmark.html +++ b/HTTP_200/templates/bookmark.html @@ -127,6 +127,10 @@  Wifi-Form +
  • + +  Email-Form +
  • {% endif %}
  • diff --git a/HTTP_200/templates/email/studentemailform.html b/HTTP_200/templates/email/studentemailform.html new file mode 100644 index 00000000..4434f3c6 --- /dev/null +++ b/HTTP_200/templates/email/studentemailform.html @@ -0,0 +1,539 @@ +{% load staticfiles %} + + + + + E-mail + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    + + + + {% for message in messages %} +
    + {{ message }} +
    + {% endfor %} + +
    +
    +
    +
    + +
    +
    +
    + +
    + + +
    + +
    +
    + + + + +
    +
    +
    +
    +

    E-mail Form

    +
    + +
    +
    +
    + +
    + + {% csrf_token %} + +
    +
    +

     Username

    + +
    +
    +

     First Name

    + +
    +
    +

     Last Name

    + +
    +
    + +
    +
    +

     Course

    + +
    + +
    +

     Branch

    + +
    + +
    +

     Year

    + +
    + +
    +
    + {% if email_data %} +
    +

     Purpose

    + +
    +
    +

     Application Attachment

    + +
    + {% if email_data.hod_approval %} +
    +

     HOD's Approved

    + +
    + {% else %} +
    +

     HOD's Approved

    + +
    + {% endif %} + + {% else %} +
    + {% csrf_token %} +
    +

     Purpose

    + +
    +
    +

     Application Attachment

    + +
    +
    +

     HOD's Approved

    + +
    + {% endif %} +
    +
    +
    + +
    +
    +
    + + + +
    + +
    + +
    + + + +
    + +
    + + +
    + + + + + + + + + + + + + + + + diff --git a/HTTP_200/templates/notices/list.html b/HTTP_200/templates/notices/list.html index 07cdbd6e..06923784 100644 --- a/HTTP_200/templates/notices/list.html +++ b/HTTP_200/templates/notices/list.html @@ -125,6 +125,10 @@  Wifi-Form
  • +
  • + +  Email-Form +
  • {% endif %}
  • diff --git a/HTTP_200/templates/profiles/profile.html b/HTTP_200/templates/profiles/profile.html index 6d15d185..3415bca9 100644 --- a/HTTP_200/templates/profiles/profile.html +++ b/HTTP_200/templates/profiles/profile.html @@ -125,6 +125,10 @@  Wifi-Form
  • +
  • + +  Email-Form +
  • {% endif %}
  • diff --git a/HTTP_200/templates/wifi/studentwifiform.html b/HTTP_200/templates/wifi/studentwifiform.html index 99f9c47a..13e28f6a 100644 --- a/HTTP_200/templates/wifi/studentwifiform.html +++ b/HTTP_200/templates/wifi/studentwifiform.html @@ -134,6 +134,10 @@  Wifi-Form
  • +
  • + +  Email-Form +
  • {% endif %}
  • diff --git a/HTTP_200/urls.py b/HTTP_200/urls.py index 9c46d45b..edead407 100644 --- a/HTTP_200/urls.py +++ b/HTTP_200/urls.py @@ -36,6 +36,7 @@ url(r'^students/create/single/$', SingleUser.as_view(), name='single_user_create'), url(r'^students/create/$', BulkUser.as_view(), name='bulk_students_create'), url(r'wifi/', include('wifi.urls')), + url(r'emailforms/', include('emailform.urls')), # api urls url(r'^api/profiles/', include("profiles.api.urls", namespace='profiles_api')), diff --git a/apps/emailform/__init__.py b/apps/emailform/__init__.py new file mode 100644 index 00000000..5f38b64e --- /dev/null +++ b/apps/emailform/__init__.py @@ -0,0 +1 @@ +default_app_config = 'emailform.apps.AuthConfig' diff --git a/apps/emailform/admin.py b/apps/emailform/admin.py new file mode 100644 index 00000000..db19a411 --- /dev/null +++ b/apps/emailform/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin +from .models import EmailDetail + + +class EmailAdmin(admin.ModelAdmin): + list_display = ('__unicode__', 'email', 'name', 'hod_approval', 'created', 'modified') + search_fields = ('email', 'name', 'email_purpose') + list_filter = ('hod_approval',) + + +admin.site.register(EmailDetail, EmailAdmin) diff --git a/apps/emailform/apps.py b/apps/emailform/apps.py new file mode 100644 index 00000000..66e39de7 --- /dev/null +++ b/apps/emailform/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import ugettext_lazy as _ + + +class AuthConfig(AppConfig): + name = 'emailform' + verbose_name = _("Email Form") diff --git a/apps/emailform/forms.py b/apps/emailform/forms.py new file mode 100644 index 00000000..25151373 --- /dev/null +++ b/apps/emailform/forms.py @@ -0,0 +1,10 @@ +from django import forms +from .models import EmailDetail + + +class EmailForm(forms.ModelForm): + + class Meta: + model = EmailDetail + fields = ['email_purpose', 'attachment', 'hod_approval'] + exclude = ['user', ] diff --git a/apps/emailform/migrations/0001_initial.py b/apps/emailform/migrations/0001_initial.py new file mode 100644 index 00000000..528ebad7 --- /dev/null +++ b/apps/emailform/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='EmailDetail', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('email_purpose', models.TextField(default=None, max_length=200, null=True, blank=True)), + ('attachment', models.FileField(null=True, upload_to=b'forms/email/', blank=True)), + ('hod_approved_email', models.BooleanField(default=False)), + ('created', models.DateTimeField(auto_now_add=True, verbose_name=b'Created', null=True)), + ('modified', models.DateTimeField(auto_now=True, verbose_name=b'Last Modified', null=True)), + ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/apps/emailform/migrations/0002_auto_20210924_1514.py b/apps/emailform/migrations/0002_auto_20210924_1514.py new file mode 100644 index 00000000..ead7e9cb --- /dev/null +++ b/apps/emailform/migrations/0002_auto_20210924_1514.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('emailform', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='emaildetail', + old_name='hod_approved_email', + new_name='hod_approval', + ), + ] diff --git a/apps/emailform/migrations/__init__.py b/apps/emailform/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/emailform/models.py b/apps/emailform/models.py new file mode 100644 index 00000000..e9467ece --- /dev/null +++ b/apps/emailform/models.py @@ -0,0 +1,29 @@ +from django.db import models +from django.contrib.auth.models import User + + +class EmailDetail(models.Model): + ''' + It stores information about the email form of all users. + ''' + user = models.OneToOneField(User) + email_purpose = models.TextField(max_length=200, + blank=True, + null=True, + default=None) + attachment = models.FileField(upload_to='forms/email/', + blank=True, + null=True) + hod_approval = models.BooleanField(default=False) + + created = models.DateTimeField("Created", null=True, auto_now_add=True) + modified = models.DateTimeField("Last Modified", null=True, auto_now=True) + + def email(self): + return "%s" % (self.user.email) + + def name(self): + return "%s" % (self.user.first_name) + + def __unicode__(self): + return "%s" % (self.user) diff --git a/apps/emailform/tests.py b/apps/emailform/tests.py new file mode 100644 index 00000000..a39b155a --- /dev/null +++ b/apps/emailform/tests.py @@ -0,0 +1 @@ +# Create your tests here. diff --git a/apps/emailform/urls.py b/apps/emailform/urls.py new file mode 100644 index 00000000..f4092953 --- /dev/null +++ b/apps/emailform/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url +from emailform.views import StudentEmailForm + + +urlpatterns = [ + url(r'^email$', StudentEmailForm.as_view(), name="student-email"), +] diff --git a/apps/emailform/views.py b/apps/emailform/views.py new file mode 100644 index 00000000..aa1316de --- /dev/null +++ b/apps/emailform/views.py @@ -0,0 +1,47 @@ +from .models import EmailDetail +from profiles.models import StudentDetail +from django.contrib.auth.models import User +from django.http import HttpResponseRedirect +from braces.views import LoginRequiredMixin +from django.views.generic import View +from django.core.urlresolvers import reverse +from notices.decorators import student_profile_complete, default_password_change +from django.utils.decorators import method_decorator +from django.contrib import messages +from django.shortcuts import render +from .forms import EmailForm + + +class StudentEmailForm(LoginRequiredMixin, View): + + @method_decorator(default_password_change) + @method_decorator(student_profile_complete) + def get(self, request): + user = User.objects.get(username=request.user.username) + details = StudentDetail.objects.get(user=user) + try: + email_data = EmailDetail.objects.get(user=user) + if email_data: + return render(request, 'email/studentemailform.html', {"user": user, "details": details, "email_data": email_data}) + except BaseException: + return render(request, 'email/studentemailform.html', {"user": user, "details": details}) + + def post(self, request): + user = User.objects.get(username=request.user.username) + + try: + email_data = EmailDetail.objects.get(user=user) + email_form = EmailForm(request.POST, request.FILES, instance=email_data) + except BaseException: + email_form = EmailForm(request.POST, request.FILES) + + if email_form.is_valid(): + email_form = email_form.save(commit=False) + email_form.user = user + email_form.save() + messages.success(request, "Successfully Registered for Email") + return HttpResponseRedirect(reverse("relevent-notice-list")) + else: + print email_form.errors + messages.error(request, "Enter Valid data in the form.") + return HttpResponseRedirect(reverse("student-email")) diff --git a/apps/notices/decorators.py b/apps/notices/decorators.py index d5352045..c6d1b478 100644 --- a/apps/notices/decorators.py +++ b/apps/notices/decorators.py @@ -4,7 +4,6 @@ from django.core.urlresolvers import reverse from django.contrib.auth.hashers import check_password from django.contrib import messages -import re def student_profile_complete(function): @@ -18,15 +17,15 @@ def wrapper(request, *args, **kwargs): except BaseException: return function(request, *args, **kwargs) - if re.split(r'(\d+)', str(user))[2] == "mca" or re.split(r'(\d+)', str(user))[2] == "mba" or re.split(r'(\d+)', str(user))[2] == "MCA" or re.split(r'(\d+)', str(user))[2] == "MBA": - - if user.first_name == "" or user.email == "" or profile.course is None or profile.year is None or profile.contact_no == "None" or profile.address == "None" or profile.father_name == "None" or profile.father_name == "" or profile.address == "" or profile.contact_no == "": + try: + if user.first_name == "" or user.email == "" or profile.course is None or profile.branch is None or profile.year is None or profile.contact_no == "None" or profile.address == "None" or profile.father_name == "None" or profile.father_name == "" or profile.address == "" or profile.contact_no == "": + print("not MBA") messages.warning(request, "Fill in details to continue") return HttpResponseRedirect(reverse("user-profile", kwargs={"user_id": str(request.user.username)})) else: return function(request, *args, **kwargs) - else: - if user.first_name == "" or user.email == "" or profile.course is None or profile.branch is None or profile.year is None or profile.contact_no == "None" or profile.address == "None" or profile.father_name == "None" or profile.father_name == "" or profile.address == "" or profile.contact_no == "": + except AttributeError: + if user.first_name == "" or user.email == "" or profile.course is None or profile.year is None or profile.contact_no == "None" or profile.address == "None" or profile.father_name == "None" or profile.father_name == "" or profile.address == "" or profile.contact_no == "": messages.warning(request, "Fill in details to continue") return HttpResponseRedirect(reverse("user-profile", kwargs={"user_id": str(request.user.username)})) else: diff --git a/apps/wifi/urls.py b/apps/wifi/urls.py index 16a829d4..02701699 100644 --- a/apps/wifi/urls.py +++ b/apps/wifi/urls.py @@ -4,7 +4,7 @@ urlpatterns = [ - url(r'^student/$', StudentWifiForm.as_view(), name="student-wifi"), - url(r'^faculty/$', FacultyWifiForm.as_view(), name="faculty-wifi"), - url(r'^download_excel/$', excel_writer.as_view(), name="excel_writer"), + url(r'^student/$', StudentWifiForm.as_view(), name="student-wifi"), + url(r'^faculty/$', FacultyWifiForm.as_view(), name="faculty-wifi"), + url(r'^download_excel/$', excel_writer.as_view(), name="excel_writer"), ] diff --git a/requirements/common.txt b/requirements/common.txt index b3644943..275b07e8 100644 --- a/requirements/common.txt +++ b/requirements/common.txt @@ -8,7 +8,7 @@ django-haystack==2.4.0 django-allauth==0.21.0 django-filter==0.11.0 PyJWT==1.7.1 -django-braces==1.14.0 +django-braces==1.13.0 django-autofixture==0.12.1 django-ckeditor==5.0.2 django-spaghetti-and-meatballs==0.1.1