summaryrefslogtreecommitdiff
path: root/workshop_app/views.py
diff options
context:
space:
mode:
authorPalaparthy Adityachandra2020-07-01 17:34:16 +0530
committerGitHub2020-07-01 17:34:16 +0530
commit5b593457c0d07a6c11884c33ec7c676de9510b9d (patch)
tree21a2498bb5bcba69934f262af356f3b29d2ccf3d /workshop_app/views.py
parentab64501d95655dbc19fd8d5bcc6c6c86c21ae34f (diff)
parentf055a533c0d4366453b89424602322ddb7e3ff32 (diff)
downloadworkshop_booking-5b593457c0d07a6c11884c33ec7c676de9510b9d.tar.gz
workshop_booking-5b593457c0d07a6c11884c33ec7c676de9510b9d.tar.bz2
workshop_booking-5b593457c0d07a6c11884c33ec7c676de9510b9d.zip
Merge pull request #153 from FOSSEE/revampv2
Revamp workshop website
Diffstat (limited to 'workshop_app/views.py')
-rw-r--r--workshop_app/views.py1473
1 files changed, 336 insertions, 1137 deletions
diff --git a/workshop_app/views.py b/workshop_app/views.py
index 3ebae9f..90495a5 100644
--- a/workshop_app/views.py
+++ b/workshop_app/views.py
@@ -1,112 +1,89 @@
-from textwrap import dedent
-from os import listdir, path, sep
-from zipfile import ZipFile
-import datetime as dt
-import csv
-import logging
+from django.contrib import messages
+from django.db.models import Q
+from django.forms import inlineformset_factory, model_to_dict
+from django.http import JsonResponse, Http404
+from django.urls import reverse
+
try:
from StringIO import StringIO as string_io
except ImportError:
from io import BytesIO as string_io
-from datetime import datetime, date
-from itertools import chain
+from datetime import datetime
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.decorators import login_required
-from django.contrib import messages
-from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
+from django.core.paginator import Paginator
from django.shortcuts import render, redirect
from django.utils import timezone
-from django.http import HttpResponse, HttpResponseRedirect
-from django.conf import settings
-from django.contrib import messages
from .forms import (
- UserRegistrationForm, UserLoginForm,
- ProfileForm, CreateWorkshop,
- ProposeWorkshopDateForm, ProfileCommentsForm
- )
+ UserRegistrationForm, UserLoginForm,
+ ProfileForm, WorkshopForm, CommentsForm, WorkshopTypeForm
+)
from .models import (
- Profile, User,
- has_profile, Workshop,
- WorkshopType, RequestedWorkshop,
- BookedWorkshop, ProposeWorkshopDate,
- Testimonial, ProfileComments, Banner
- )
-from teams.models import Team
+ Profile, User,
+ Workshop, Comment,
+ WorkshopType, AttachmentFile
+)
from .send_mails import send_email
__author__ = "Akshen Doke"
__credits__ = ["Mahesh Gudi", "Aditya P.", "Ankit Javalkar",
- "Prathamesh Salunke", "Kiran Kishore",
- "KhushalSingh Rajput", "Prabhu Ramachandran",
- "Arun KP"]
+ "Prathamesh Salunke", "Kiran Kishore",
+ "KhushalSingh Rajput", "Prabhu Ramachandran",
+ "Arun KP"]
+
+# Helper functions
def is_email_checked(user):
- if hasattr(user, 'profile'):
- return True if user.profile.is_email_verified else False
- else:
- return False
+ return user.profile.is_email_verified
-def is_superuser(user):
- return True if user.is_superuser else False
+def is_instructor(user):
+ """Check if the user is having instructor rights"""
+ return user.groups.filter(name='instructor').exists()
-def index(request):
- '''Landing Page'''
+def get_landing_page(user):
+ # For now, landing pages of both instructor and coordinator are same
+ if is_instructor(user):
+ return reverse('workshop_status_instructor')
+ return reverse('workshop_status_coordinator')
+
+# View functions
+
+def index(request):
+ """Landing Page : Redirect to login page if not logged in
+ Redirect to respective landing page according to position"""
user = request.user
- form = UserLoginForm()
- testimonials = Testimonial.objects.all()
- if user.is_authenticated() and is_email_checked(user):
- if user.groups.filter(name='instructor').count() > 0:
- return redirect('/manage/')
- return redirect('/book/')
- elif request.method == "POST":
- form = UserLoginForm(request.POST)
- if form.is_valid():
- user = form.cleaned_data
- login(request, user)
- if is_superuser(user):
- return redirect("/admin")
- if user.groups.filter(name='instructor').count() > 0:
- return redirect('/manage/')
- return redirect('/book/')
-
- return render(request, "workshop_app/index.html",
- {
- "form": form,
- "testimonials": testimonials,
- "banners": Banner.objects.all(),
- }
- )
+ if user.is_authenticated and is_email_checked(user):
+ return redirect(get_landing_page(user))
+ return redirect('/login/')
-def is_instructor(user):
- '''Check if the user is having instructor rights'''
- return True if user.groups.filter(name='instructor').count() > 0 else False
+# User views
+# TODO: Forgot password workflow
def user_login(request):
- '''User Login'''
+ """User Login"""
user = request.user
- if is_superuser(user):
+ if user.is_superuser:
return redirect('/admin')
- if user.is_authenticated():
- if user.groups.filter(name='instructor').count() > 0:
- return redirect('/manage/')
- return redirect('/book/')
+ if user.is_authenticated:
+ return redirect(get_landing_page(user))
if request.method == "POST":
form = UserLoginForm(request.POST)
if form.is_valid():
user = form.cleaned_data
- login(request, user)
- if user.groups.filter(name='instructor').count() > 0:
- return redirect('/manage/')
- return redirect('/book/')
+ if user.profile.is_email_verified:
+ login(request, user)
+ return redirect(get_landing_page(user))
+ else:
+ return render(request, 'workshop_app/activation.html')
else:
return render(request, 'workshop_app/login.html', {"form": form})
else:
@@ -115,671 +92,84 @@ def user_login(request):
def user_logout(request):
- '''Logout'''
+ """Logout"""
logout(request)
return render(request, 'workshop_app/logout.html')
def activate_user(request, key=None):
user = request.user
- if is_superuser(user):
+ if user.is_superuser:
return redirect("/admin")
if key is None:
- if user.is_authenticated() and user.profile.is_email_verified==0 and \
- timezone.now() > user.profile.key_expiry_time:
+ if user.is_authenticated and not user.profile.is_email_verified and \
+ timezone.now() > user.profile.key_expiry_time:
status = "1"
Profile.objects.get(user_id=user.profile.user_id).delete()
User.objects.get(id=user.profile.user_id).delete()
return render(request, 'workshop_app/activation.html',
- {'status':status})
- elif user.is_authenticated() and user.profile.is_email_verified==0:
+ {'status': status})
+ elif user.is_authenticated and not user.profile.is_email_verified:
return render(request, 'workshop_app/activation.html')
- elif user.is_authenticated() and user.profile.is_email_verified:
+ elif user.is_authenticated and user.profile.is_email_verified:
status = "2"
return render(request, 'workshop_app/activation.html',
- {'status':status})
+ {'status': status})
else:
return redirect('/register/')
- try:
- user = Profile.objects.get(activation_key=key)
- except:
- return redirect('/register/')
-
- if key == user.activation_key:
- user.is_email_verified = True
- user.save()
- status = "0"
+ user = Profile.objects.filter(activation_key=key)
+ if user.exists():
+ user = user.first()
else:
logout(request)
- return redirect('/logout/')
+ return redirect('/register/')
+
+ user.is_email_verified = True
+ user.save()
+ status = "0"
return render(request, 'workshop_app/activation.html',
- {"status": status})
+ {"status": status})
def user_register(request):
- '''User Registration form'''
+ """User Registration form"""
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
- data = form.cleaned_data
username, password, key = form.save()
new_user = authenticate(username=username, password=password)
login(request, new_user)
user_position = request.user.profile.position
send_email(
- request, call_on='Registration',
- user_position=user_position,
- key=key
- )
-
+ request, call_on='Registration',
+ user_position=user_position,
+ key=key
+ )
return render(request, 'workshop_app/activation.html')
else:
- if request.user.is_authenticated():
+ if request.user.is_authenticated:
return redirect('/view_profile/')
return render(
- request, "workshop_app/registration/register.html",
+ request, "workshop_app/register.html",
{"form": form}
- )
+ )
else:
- if request.user.is_authenticated() and is_email_checked(request.user):
- return redirect('/my_workshops/')
- elif request.user.is_authenticated():
+ if request.user.is_authenticated and is_email_checked(request.user):
+ return redirect(get_landing_page(request.user))
+ elif request.user.is_authenticated:
return render(request, 'workshop_app/activation.html')
form = UserRegistrationForm()
- return render(request, "workshop_app/registration/register.html", {"form": form})
-
-
-# This is shown to coordinator for booking workshops
-def book(request):
- user = request.user
- if user.is_authenticated():
- if is_email_checked(user):
- if user.groups.filter(name='instructor').count() > 0:
- return redirect('/manage/')
-
- workshop_details = Workshop.objects.all()
-
- workshop_occurence_list = []
- today = datetime.now() + dt.timedelta(days=3)
- upto = datetime.now() + dt.timedelta(weeks=52)
- for workshops in workshop_details:
- dates = workshops.recurrences.between(
- today,
- upto,
- inc=True
- )
-
- for d in range(len(dates)):
- workshop_occurence = [
- dates[d].strftime("%d-%m-%Y"),
- workshops.workshop_instructor,
- workshops.workshop_title,
- workshops.workshop_instructor_id,
- workshops.workshop_title_id,
- workshops.workshop_title.workshoptype_description
- ]
-
- workshop_occurence_list.append(workshop_occurence)
- del workshop_occurence
-
- # Gives you the objects of BookedWorkshop
- bookedworkshop = BookedWorkshop.objects.all()
- if len(bookedworkshop) != 0:
- for b in bookedworkshop:
- '''
- handles objects from bookedworkshop
- -requested
- -proposed
- '''
- try:
- x = b.booked_workshop_requested.requested_workshop_date.strftime("%d-%m-%Y")
- y = b.booked_workshop_requested.requested_workshop_title
- except:
- x = b.booked_workshop_proposed.proposed_workshop_date.strftime("%d-%m-%Y")
- y = b.booked_workshop_proposed.proposed_workshop_title
- for a in workshop_occurence_list:
- if a[0] == x and a[2] == y:
- workshop_occurence_list.remove(a)
- del x, y
-
- # Objects of RequestedWorkshop for that particular coordinator
- rW_obj = RequestedWorkshop.objects.filter(
- requested_workshop_coordinator=request.user
- )
- for r in rW_obj:
- x = r.requested_workshop_date.strftime("%d-%m-%Y")
- for a in workshop_occurence_list:
- if a[0] == x:
- workshop_occurence_list.remove(a)
- del x
-
-
- # Show upto 12 Workshops per page
- paginator = Paginator(workshop_occurence_list, 12)
- page = request.GET.get('page')
- try:
- workshop_occurences = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- workshop_occurences = paginator.page(1)
- except EmptyPage:
- # If page is out of range(e.g 999999), deliver last page.
- workshop_occurences = paginator.page(paginator.num_pages)
-
- return render(
- request, "workshop_app/booking.html",
- {"workshop_details": workshop_occurences}
- )
- else:
- return redirect('/activate_user/')
- else:
- return redirect('/login/')
-
-
-@login_required
-def book_workshop(request):
- '''
- Function for Updating RequestedWorkshop Model
- '''
- if request.method == 'POST':
- user_position = request.user.profile.position
- client_data = request.body.decode("utf-8").split("&")
- client_data = client_data[0].split("%2C")
- workshop_date = client_data[0][2:]
-
- if client_data[-1] == '0':
- queue = RequestedWorkshop.objects.filter(
- requested_workshop_instructor=client_data[1],
- requested_workshop_date=datetime.strptime(
- client_data[0][2:], "%d-%m-%Y"
- ),
- requested_workshop_title=client_data[-2]
- ).count() + 1
-
- return HttpResponse(str(queue))
-
- workshops_list = Workshop.objects.filter(
- workshop_instructor=client_data[1],
- workshop_title_id=client_data[2]
- )
- today = datetime.now() + dt.timedelta(days=3)
- upto = datetime.now() + dt.timedelta(weeks=52)
- for workshop in workshops_list:
- workshop_recurrence_list = workshop.recurrences.between(
- today,
- upto,
- inc=True
- )
-
- rW_obj = RequestedWorkshop()
- if RequestedWorkshop.objects.filter(
- requested_workshop_instructor=workshop.workshop_instructor,
- requested_workshop_date=datetime.strptime(
- client_data[0][2:], "%d-%m-%Y",
- ),
- requested_workshop_coordinator=request.user,
- requested_workshop_title=client_data[-1]
- ).count() > 0:
-
- return HttpResponse(dedent("""You already have a booking
- for this workshop please check the
- instructors response in My Workshops tab and
- also check your email."""))
- else:
- for w in workshop_recurrence_list:
- if workshop_date == (w.strftime("%d-%m-%Y")):
- rW_obj.requested_workshop_instructor = workshop.workshop_instructor
- rW_obj.requested_workshop_coordinator = request.user
- rW_obj.requested_workshop_date = datetime.strptime(
- workshop_date,"%d-%m-%Y"
- )
- rW_obj.requested_workshop_title = workshop.workshop_title
- rW_obj.save()
-
- queue = RequestedWorkshop.objects.filter(
- requested_workshop_instructor=workshop.workshop_instructor,
- requested_workshop_date=datetime.strptime(
- workshop_date, "%d-%m-%Y",
- ),
- requested_workshop_title=client_data[-1]
- ).count()
-
- # Mail to instructor
- send_email(request, call_on='Booking',
- user_position='instructor',
- workshop_date=workshop_date,
- workshop_title=workshop.workshop_title.workshoptype_name,
- user_name=str(request.user.get_full_name()),
- other_email=workshop.workshop_instructor.email
- )
- phone_number = workshop.workshop_instructor.profile.phone_number
- #Mail to coordinator
- send_email(request, call_on='Booking',
- workshop_date=workshop_date,
- workshop_title=workshop.workshop_title.workshoptype_name,
- user_name=workshop.workshop_instructor.profile.user.get_full_name(),
- other_email=workshop.workshop_instructor.email,
- phone_number=phone_number)
-
- return HttpResponse(dedent("""\
- Your request has been successful, Please check
- your email for further information. Your request is number
- {0} in the queue.""".format(str(queue))))
- else:
- logout(request)
- return HttpResponse("Some Error Occurred.")
-
-
-@login_required
-def manage(request):
- user = request.user
-
- if user.is_authenticated() and is_email_checked(user):
- #Move user to the group via admin
- if user.groups.filter(name='instructor').count() > 0:
- try:
- #Can Handle Multiple Workshops
- workshop_details = Workshop.objects.filter(
- workshop_instructor=user.id
- )
-
- workshop_occurence_list = []
- today = datetime.now() + dt.timedelta(days=3)
- upto = datetime.now() + dt.timedelta(weeks=52)
- for workshop in workshop_details:
- workshop_occurence = workshop.recurrences.between(
- today,
- upto,
- inc=True
- )
- for i in range(len(workshop_occurence)):
-
- workshop_occurence_list.append({
- "user": str(user),
- "workshop": workshop.workshop_title,
- "date": workshop_occurence[i].date()
- })
-
- requested_workshop = RequestedWorkshop.objects.filter(
- requested_workshop_instructor=user.id
- )
-
-
- #Need to recheck logic
- for j in range(len(requested_workshop)):
- for i in workshop_occurence_list:
- a = requested_workshop[j].requested_workshop_date
- b = requested_workshop[j].requested_workshop_title
- if i['date'] == a and i['workshop'] == b:
- workshop_occurence_list.remove(i)
- del a, b
-
-
- #Show upto 12 Workshops per page
- paginator = Paginator(workshop_occurence_list, 12)
- page = request.GET.get('page')
- try:
- workshops = paginator.page(page)
- except PageNotAnInteger:
- #If page is not an integer, deliver first page.
- workshops = paginator.page(1)
- except EmptyPage:
- #If page is out of range(e.g 999999), deliver last page.
- workshops = paginator.page(paginator.num_pages)
- except:
- workshops = None
-
- return render(
- request, "workshop_app/manage.html",
- {"workshop_occurence_list": workshops}
- )
-
- return redirect('/book/')
- else:
- return redirect('/activate_user/')
-
-
-@login_required
-def my_workshops(request):
- user = request.user
-
- if user.is_authenticated() and is_email_checked(user):
- if is_instructor(user):
- if request.method == 'POST':
- user_position = request.user.profile.position
- client_data = request.body.decode("utf-8").split("&")
- client_data = client_data[0].split("%2C")
- if client_data[-1] == 'ACCEPTED':
- workshop_date = datetime.strptime(
- client_data[1], "%Y-%m-%d"
- )
-
- coordinator_obj = User.objects.get(username=client_data[0][2:])
-
- workshop_status = RequestedWorkshop.objects.get(
- requested_workshop_instructor=user.id,
- requested_workshop_date=workshop_date,
- requested_workshop_coordinator=coordinator_obj.id,
- requested_workshop_title=client_data[2]
- )
-
- workshop_status.status = client_data[-1]
- workshop_status.save()
- booked_workshop_obj = BookedWorkshop()
- booked_workshop_obj.booked_workshop_requested = workshop_status
- booked_workshop_obj.save()
- ws = workshop_status
- cmail = ws.requested_workshop_coordinator.email
- cname = ws.requested_workshop_coordinator.profile.user.get_full_name()
- cnum = ws.requested_workshop_coordinator.profile.phone_number
- cinstitute = ws.requested_workshop_coordinator.profile.institute
- inum = request.user.profile.phone_number
- wtitle = ws.requested_workshop_title.workshoptype_name
-
- #For Instructor
- send_email(request, call_on='Booking Confirmed',
- user_position='instructor',
- workshop_date=str(client_data[1]),
- workshop_title=wtitle,
- user_name=str(cname),
- other_email=cmail,
- phone_number=cnum,
- institute=cinstitute
- )
-
- #For Coordinator
- send_email(request, call_on='Booking Confirmed',
- workshop_date=str(client_data[1]),
- workshop_title=wtitle,
- other_email=cmail,
- phone_number=inum
- )
-
- elif client_data[-1] == 'DELETED':
- workshop_date = client_data[1]
- workshops_list = Workshop.objects.filter(workshop_instructor=request.user.id,
- workshop_title_id=client_data[2]
- )
-
- today = datetime.now() + dt.timedelta(days=3)
- upto = datetime.now() + dt.timedelta(weeks=52)
- for workshop in workshops_list:
- workshop_recurrence_list = workshop.recurrences.between(
- today,
- upto,
- inc=True
- )
-
- for d in workshop_recurrence_list:
- if workshop_date == d.strftime("%Y-%m-%d"):
- rW_obj = RequestedWorkshop()
- rW_obj.requested_workshop_instructor = request.user
- rW_obj.requested_workshop_coordinator = request.user
- rW_obj.requested_workshop_date = workshop_date
- rW_obj.requested_workshop_title = workshop.workshop_title
- rW_obj.status = client_data[-1]
- rW_obj.save()
- bW_obj = BookedWorkshop()
- bW_obj.booked_workshop_requested = rW_obj
- bW_obj.save()
-
- #For instructor
- send_email(request, call_on='Workshop Deleted',
- workshop_date=str(client_data[1]),
- workshop_title=workshop.workshop_title
- )
-
- return HttpResponse("Workshop Deleted")
-
- elif client_data[-1] == 'APPROVED':
- workshop_date = datetime.strptime(
- client_data[1], "%Y-%m-%d"
- )
-
- coordinator_obj = User.objects.get(username=client_data[0][2:])
- workshop_status = ProposeWorkshopDate.objects.get(
- proposed_workshop_date=workshop_date,
- proposed_workshop_coordinator=coordinator_obj.id,
- proposed_workshop_title=client_data[2]
- )
-
- workshop_status.status = 'ACCEPTED'
- workshop_status.proposed_workshop_instructor = user
- workshop_status.save()
- booked_workshop_obj = BookedWorkshop()
- booked_workshop_obj.booked_workshop_proposed = workshop_status
- booked_workshop_obj.save()
- ws = workshop_status
- cmail = ws.proposed_workshop_coordinator.email
- cname = ws.proposed_workshop_coordinator.profile.user.get_full_name()
- cnum = ws.proposed_workshop_coordinator.profile.phone_number
- cinstitute = ws.proposed_workshop_coordinator.profile.institute
- inum = request.user.profile.phone_number
- wtitle = ws.proposed_workshop_title.workshoptype_name
-
- #For Instructor
- send_email(request, call_on='Booking Confirmed',
- user_position='instructor',
- workshop_date=str(client_data[1]),
- workshop_title=wtitle,
- user_name=str(cname),
- other_email=cmail,
- phone_number=cnum,
- institute=cinstitute
- )
-
- #For Coordinator
- send_email(request, call_on='Booking Confirmed',
- workshop_date=str(client_data[1]),
- workshop_title=wtitle,
- other_email=cmail,
- phone_number=inum
- )
-
- elif client_data[-1] == 'CHANGE_DATE':
- temp, iid = client_data[0].split("=")
- temp, new_workshop_date = client_data[-2].split("%3D")
- cid, workshop_title_id = client_data[1], client_data[2]
- new_workshop_date = datetime.strptime(
- new_workshop_date, "%Y-%m-%d"
- )
- workshop_date = datetime.strptime(
- client_data[3], "%Y-%m-%d"
- )
-
- cemail = User.objects.get(id=cid)
- today = datetime.today()
- if today > new_workshop_date:
- return HttpResponse("Please Give proper Date!")
- else:
- result = RequestedWorkshop.objects.filter(
- requested_workshop_instructor=user.id,
- requested_workshop_coordinator=cid,
- requested_workshop_title_id=workshop_title_id,
- requested_workshop_date=workshop_date).update(
- requested_workshop_date=new_workshop_date)
- if result:
- del temp
- else:
- ProposeWorkshopDate.objects.filter(
- proposed_workshop_instructor=user.id,
- proposed_workshop_coordinator=cid,
- proposed_workshop_title_id=workshop_title_id,
- proposed_workshop_date=workshop_date).update(
- proposed_workshop_date=new_workshop_date)
-
- #For Instructor
- send_email(request, call_on='Change Date',
- user_position='instructor',
- workshop_date=workshop_date.date(),
- new_workshop_date=str(new_workshop_date.date())
- )
-
- #For Coordinator
- send_email(request, call_on='Change Date',
- new_workshop_date=str(new_workshop_date.date()),
- workshop_date=str(workshop_date.date()),
- other_email=cemail.email
- )
-
- return HttpResponse("Date Changed")
-
- else:
- workshop_date = datetime.strptime(
- client_data[1], "%Y-%m-%d"
- )
- coordinator_obj = User.objects.get(username=client_data[0][2:])
- workshop_status = RequestedWorkshop.objects.get(
- requested_workshop_instructor=user.id,
- requested_workshop_date=workshop_date,
- requested_workshop_coordinator=coordinator_obj.id,
- requested_workshop_title=client_data[2]
- )
- workshop_status.status = client_data[-1]
- workshop_status.save()
- ws = workshop_status
- wtitle = ws.requested_workshop_title.workshoptype_name
- cmail = ws.requested_workshop_coordinator.email
- cname = ws.requested_workshop_coordinator.profile.user.get_full_name()
- cnum = ws.requested_workshop_coordinator.profile.phone_number
- cinstitute = ws.requested_workshop_coordinator.profile.institute
-
- #For Instructor
- send_email(request, call_on='Booking Request Rejected',
- user_position='instructor',
- workshop_date=str(client_data[1]),
- workshop_title=wtitle,
- user_name=str(cname),
- other_email=cmail,
- phone_number=cnum,
- institute=cinstitute
- )
-
- #For Coordinator
- send_email(request, call_on='Booking Request Rejected',
- workshop_date=str(client_data[1]),
- workshop_title=wtitle,
- other_email=cmail
- )
-
- workshops = []
- today = datetime.today().date()
- workshop_occurence_list = RequestedWorkshop.objects.filter(
- requested_workshop_instructor=user.id,
- requested_workshop_date__gte=today,
- ).order_by('-requested_workshop_date')
-
- proposed_workshop = ProposeWorkshopDate.objects.filter(
- proposed_workshop_instructor=user.id,
- proposed_workshop_date__gte=today,
- ).order_by('-proposed_workshop_date')
-
- proposed_workshop_pending = ProposeWorkshopDate.objects.filter(
- status='Pending'
- ).order_by('-proposed_workshop_date')
-
- workshops = list(workshop_occurence_list) + list(proposed_workshop) + list(proposed_workshop_pending)
-
- # team_members = list(set(user.profile.team_set.all().values_list('members', flat=True)))
- teams = Team.objects.filter(members=user.profile)
-
- if teams:
- team_members = Profile.objects.filter(team__in=teams).exclude(id=user.profile.id).distinct()
- team_member_ids = team_members.values_list('user__id')
- team_workshops = ProposeWorkshopDate.objects.filter(
- proposed_workshop_date__gte=today,
- proposed_workshop_instructor_id__in=team_member_ids,
- )
-
- return render(request, 'workshop_app/my_workshops.html',
- { "workshops" :workshops,
- "team_workshops": team_workshops,
- "today": today})
-
- else:
- workshops = []
- workshop_occurence_list = RequestedWorkshop.objects.filter(
- requested_workshop_coordinator=user.id
- ).order_by('-requested_workshop_date')
-
- proposed_workshop = ProposeWorkshopDate.objects.filter(
- proposed_workshop_coordinator=user.id
- ).order_by('-proposed_workshop_date')
-
- workshops = list(workshop_occurence_list) + list(proposed_workshop)
-
- return render(request, 'workshop_app/my_workshops.html',
- {"workshops": workshops})
- else:
- return redirect('/login/')
-
-
-@login_required
-def propose_workshop(request):
- '''Coordinator proposed a workshop and date'''
-
- user = request.user
- if is_superuser(user):
- return redirect("/admin")
- if is_email_checked(user):
- if is_instructor(user):
- return redirect('/manage/')
- else:
- if request.method == 'POST':
- form = ProposeWorkshopDateForm(request.POST)
- if form.is_valid():
- form_data = form.save(commit=False)
- form_data.proposed_workshop_coordinator = user
- #Avoiding Duplicate workshop entries for same date and workshop_title
- if ProposeWorkshopDate.objects.filter(
- proposed_workshop_date=form_data.proposed_workshop_date,
- proposed_workshop_title=form_data.proposed_workshop_title,
- proposed_workshop_coordinator=form_data.proposed_workshop_coordinator
- ).exists():
- return redirect('/my_workshops/')
- else:
- form_data.proposed_workshop_coordinator.save()
- form_data.save()
- instructors = Profile.objects.filter(position='instructor')
- for i in instructors:
- send_email(request, call_on='Proposed Workshop',
- user_position='instructor',
- workshop_date=str(form_data.proposed_workshop_date),
- workshop_title=form_data.proposed_workshop_title,
- user_name=str(user.get_full_name()),
- other_email=i.user.email,
- phone_number=user.profile.phone_number,
- institute=user.profile.institute
- )
- return redirect('/my_workshops/')
- else:
- form = ProposeWorkshopDateForm()
- return render(
- request, 'workshop_app/propose_workshop.html',
- {"form": form }
- )
- else:
- return render(request, 'workshop_app/activation.html')
+ return render(request, "workshop_app/register.html", {"form": form})
@login_required
def view_profile(request):
""" view instructor and coordinator profile """
user = request.user
- if is_superuser(user):
+ if user.is_superuser:
return redirect('/admin')
- if is_email_checked(user) and user.is_authenticated():
- return render(request, "workshop_app/view_profile.html")
- else:
- if user.is_authenticated():
- return render(request, 'workshop_app/activation.html')
- else:
- try:
- logout(request)
- return redirect('/login/')
- except:
- return redirect('/register/')
+ return render(request, "workshop_app/view_profile.html")
@login_required
@@ -787,28 +177,11 @@ def edit_profile(request):
""" edit profile details facility for instructor and coordinator """
user = request.user
- if is_superuser(user):
+ if user.is_superuser:
return redirect('/admin')
- if is_email_checked(user):
- if is_instructor(user):
- template = 'workshop_app/manage.html'
- else:
- template = 'workshop_app/booking.html'
- else:
- try:
- logout(request)
- return redirect('/login/')
- except:
- return redirect('/register/')
-
- context = {'template': template}
- if has_profile(user) and is_email_checked(user):
- profile = Profile.objects.get(user_id=user.id)
- else:
- profile = None
if request.method == 'POST':
- form = ProfileForm(request.POST, user=user, instance=profile)
+ form = ProfileForm(request.POST, user=user, instance=user.profile)
if form.is_valid():
form_data = form.save(commit=False)
form_data.user = user
@@ -816,477 +189,303 @@ def edit_profile(request):
form_data.user.last_name = request.POST['last_name']
form_data.user.save()
form_data.save()
-
- return render(
- request, 'workshop_app/profile_updated.html'
- )
+ messages.add_message(request, messages.SUCCESS, "Profile updated.")
+ return redirect('/view_profile/')
else:
- context['form'] = form
- return render(request, 'workshop_app/edit_profile.html', context)
+ return render(request, 'workshop_app/edit_profile.html')
else:
- form = ProfileForm(user=user, instance=profile)
+ form = ProfileForm(user=user, instance=user.profile)
+ messages.add_message(request, messages.ERROR, "Profile update failed!")
return render(request, 'workshop_app/edit_profile.html', {'form': form})
+# Workshop views
+
+@login_required
+def workshop_status_coordinator(request):
+ """ Workshops proposed by Coordinator """
+ user = request.user
+ if is_instructor(user):
+ return redirect(get_landing_page(user))
+ workshops = Workshop.objects.filter(
+ coordinator=user.id
+ ).order_by('-date')
+ return render(request, 'workshop_app/workshop_status_coordinator.html',
+ {"workshops": workshops})
+
+
+@login_required
+def workshop_status_instructor(request):
+ """ Workshops to accept and accepted by Instructor """
+ user = request.user
+ if not is_instructor(user):
+ return redirect(get_landing_page(user))
+ today = timezone.now().date()
+ workshops = Workshop.objects.filter(Q(
+ instructor=user.id,
+ date__gte=today,
+ ) | Q(status=0)).order_by('-date')
+
+ return render(request, 'workshop_app/workshop_status_instructor.html',
+ {"workshops": workshops,
+ "today": today})
+
+
+@login_required
+def accept_workshop(request, workshop_id):
+ user = request.user
+ if not is_instructor(user):
+ return redirect(get_landing_page(user))
+ workshop = Workshop.objects.get(id=workshop_id)
+ # Change Status of the selected workshop
+ workshop.status = 1
+ workshop.instructor = user
+ workshop.save()
+ messages.add_message(request, messages.SUCCESS, "Workshop accepted!")
+
+ coordinator_profile = workshop.coordinator.profile
+
+ # For Instructor
+ send_email(request, call_on='Booking Confirmed',
+ user_position='instructor',
+ workshop_date=str(workshop.date),
+ workshop_title=workshop.workshop_type.name,
+ user_name=str(coordinator_profile.user.get_full_name()),
+ other_email=workshop.coordinator.email,
+ phone_number=coordinator_profile.phone_number,
+ institute=coordinator_profile.institute
+ )
+
+ # For Coordinator
+ send_email(request, call_on='Booking Confirmed',
+ workshop_date=str(workshop.date),
+ workshop_title=workshop.workshop_type.name,
+ other_email=workshop.coordinator.email,
+ phone_number=request.user.profile.phone_number
+ )
+ return redirect(reverse('workshop_status_instructor'))
+
+
+@login_required
+def change_workshop_date(request, workshop_id):
+ user = request.user
+ if not is_instructor(user):
+ return redirect(get_landing_page(user))
+ if request.method == 'POST':
+ new_workshop_date = datetime.strptime(request.POST.get('new_date'), "%Y-%m-%d")
+ today = datetime.today()
+ if today <= new_workshop_date:
+ workshop = Workshop.objects.filter(id=workshop_id)
+ workshop_date = workshop.first().date
+ workshop.update(date=new_workshop_date)
+ messages.add_message(request, messages.INFO, "Workshop date updated")
+
+ # For Instructor
+ send_email(request, call_on='Change Date',
+ user_position='instructor',
+ workshop_date=str(workshop_date),
+ new_workshop_date=str(new_workshop_date.date())
+ )
+
+ # For Coordinator
+ send_email(request, call_on='Change Date',
+ new_workshop_date=str(new_workshop_date.date()),
+ workshop_date=str(workshop_date),
+ other_email=workshop.first().coordinator.email
+ )
+ return redirect(reverse('workshop_status_instructor'))
+
+
@login_required
-def create_workshop(request):
- '''Instructor creates workshops'''
+def propose_workshop(request):
+ """Coordinator proposed a workshop and date"""
user = request.user
- if is_superuser(user):
+ if user.is_superuser:
return redirect("/admin")
- if is_instructor(user) and is_email_checked(user):
+ if is_instructor(user):
+ return redirect(get_landing_page(user))
+ else:
+ form = WorkshopForm()
if request.method == 'POST':
- form = CreateWorkshop(request.POST)
+ form = WorkshopForm(request.POST)
if form.is_valid():
form_data = form.save(commit=False)
- #form_data.profile_id = profile.id
- form_data.workshop_instructor = user
- form_data.workshop_instructor.save()
- form_data.save()
- return redirect('/manage/')
- else:
- form = CreateWorkshop()
+ form_data.coordinator = user
+ # Avoiding Duplicate workshop entries for same date and workshop_title
+ if Workshop.objects.filter(
+ date=form_data.date,
+ workshop_type=form_data.workshop_type,
+ coordinator=form_data.coordinator
+ ).exists():
+ return redirect(get_landing_page(user))
+ else:
+ form_data.save()
+ instructors = Profile.objects.filter(position='instructor')
+ for i in instructors:
+ send_email(request, call_on='Proposed Workshop',
+ user_position='instructor',
+ workshop_date=str(form_data.date),
+ workshop_title=form_data.workshop_type,
+ user_name=user.get_full_name(),
+ other_email=i.user.email,
+ phone_number=user.profile.phone_number,
+ institute=user.profile.institute
+ )
+ messages.add_message(request, messages.SUCCESS, "Workshop proposed successfully")
+ return redirect(get_landing_page(user))
+ # GET request
return render(
- request, 'workshop_app/create_workshop.html',
- {"form": form }
- )
- else:
- return redirect('/book/')
+ request, 'workshop_app/propose_workshop.html',
+ {"form": form}
+ )
-def view_workshoptype_details(request, workshoptype_id):
- '''Gives the types of workshop details '''
+@login_required
+def workshop_type_details(request, workshop_type_id):
+ """Gives the types of workshop details """
user = request.user
- if is_superuser(user):
+ if user.is_superuser:
return redirect("/admin")
- view_workshoptype_details = WorkshopType.objects.get(id=workshoptype_id)
-
- return render(
- request, 'workshop_app/view_workshoptype_details.html', \
- {'workshoptype': view_workshoptype_details}
- )
+ workshop_type = WorkshopType.objects.filter(id=workshop_type_id)
+ if workshop_type.exists():
+ workshop_type = workshop_type.first()
+ else:
+ return redirect(reverse('workshop_type_list'))
+ qs = AttachmentFile.objects.filter(workshop_type=workshop_type)
+ AttachmentFileFormSet = inlineformset_factory(WorkshopType, AttachmentFile, fields=['attachments'],
+ can_delete=False, extra=(qs.count() + 1))
-def view_workshoptype_list(request):
- '''Gives the details for types of workshops.'''
- user = request.user
- if is_superuser(user):
- return redirect("/admin")
+ if is_instructor(user):
+ if request.method == 'POST':
+ form = WorkshopTypeForm(request.POST, instance=workshop_type)
+ form_file = AttachmentFileFormSet(request.POST, request.FILES, instance=form.instance)
+ if form.is_valid():
+ form_data = form.save()
+ messages.add_message(request, messages.SUCCESS, "Workshop type saved.")
+ for file in form_file:
+ if file.is_valid() and file.clean() and file.clean()['attachments']:
+ if file.cleaned_data['id']:
+ file.cleaned_data['id'].delete()
+ file.save()
+ messages.add_message(request, messages.INFO, "Attachment saved")
+ return redirect(reverse('workshop_type_details', args=[form_data.id]))
+ else:
+ form = WorkshopTypeForm(instance=workshop_type)
+ form_file = AttachmentFileFormSet()
+ for subform, data in zip(form_file, qs):
+ subform.initial = model_to_dict(data)
+ return render(request, 'workshop_app/edit_workshop_type.html', {'form': form, 'form_file': form_file})
- workshoptype_list = WorkshopType.objects.all()
+ return render(
+ request, 'workshop_app/workshop_type_details.html', {'workshop_type': workshop_type}
+ )
- paginator = Paginator(workshoptype_list, 12) #Show upto 12 workshops per page
- page = request.GET.get('page')
- try:
- workshoptype = paginator.page(page)
- except PageNotAnInteger:
- #If page is not an integer, deliver first page.
- workshoptype = paginator.page(1)
- except EmptyPage:
- #If page is out of range(e.g 999999), deliver last page.
- workshoptype = paginator.page(paginator.num_pages)
+@login_required
+def delete_attachment_file(request, file_id):
+ if not is_instructor(request.user):
+ return redirect(get_landing_page(request.user))
+ file = AttachmentFile.objects.filter(id=file_id)
+ if file.exists():
+ file = file.first()
+ file.delete()
+ messages.add_message(request, messages.INFO, "Attachment deleted")
+ return redirect(reverse('workshop_type_details', args=[file.workshop_type.id]))
+ messages.add_message(request, messages.ERROR, "File does not exist")
+ return redirect(reverse('workshop_type_list'))
- return render(
- request, 'workshop_app/view_workshoptype_list.html', \
- {'workshoptype': workshoptype}
- )
+@login_required
+def workshop_type_tnc(request, workshop_type_id):
+ workshop_type = WorkshopType.objects.filter(id=workshop_type_id)
+ if workshop_type.exists():
+ workshop_type = workshop_type.first()
+ return JsonResponse({'tnc': workshop_type.terms_and_conditions})
+ else:
+ raise Http404
-def faq(request):
- return render(request, 'workshop_app/view_faq.html')
+def workshop_type_list(request):
+ """Gives the details for types of workshops."""
+ user = request.user
+ if user.is_superuser:
+ return redirect("/admin")
-def how_to_participate(request):
- return render(request, 'workshop_app/how_to_participate.html')
+ workshop_types = WorkshopType.objects.all()
+ paginator = Paginator(workshop_types, 12) # Show upto 12 workshops per page
+ page = request.GET.get('page')
+ workshop_type = paginator.get_page(page)
-def file_view(request, workshop_title):
- if workshop_title =='flowchart':
- return render(request, 'workshop_app/how_to_participate.html')
- else:
- filename = WorkshopType.objects.get(id=workshop_title)
- attachment_path = path.dirname(filename.workshoptype_attachments.path)
- zipfile_name = string_io()
- zipfile = ZipFile(zipfile_name, "w")
- attachments = listdir(attachment_path)
- for file in attachments:
- file_path = sep.join((attachment_path, file))
- zipfile.write(file_path, path.basename(file_path))
- zipfile.close()
- zipfile_name.seek(0)
- response = HttpResponse(content_type='application/zip')
- response['Content-Disposition'] = 'attachment; filename={0}.zip'.format(
- filename.workshoptype_name.replace(" ", "_")
- )
- response.write(zipfile_name.read())
- return response
-
-
-
-def check_workshop_type(x):
- try:
- y = datetime.strftime(x.proposed_workshop_date, '%d-%m-%Y')
- except:
- y = datetime.strftime(x.requested_workshop_date, '%d-%m-%Y')
- return y
+ return render(request, 'workshop_app/workshop_type_list.html', {'workshop_type': workshop_type})
@login_required
-def workshop_stats(request):
- user = request.user
- today = datetime.now()
- upto = today + dt.timedelta(days=120)
-
- #For Monthly Chart
- workshop_count = [0] * 12
- for x in range(12):
- workshop_count[x] +=RequestedWorkshop.objects.filter(
- requested_workshop_date__year=str(today.year),
- requested_workshop_date__month=str(x+1),
- status='ACCEPTED').count()
- workshop_count[x] +=ProposeWorkshopDate.objects.filter(
- proposed_workshop_date__year=str(today.year),
- proposed_workshop_date__month=str(x+1),
- status='ACCEPTED').count()
-
- # Count Total Number of workshops for each type
- workshop_titles = WorkshopType.objects.all()
- workshoptype_dict = {}
- for title in workshop_titles:
- workshoptype_dict[title]=0
-
- for title in workshoptype_dict.keys():
- workshoptype_dict[title] += RequestedWorkshop.objects.filter(
- requested_workshop_title=title,
- status='ACCEPTED').count()
- workshoptype_dict[title] += ProposeWorkshopDate.objects.filter(
- proposed_workshop_title=title,
- status='ACCEPTED').count()
- #For Pie Chart
- workshoptype_num = []
- workshoptype_title = []
- for title in workshoptype_dict.keys():
- workshoptype_title.append(str(title))
-
- for count in workshoptype_dict.values():
- workshoptype_num.append(count)
-
- workshoptype_count = [workshoptype_title, workshoptype_num]
- del workshoptype_title, workshoptype_num
-
- # For India Map
- states = [
- ['Code', 'State', 'Number'],
- ["IN-AP", "Andhra Pradesh", 0],
- ["IN-AR", "Arunachal Pradesh", 0],
- ["IN-AS", "Assam", 0],
- ["IN-BR", "Bihar", 0],
- ["IN-CT", "Chhattisgarh", 0],
- ["IN-GA", "Goa", 0],
- ["IN-GJ", "Gujarat", 0],
- ["IN-HR", "Haryana", 0],
- ["IN-HP", "Himachal Pradesh", 0],
- ["IN-JK", "Jammu and Kashmir", 0],
- ["IN-JH", "Jharkhand", 0],
- ["IN-KA", "Karnataka", 0],
- ["IN-KL", "Kerala", 0],
- ["IN-MP", "Madhya Pradesh", 0],
- ["IN-MH", "Maharashtra", 0],
- ["IN-MN", "Manipur", 0],
- ["IN-ML", "Meghalaya", 0],
- ["IN-MZ", "Mizoram", 0],
- ["IN-NL", "Nagaland", 0],
- ["IN-OR", "Odisha", 0],
- ["IN-PB", "Punjab", 0],
- ["IN-RJ", "Rajasthan", 0],
- ["IN-SK", "Sikkim", 0],
- ["IN-TN", "Tamil Nadu", 0],
- ["IN-TG", "Telangana", 0],
- ["IN-TR", "Tripura", 0],
- ["IN-UT", "Uttarakhand", 0],
- ["IN-UP", "Uttar Pradesh", 0],
- ["IN-WB", "West Bengal", 0],
- ["IN-AN", "Andaman and Nicobar Islands", 0],
- ["IN-CH", "Chandigarh", 0],
- ["IN-DN", "Dadra and Nagar Haveli", 0],
- ["IN-DD", "Daman and Diu", 0],
- ["IN-DL", "Delhi", 0],
- ["IN-LD", "Lakshadweep", 0],
- ["IN-PY", "Puducherry", 0]
- ]
-
- workshop_state = []
- requestedWorkshops = RequestedWorkshop.objects.filter(status='ACCEPTED')
- proposedWorkshops = ProposeWorkshopDate.objects.filter(status='ACCEPTED')
- for workshop in requestedWorkshops:
- for s in states:
- if s[0] == workshop.requested_workshop_coordinator.profile.state:
- s[2] +=1
-
- for workshop in proposedWorkshops:
- for s in states:
- if s[0] == workshop.proposed_workshop_coordinator.profile.state:
- s[2] +=1
-
- #For Data Downloading and Viewing
+def workshop_details(request, workshop_id):
+ workshop = Workshop.objects.filter(id=workshop_id)
+ if not workshop.exists():
+ raise Http404
+ workshop = workshop.first()
if request.method == 'POST':
- try:
- from_dates = request.POST.get('from')
- to_dates = request.POST.get('to')
-
- #Fetches Accepted workshops which were proposed by Coordinators
- proposed_workshops = ProposeWorkshopDate.objects.filter(
- proposed_workshop_date__range=(from_dates, to_dates),
- status='ACCEPTED'
- )
-
- # Fetches Accepted workshops which were Accepted by
- # Instructors based on their Availability
- requested_workshops = RequestedWorkshop.objects.filter(
- requested_workshop_date__range=(from_dates, to_dates),
- status='ACCEPTED'
- )
-
- upcoming_workshops = []
-
- for workshop in proposed_workshops:
- upcoming_workshops.append(workshop)
-
- for workshop in requested_workshops:
- upcoming_workshops.append(workshop)
-
- upcoming_workshops = sorted(upcoming_workshops,
- key=lambda x: check_workshop_type(x))
-
- download = request.POST.get('Download')
- if download:
- response = HttpResponse(content_type='text/csv')
-
- response['Content-Disposition'] = 'attachment;\
- filename="records_from_{0}_to_{1}.csv"'.format(
- from_dates,to_dates
- )
-
- writer = csv.writer(response)
- header = [
- 'coordinator name',
- 'instructor name',
- 'workshop',
- 'date',
- 'status',
- 'institute name'
- ]
-
- writer.writerow(header)
-
- for workshop in upcoming_workshops:
- try:
- row = [
- workshop.proposed_workshop_coordinator,
- workshop.proposed_workshop_instructor,
- workshop.proposed_workshop_title,
- workshop.proposed_workshop_date,
- workshop.status,
- workshop.proposed_workshop_coordinator.profile.institute
- ]
-
- except:
- row = [
- workshop.requested_workshop_coordinator,
- workshop.requested_workshop_instructor,
- workshop.requested_workshop_title,
- workshop.requested_workshop_date,
- workshop.status,
- workshop.requested_workshop_coordinator.profile.institute
- ]
-
- writer.writerow(row)
- return response
- else:
- return render(request, 'workshop_app/workshop_stats.html',
- {
- "upcoming_workshops": upcoming_workshops,
- "show_workshop_stats": settings.SHOW_WORKSHOP_STATS,
- "workshop_count": workshop_count,
- "workshoptype_count": workshoptype_count,
- "india_map": states
- })
- except:
- messages.info(request, 'Please enter Valid Dates')
-
- if is_instructor(user) and is_email_checked(user):
- try:
- #Fetches Accepted workshops which were proposed by Coordinators
- proposed_workshops = ProposeWorkshopDate.objects.filter(
- proposed_workshop_date__range=(today, upto),
- status='ACCEPTED'
- )
-
- #Fetches Accepted workshops which were Accepted by
- # Instructors based on their Availability
- requested_workshops = RequestedWorkshop.objects.filter(
- requested_workshop_date__range=(today, upto),
- status='ACCEPTED'
- )
-
- upcoming_workshops = []
- for workshop in proposed_workshops:
- upcoming_workshops.append(workshop)
-
- for workshop in requested_workshops:
- upcoming_workshops.append(workshop)
-
- upcoming_workshops = sorted(upcoming_workshops,
- key=lambda x: check_workshop_type(x))
-
- except:
- upcoming_workshops = None
-
- paginator = Paginator(upcoming_workshops, 12)
-
- page = request.GET.get('page')
- try:
- upcoming_workshops = paginator.page(page)
- except PageNotAnInteger:
- #If page is not an integer, deliver first page.
- upcoming_workshops = paginator.page(1)
- except EmptyPage:
- #If page is out of range(e.g 999999), deliver last page.
- upcoming_workshops = paginator.page(paginator.num_pages)
-
-
- return render(request, 'workshop_app/workshop_stats.html',
- {
- "upcoming_workshops": upcoming_workshops,
- "show_workshop_stats": settings.SHOW_WORKSHOP_STATS,
- "workshop_count": workshop_count,
- "workshoptype_count": workshoptype_count,
- "india_map": states
- })
+ form = CommentsForm(request.POST)
+ if form.is_valid():
+ form_data = form.save(commit=False)
+ if not is_instructor(request.user):
+ form_data.public = True
+ form_data.author = request.user
+ form_data.created_date = timezone.now()
+ form_data.workshop = workshop
+ form.save()
+ messages.add_message(request, messages.SUCCESS, "Comment posted")
+ else:
+ messages.add_message(request, messages.ERROR, "Error posting comment")
+ if is_instructor(request.user):
+ workshop_comments = Comment.objects.filter(workshop=workshop)
else:
- return redirect('/manage/')
+ workshop_comments = Comment.objects.filter(workshop=workshop, public=True)
+ return render(request, 'workshop_app/workshop_details.html',
+ {'workshop': workshop, 'workshop_comments': workshop_comments,
+ 'form': CommentsForm(initial={'public': True})})
-def self_workshop(request):
- return render(request, "workshop_app/self_workshop.html")
-
+@login_required
+def add_workshop_type(request):
+ if not is_instructor(request.user):
+ return redirect(get_landing_page(request.user))
+ if request.method == 'POST':
+ form = WorkshopTypeForm(request.POST)
+ if form.is_valid():
+ form_data = form.save()
+ messages.add_message(request, messages.SUCCESS, "Workshop Type added")
+ return redirect(reverse('workshop_type_details', args=[form_data.id]))
+ else:
+ form = WorkshopTypeForm
+ return render(request, 'workshop_app/add_workshop_type.html', {'form': form})
@login_required
-def view_comment_profile(request, user_id):
- '''instructor can view/post comments on coordinator profile '''
+def view_profile(request, user_id):
+ """Instructor can view coordinator profile """
user = request.user
if is_instructor(user) and is_email_checked(user):
- comment_form = ProfileCommentsForm()
coordinator_profile = Profile.objects.get(user_id=user_id)
- requested_workshop = RequestedWorkshop.objects.filter(requested_workshop_coordinator=user_id).order_by(
- 'requested_workshop_title')
- propose_workshop = ProposeWorkshopDate.objects.filter(proposed_workshop_coordinator=user_id).order_by(
- 'proposed_workshop_date')
- workshops=[]
- for workshop in propose_workshop:
- workshops.append(workshop)
-
- for workshop in requested_workshop:
- workshops.append(workshop)
- try:
- comments = ProfileComments.objects.filter(coordinator_profile_id=user_id).order_by('-created_date')
- except:
- comments = None
- if request.method == 'POST':
- comment_formpost = ProfileCommentsForm(request.POST)
- if comment_formpost.is_valid():
- form_data = comment_formpost.save(commit=False)
- form_data.coordinator_profile_id = user_id
- form_data.instructor_profile_id = user.id
- form_data.save()
-
- return render(request, "workshop_app/view_comment_profile.html",
- {"coordinator_profile": coordinator_profile,
- "comments": comments,
- "comment_form": comment_form
- })
- else:
- if comments is not None:
- #Show upto 12 Workshops per page
- paginator = Paginator(comments, 12)
- page = request.GET.get('page')
- try:
- comments = paginator.page(page)
- except PageNotAnInteger:
- #If page is not an integer, deliver first page.
- comments = paginator.page(1)
- except EmptyPage:
- #If page is out of range(e.g 999999), deliver last page.
- comments = paginator.page(paginator.num_pages)
- workshop={}
- return render(request, "workshop_app/view_comment_profile.html",
- {"coordinator_profile": coordinator_profile,
- "comments": comments,
- "comment_form": comment_form,
- "Workshops":workshops})
- return redirect('/book/')
+ workshops = Workshop.objects.filter(coordinator=user_id).order_by(
+ 'date')
-@login_required
-def download_csv_data(request):
- user=request.user
- if user.profile.position == 'instructor':
- requested_workshop = RequestedWorkshop.objects.filter(requested_workshop_instructor=user.id).order_by(
- 'requested_workshop_title')
- propose_workshop = ProposeWorkshopDate.objects.filter(proposed_workshop_instructor=user.id).order_by(
- 'proposed_workshop_date')
- upcoming_workshops = []
- for workshop in propose_workshop:
- upcoming_workshops.append(workshop)
-
- for workshop in requested_workshop:
- upcoming_workshops.append(workshop)
-
- response = HttpResponse(content_type='text/csv')
-
- response['Content-Disposition'] = 'attachment;\
- filename="records_of_{0}.csv"'.format(
- user.username
- )
+ return render(request, "workshop_app/view_profile.html",
+ {"coordinator_profile": coordinator_profile,
+ "Workshops": workshops})
+ return redirect(get_landing_page(user))
- writer = csv.writer(response)
- header = [
- 'coordinator name',
- 'instructor name',
- 'workshop',
- 'date',
- 'status',
- 'institute name'
- ]
-
- writer.writerow(header)
-
- for workshop in upcoming_workshops:
- try:
- row = [
- workshop.proposed_workshop_coordinator,
- workshop.proposed_workshop_instructor,
- workshop.proposed_workshop_title,
- workshop.proposed_workshop_date,
- workshop.status,
- workshop.proposed_workshop_coordinator.profile.institute
- ]
-
- except:
- row = [
- workshop.requested_workshop_coordinator,
- workshop.requested_workshop_instructor,
- workshop.requested_workshop_title,
- workshop.requested_workshop_date,
- workshop.status,
- workshop.requested_workshop_coordinator.profile.institute
- ]
-
- writer.writerow(row)
- return response
- else:
- return redirect('/book/')
+@login_required
+def view_own_profile(request):
+ """User can view own profile """
+ user = request.user
+ coordinator_profile = Profile.objects.get(user=user)
+
+ return render(request, "workshop_app/view_profile.html",
+ {"coordinator_profile": coordinator_profile, "Workshops": None})