From 1865dd8b3a57c4f1aae844f8b7411e5364a728d0 Mon Sep 17 00:00:00 2001 From: dhruvhacks Date: Mon, 7 May 2018 03:31:38 +0530 Subject: [PATCH] This commit adds - Views to access Newsletters of various departments. - Access to specific groups to add new Newsletters. --- HTTP_200/settings.py | 1 + HTTP_200/templates/index.html | 7 +- .../templates/newsletters/newsletter.html | 288 ++++++++++++++++++ .../templates/newsletters/upload_letter.html | 223 ++++++++++++++ HTTP_200/urls.py | 1 + newsletters/__init__.py | 0 newsletters/admin.py | 15 + newsletters/forms.py | 12 + newsletters/tests.py | 3 + newsletters/urls.py | 9 + newsletters/views.py | 67 ++++ 11 files changed, 625 insertions(+), 1 deletion(-) create mode 100644 HTTP_200/templates/newsletters/newsletter.html create mode 100644 HTTP_200/templates/newsletters/upload_letter.html create mode 100644 newsletters/__init__.py create mode 100644 newsletters/admin.py create mode 100644 newsletters/forms.py create mode 100644 newsletters/tests.py create mode 100644 newsletters/urls.py create mode 100644 newsletters/views.py diff --git a/HTTP_200/settings.py b/HTTP_200/settings.py index ec88e8e..37c391c 100644 --- a/HTTP_200/settings.py +++ b/HTTP_200/settings.py @@ -57,6 +57,7 @@ 'private_notices', 'import_export', 'wifi', + 'newsletters', ) MIDDLEWARE_CLASSES = ( diff --git a/HTTP_200/templates/index.html b/HTTP_200/templates/index.html index 3fe50a6..4beba85 100644 --- a/HTTP_200/templates/index.html +++ b/HTTP_200/templates/index.html @@ -101,7 +101,7 @@

JSS Academy Of Technical Education

 Search -->
  • -  About +  About
  • @@ -111,6 +111,11 @@

    JSS Academy Of Technical Education

     JSS Website
  • +
  • + +  Newsletters +
  • + {% if request.user.is_authenticated %}
  • diff --git a/HTTP_200/templates/newsletters/newsletter.html b/HTTP_200/templates/newsletters/newsletter.html new file mode 100644 index 0000000..dc3289a --- /dev/null +++ b/HTTP_200/templates/newsletters/newsletter.html @@ -0,0 +1,288 @@ +{% load staticfiles %} + + + + JSS InfoConnect + + + + + + + + + + + + + + + +{% for message in messages %} +
    + {{ message }} +
    +{% endfor %} + +
    +
    + + + + + + +
    + +
    + + +
    +
    +
    +
    +
    +
    + + +
    + +
    + +
    + + + + +
    + +
    + + +

    Stay updated, anywhere anytime!

    + + + + {% if request.user.is_authenticated %} +

    Welcome {{ request.user.first_name }} {{ request.user.last_name }}

    + {% else %} +

    Welcome User

    + {% endif %} +
    + + {% if request.user.groups.all.0.name == 'faculty' or request.user.groups.all.0.name == 'hod' or request.user.groups.all.0.name == 'management' %} +
    + Add New +
    + {% endif %} +
    +
    +
    + {% if departments %} +

     List of Departments

    + +
    + +
    + {%endif %} + + {% if papers %} +

     List of Newsletters

    + +
    + +
    + {% else %} +

    No Newsletter found...

    + {%endif %} +
    + + + +
    +

    Quick Links

    + +
    + +
    +
    + +
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    + + + + + + + + + + diff --git a/HTTP_200/templates/newsletters/upload_letter.html b/HTTP_200/templates/newsletters/upload_letter.html new file mode 100644 index 0000000..8128157 --- /dev/null +++ b/HTTP_200/templates/newsletters/upload_letter.html @@ -0,0 +1,223 @@ +{% load static %} + + + + + + JSS InfoConnect + + + + + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    + +
    +
    + + + +
    + +
    + +

    Be updated anywhere and anytime!

    +

    Upload a Newsletter

    +
    + + {{errors}} +
    + +
    + + {% csrf_token %} + + + + + Select the department:- + + + +
    +
    + + +
    + + + + + + + + diff --git a/HTTP_200/urls.py b/HTTP_200/urls.py index 3e42439..1f2ed09 100644 --- a/HTTP_200/urls.py +++ b/HTTP_200/urls.py @@ -25,6 +25,7 @@ # url(r'', include('rest_framework.urls', namespace='rest_framework')) 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'^newsletters/', include('newsletters.urls')), url(r'wifi/', include('wifi.urls')), ] diff --git a/newsletters/__init__.py b/newsletters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/newsletters/admin.py b/newsletters/admin.py new file mode 100644 index 0000000..34a2154 --- /dev/null +++ b/newsletters/admin.py @@ -0,0 +1,15 @@ +from django.contrib import admin +from . import models + + +class papers(admin.TabularInline): + model = models.papers + extra = 1 + + +class department(admin.ModelAdmin): + fields = ['department'] + inlines = [papers] + + +admin.site.register(models.department, department) diff --git a/newsletters/forms.py b/newsletters/forms.py new file mode 100644 index 0000000..c1a3ecb --- /dev/null +++ b/newsletters/forms.py @@ -0,0 +1,12 @@ +from django import forms +from . import models + + +class upload_letter_form(forms.ModelForm): + ''' + This validates the newsletter data input by user. + ''' + class Meta: + model = models.papers + fields = ['name', 'year', 'paper'] + exclude = ['department', 'uploaded_by'] diff --git a/newsletters/tests.py b/newsletters/tests.py new file mode 100644 index 0000000..a79ca8b --- /dev/null +++ b/newsletters/tests.py @@ -0,0 +1,3 @@ +# from django.test import TestCase + +# Create your tests here. diff --git a/newsletters/urls.py b/newsletters/urls.py new file mode 100644 index 0000000..85fb77b --- /dev/null +++ b/newsletters/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls import url +from newsletters import views + +urlpatterns = [ + url(r'upload_newsletter/$', views.upload_newsletter, name="upload_newsletter"), + url(r'(\d+)/$', views.show_letters, name="show_letters"), + url(r'(?P[\w+-]+)/$', views.list_papers, name="list_papers"), + url(r'$', views.list_departments, name="list_departments"), +] diff --git a/newsletters/views.py b/newsletters/views.py new file mode 100644 index 0000000..48a7601 --- /dev/null +++ b/newsletters/views.py @@ -0,0 +1,67 @@ +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render +from . import models, forms + + +def list_departments(request): + ''' + This displays the list of departments. + ''' + departments = [ + {"Computer Science and Engineering": "CSE"}, + {"Information Technology": "IT"}, + {"Electronics and Communication Engineering": "ECE"}, + {"Civil Engineering": "CE"}, + {"Mechanical Engineering": "ME"}, + {"Electrical and Electronics Engineering": "EEE"}, + {"Instrumentation and Control Engineering": "IC"}, + {"Electrical Engineering": "EE"}, + ] + return render(request, 'newsletters/newsletter.html', {'departments': departments}) + + +def list_papers(request, dept): + ''' + This displays the list of Newsletters of selected department. + ''' + department = models.department.objects.filter(department=dept) + papers = models.papers.objects.filter(department=department) + return render(request, 'newsletters/newsletter.html', {"papers": papers}) + + +def show_letters(request, letter_no): + ''' + This displays the selected newsletter. + ''' + papers = models.papers.objects.get(id=int(letter_no)) + with open(str(papers.paper.path), 'rb') as pdf: + response = HttpResponse(pdf.read(), content_type='application/pdf') + response['Content-Disposition'] = 'inline;filename=newsletter.pdf' + pdf.close() + return response + + +def upload_newsletter(request): + ''' + This enables groups (except students) to upload newsletter. + ''' + if request.user.is_authenticated(): + if str(request.user.groups.all()[0].name) in ['faculty', 'hod', 'management', 'others']: + if request.method == 'POST': + form = forms.upload_letter_form(request.POST, request.FILES) + if(form.is_valid()): + letter = form.save(commit=False) + department = models.department.objects.get(department=str(request.POST['department'])) + letter.department = department + letter.uploaded_by = request.user + letter.save() + return HttpResponseRedirect('/newsletters/'+str(request.POST['department'])+'/') + else: + errors = form.errors + return render(request, 'newsletters/upload_letter.html', {'errors': errors}) + else: + return render(request, 'newsletters/upload_letter.html', {}) + else: + return HttpResponseRedirect('/') + else: + return HttpResponseRedirect('/accounts/login/')