210 lines
7.0 KiB
Python
210 lines
7.0 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.contrib import messages
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from accounts.decorators import admin_required, lecturer_required
|
|
from accounts.models import User, Student
|
|
from .forms import SessionForm, SemesterForm, NewsAndEventsForm
|
|
from .models import NewsAndEvents, ActivityLog, Session, Semester
|
|
|
|
|
|
# ########################################################
|
|
# News & Events
|
|
# ########################################################
|
|
@login_required
|
|
def home_view(request):
|
|
items = NewsAndEvents.objects.all().order_by("-updated_date")
|
|
context = {
|
|
"title": "News & Events",
|
|
"items": items,
|
|
}
|
|
return render(request, "core/index.html", context)
|
|
|
|
|
|
@login_required
|
|
@admin_required
|
|
def dashboard_view(request):
|
|
logs = ActivityLog.objects.all().order_by("-created_at")[:10]
|
|
gender_count = Student.get_gender_count()
|
|
context = {
|
|
"student_count": User.objects.get_student_count(),
|
|
"lecturer_count": User.objects.get_lecturer_count(),
|
|
"superuser_count": User.objects.get_superuser_count(),
|
|
"males_count": gender_count["M"],
|
|
"females_count": gender_count["F"],
|
|
"logs": logs,
|
|
}
|
|
return render(request, "core/dashboard.html", context)
|
|
|
|
|
|
@login_required
|
|
def post_add(request):
|
|
if request.method == "POST":
|
|
form = NewsAndEventsForm(request.POST)
|
|
title = form.cleaned_data.get("title", "Post") if form.is_valid() else None
|
|
if form.is_valid():
|
|
form.save()
|
|
messages.success(request, f"{title} has been uploaded.")
|
|
return redirect("home")
|
|
messages.error(request, "Please correct the error(s) below.")
|
|
else:
|
|
form = NewsAndEventsForm()
|
|
return render(request, "core/post_add.html", {"title": "Add Post", "form": form})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def edit_post(request, pk):
|
|
instance = get_object_or_404(NewsAndEvents, pk=pk)
|
|
if request.method == "POST":
|
|
form = NewsAndEventsForm(request.POST, instance=instance)
|
|
title = form.cleaned_data.get("title", "Post") if form.is_valid() else None
|
|
if form.is_valid():
|
|
form.save()
|
|
messages.success(request, f"{title} has been updated.")
|
|
return redirect("home")
|
|
messages.error(request, "Please correct the error(s) below.")
|
|
else:
|
|
form = NewsAndEventsForm(instance=instance)
|
|
return render(request, "core/post_add.html", {"title": "Edit Post", "form": form})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def delete_post(request, pk):
|
|
post = get_object_or_404(NewsAndEvents, pk=pk)
|
|
post_title = post.title
|
|
post.delete()
|
|
messages.success(request, f"{post_title} has been deleted.")
|
|
return redirect("home")
|
|
|
|
|
|
# ########################################################
|
|
# Session
|
|
# ########################################################
|
|
@login_required
|
|
@lecturer_required
|
|
def session_list_view(request):
|
|
"""Show list of all sessions"""
|
|
sessions = Session.objects.all().order_by("-is_current_session", "-session")
|
|
return render(request, "core/session_list.html", {"sessions": sessions})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def session_add_view(request):
|
|
"""Add a new session"""
|
|
if request.method == "POST":
|
|
form = SessionForm(request.POST)
|
|
if form.is_valid():
|
|
if form.cleaned_data.get("is_current_session"):
|
|
unset_current_session()
|
|
form.save()
|
|
messages.success(request, "Session added successfully.")
|
|
return redirect("session_list")
|
|
else:
|
|
form = SessionForm()
|
|
return render(request, "core/session_update.html", {"form": form})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def session_update_view(request, pk):
|
|
session = get_object_or_404(Session, pk=pk)
|
|
if request.method == "POST":
|
|
form = SessionForm(request.POST, instance=session)
|
|
if form.is_valid():
|
|
if form.cleaned_data.get("is_current_session"):
|
|
unset_current_session()
|
|
form.save()
|
|
messages.success(request, "Session updated successfully.")
|
|
return redirect("session_list")
|
|
else:
|
|
form = SessionForm(instance=session)
|
|
return render(request, "core/session_update.html", {"form": form})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def session_delete_view(request, pk):
|
|
session = get_object_or_404(Session, pk=pk)
|
|
if session.is_current_session:
|
|
messages.error(request, "You cannot delete the current session.")
|
|
else:
|
|
session.delete()
|
|
messages.success(request, "Session successfully deleted.")
|
|
return redirect("session_list")
|
|
|
|
|
|
def unset_current_session():
|
|
"""Unset current session"""
|
|
current_session = Session.objects.filter(is_current_session=True).first()
|
|
if current_session:
|
|
current_session.is_current_session = False
|
|
current_session.save()
|
|
|
|
|
|
# ########################################################
|
|
# Semester
|
|
# ########################################################
|
|
@login_required
|
|
@lecturer_required
|
|
def semester_list_view(request):
|
|
semesters = Semester.objects.all().order_by("-is_current_semester", "-semester")
|
|
return render(request, "core/semester_list.html", {"semesters": semesters})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def semester_add_view(request):
|
|
if request.method == "POST":
|
|
form = SemesterForm(request.POST)
|
|
if form.is_valid():
|
|
if form.cleaned_data.get("is_current_semester"):
|
|
unset_current_semester()
|
|
unset_current_session()
|
|
form.save()
|
|
messages.success(request, "Semester added successfully.")
|
|
return redirect("semester_list")
|
|
else:
|
|
form = SemesterForm()
|
|
return render(request, "core/semester_update.html", {"form": form})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def semester_update_view(request, pk):
|
|
semester = get_object_or_404(Semester, pk=pk)
|
|
if request.method == "POST":
|
|
form = SemesterForm(request.POST, instance=semester)
|
|
if form.is_valid():
|
|
if form.cleaned_data.get("is_current_semester"):
|
|
unset_current_semester()
|
|
unset_current_session()
|
|
form.save()
|
|
messages.success(request, "Semester updated successfully!")
|
|
return redirect("semester_list")
|
|
else:
|
|
form = SemesterForm(instance=semester)
|
|
return render(request, "core/semester_update.html", {"form": form})
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def semester_delete_view(request, pk):
|
|
semester = get_object_or_404(Semester, pk=pk)
|
|
if semester.is_current_semester:
|
|
messages.error(request, "You cannot delete the current semester.")
|
|
else:
|
|
semester.delete()
|
|
messages.success(request, "Semester successfully deleted.")
|
|
return redirect("semester_list")
|
|
|
|
|
|
def unset_current_semester():
|
|
"""Unset current semester"""
|
|
current_semester = Semester.objects.filter(is_current_semester=True).first()
|
|
if current_semester:
|
|
current_semester.is_current_semester = False
|
|
current_semester.save()
|