Files
Student-Management-System-I…/app/adminViews.py
T
2025-01-17 09:10:45 +05:45

342 lines
11 KiB
Python

import json
import requests
from django.contrib.admin import site
from django.contrib import messages
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.urls import reverse
from django.views.decorators.csrf import csrf_exempt
from app.models import (
Student,
Teacher,
Subject,
Course,
LeaveReportStudent,
LeaveReportTeacher,
Attendance,
AttendanceReport,
AcademicYear,
)
from django.contrib.auth.decorators import login_required, user_passes_test
from app.forms import SubjectForm
admin_site = site
@login_required
@user_passes_test(lambda u: u.is_superuser)
def admin_home(request):
admin_site = site
student_count1 = Student.objects.all().count()
teacher_count = Teacher.objects.all().count()
subject_count = Subject.objects.all().count()
course_count = Course.objects.all().count()
course_all = Course.objects.all()
course_name_list = []
subject_count_list = []
student_count_list_in_course = []
for course in course_all:
subjects = Subject.objects.filter(course_id=course.id).count()
students = Student.objects.filter(course_id=course.id).count()
course_name_list.append(course.name)
subject_count_list.append(subjects)
student_count_list_in_course.append(students)
subjects_all = Subject.objects.all()
subject_list = []
student_count_list_in_subject = []
for subject in subjects_all:
course = subject.course
student_count = Student.objects.filter(course_id=course.id).count()
subject_list.append(subject.name)
student_count_list_in_subject.append(student_count)
teacher = Teacher.objects.all()
attendance_present_list_teacher = []
attendance_absent_list_teacher = []
teacher_name_list = []
for teacher in teacher:
subject_ids = Subject.objects.filter(teacher_id=teacher.id)
attendance = Attendance.objects.filter(
subject_id__in=subject_ids,
).count()
leaves = LeaveReportTeacher.objects.filter(
teacher_id=teacher.id, leave_status=1
).count()
attendance_present_list_teacher.append(attendance)
attendance_absent_list_teacher.append(leaves)
teacher_name_list.append(teacher.first_name)
students_all = Student.objects.all()
attendance_present_list_student = []
attendance_absent_list_student = []
student_name_list = []
for student in students_all:
attendance = AttendanceReport.objects.filter(
student_id=student.id, status=True
).count()
absent = AttendanceReport.objects.filter(
student_id=student.id, status=False
).count()
leaves = LeaveReportStudent.objects.filter(
student_id=student.id, leave_status=1
).count()
attendance_present_list_student.append(attendance)
attendance_absent_list_student.append(leaves + absent)
student_name_list.append(student.admin.username)
context = {
**admin_site.each_context(request),
"title": "Admin Dashboard",
"student_count": student_count1,
"teacher_count": teacher_count,
"subject_count": subject_count,
"course_count": course_count,
"course_name_list": course_name_list,
"subject_count_list": subject_count_list,
"student_count_list_in_course": student_count_list_in_course,
"student_count_list_in_subject": student_count_list_in_subject,
"subject_list": subject_list,
"teacher_name_list": teacher_name_list,
"attendance_present_list_teacher": attendance_present_list_teacher,
"attendance_absent_list_teacher": attendance_absent_list_teacher,
"student_name_list": student_name_list,
"attendance_present_list_student": attendance_present_list_student,
"attendance_absent_list_student": attendance_absent_list_student,
"opts": Student._meta,
}
return render(request, "hod/dashboard.html", context)
def add_course(request):
admin_site = site
if request.method == "POST":
name = request.POST.get("name")
course_type = request.POST.get("course_type")
duration = request.POST.get("duration")
if not name or not course_type or not duration:
messages.error(request, "All fields are required!")
return redirect("add_course")
try:
duration = int(duration)
if duration <= 0:
raise ValueError
except ValueError:
messages.error(request, "Duration must be a positive number!")
return redirect("add_course")
if Course.objects.filter(name=name).exists():
messages.error(request, "A course with this name already exists.")
return redirect("add_course")
Course.objects.create(name=name, course_type=course_type, duration=duration)
messages.success(request, "Course added successfully!")
return redirect("add_course")
context = {
**admin_site.each_context(request),
"title": "Add Course",
"COURSE_TYPE_CHOICES": Course.COURSE_TYPE_CHOICES,
"opts": Course._meta,
}
return render(request, "hod/add_course.html", context)
def manage_course(request):
admin_site = site
courses = Course.objects.all()
context = {
**admin_site.each_context(request),
"courses": courses,
"title": "Manage Courses",
"opts": Course._meta,
}
return render(request, "hod/manage_course.html", context)
def edit_course(request, course_id):
course = get_object_or_404(Course, id=course_id)
if request.method == "POST":
name = request.POST.get("name")
course_type = request.POST.get("course_type")
duration = request.POST.get("duration")
# Validate unique name if it changed
if name != course.name and Course.objects.filter(name=name).exists():
messages.error(request, "A course with this name already exists.")
return render(
request, "edit_course.html", {"course": course, "title": "Edit Course"}
)
try:
course.name = name
course.course_type = course_type
course.duration = duration
course.save()
messages.success(request, "Course updated successfully.")
return redirect("manage_course")
except Exception as e:
messages.error(request, f"Error updating course: {str(e)}")
return render(
request, "hod/edit_course.html", {"course": course, "title": "Edit Course"}
)
def delete_course(request, course_id):
course = Course.objects.get(id=course_id)
try:
course.delete()
messages.success(request, "Course Deleted Successfully.")
return redirect("manage_course")
except:
messages.error(request, "Failed to Delete Course.")
return redirect("manage_course")
def add_academicyear(request):
admin_site = site
if request.method == "POST":
start_date = request.POST.get("start_date")
academic_year = AcademicYear.objects.create(start_date=start_date)
messages.success(request, "Academic Year added successfully.")
return redirect("manage_academicyear")
context = {
**admin_site.each_context(request),
"title": "Add Academic Year",
"opts": AcademicYear._meta,
}
return render(request, "hod/add_academicyear.html", context)
def edit_academicyear(request, pk):
academic_year = get_object_or_404(AcademicYear, pk=pk)
admin_site = site
if request.method == "POST":
start_date = request.POST.get("start_date")
if start_date:
academic_year.start_date = start_date
academic_year.save()
messages.success(request, "Academic Year updated successfully.")
return redirect("manage_academicyear")
else:
messages.error(request, "Please provide a valid start date.")
context = {
**admin_site.each_context(request),
"title": "Edit Academic Year",
"opts": AcademicYear._meta,
}
return render(
request, "hod/edit_academicyear.html", {"academic_year": academic_year}
)
def manage_academicyear(request):
admin_site = site
context = {
**admin_site.each_context(request),
"academic_years": AcademicYear.objects.all(),
"title": "Manage Academic Year",
"opts": AcademicYear._meta,
}
return render(request, "hod/manage_academicyear.html", context)
def delete_academicyear(request, academic_year_id):
academic_year = AcademicYear.objects.get(id=academic_year_id)
try:
academic_year.delete()
messages.success(request, "AcademicYear Deleted Successfully.")
return redirect("manage_academicyear")
except:
messages.error(request, "Failed to Delete AcademicYear.")
return redirect("manage_academicyear")
def manage_subjects(request):
subjects = Subject.objects.all()
courses = Course.objects.all()
selected_course_id = request.GET.get("course")
selected_duration = request.GET.get("duration", "")
if selected_course_id and selected_duration:
subjects = Subject.objects.filter(
course_id=selected_course_id, duration=selected_duration
)
elif selected_course_id:
subjects = Subject.objects.filter(course_id=selected_course_id)
elif selected_duration:
subjects = Subject.objects.filter(duration=selected_duration)
else:
subjects = Subject.objects.all()
context = {
**admin_site.each_context(request),
"subjects": subjects,
"selected_course_id": selected_course_id,
"selected_duration": selected_duration,
"title": "Manage Subjects",
"courses": courses,
"opts": Subject._meta,
}
return render(request, "hod/manage_subject.html", context)
def add_subject(request):
courses = Course.objects.all()
if request.method == "POST":
form = SubjectForm(request.POST)
if form.is_valid():
form.save()
return redirect("manage_subjects")
else:
form = SubjectForm()
context = {
**admin_site.each_context(request),
"title": "Add Subject",
"courses": courses,
"form": form,
"opts": Subject._meta,
}
return render(request, "hod/add_subject.html", context)
def edit_subject(request, pk):
subject = get_object_or_404(Subject, pk=pk)
courses = Course.objects.all()
if request.method == "POST":
form = SubjectForm(request.POST, instance=subject)
if form.is_valid():
form.save()
return redirect("manage_subjects")
else:
form = SubjectForm(instance=subject)
context = {
**admin_site.each_context(request),
"title": "Add Subject",
"courses": courses,
"form": form,
"opts": Subject._meta,
}
return render(request, "hod/edit_subject.html", context)
def delete_subject(request, subject_id):
subject = Subject.objects.get(id=subject_id)
try:
subject.delete()
messages.success(request, "Subject Deleted Successfully.")
return redirect("manage_subject")
except:
messages.error(request, "Failed to Delete Subject.")
return redirect("manage_subject")