Files
T
2025-04-20 17:46:30 +05:45

369 lines
9.9 KiB
Python

# Standard library imports
import django.db
# Third-party app imports
from rest_framework import serializers
# Local app imports
from app.firebase import FCMDevice
from app.models import (
Attendance,
AttendanceRecord,
Batch,
Course,
CourseTracking,
Institute,
InstituteFeedback,
Notice,
Parent,
ParentFeedback,
ParentInstituteFeedback,
Routine,
Staff,
StaffInstituteFeedback,
StaffLeave,
Student,
StudentFeedback,
StudentLeave,
Subject,
SubjectFile,
TeacherParentMeeting,
)
class FCMDeviceSerializer(serializers.ModelSerializer):
class Meta:
model = FCMDevice
fields = ["id", "token"]
class InstituteSerializer(serializers.ModelSerializer):
class Meta:
model = Institute
fields = [
"id",
"name",
"phone",
"email",
"address",
"pan_no",
"reg_no",
"logo",
"description",
]
class SubjectSerializer(serializers.ModelSerializer):
syllabus_pdf_url = serializers.SerializerMethodField()
class Meta:
model = Subject
fields = [
"id",
"name",
"course",
"period_or_year",
"syllabus_pdf",
"syllabus_pdf_url",
]
def get_syllabus_pdf_url(self, obj):
return obj.get_pdf_url()
class CourseSerializer(serializers.ModelSerializer):
subjects = SubjectSerializer(many=True, read_only=True)
class Meta:
model = Course
fields = [
"id",
"name",
"code",
"duration",
"duration_type",
"is_active",
"description",
"subjects",
]
class BatchSerializer(serializers.ModelSerializer):
class Meta:
model = Batch
fields = ["id", "name", "year"]
class StudentSerializer(serializers.ModelSerializer):
batches = BatchSerializer(many=True, read_only=True)
course = CourseSerializer(read_only=True)
class Meta:
model = Student
fields = [
"id",
"name",
"status",
"gender",
"birth_date",
"email",
"phone",
"temporary_address",
"permanent_address",
"marital_status",
"parent_name",
"parent_phone",
"citizenship_no",
"image",
"batches",
"course",
"current_semester",
"joining_date",
]
read_only_fields = ["id"]
class StaffSerializer(serializers.ModelSerializer):
class Meta:
model = Staff
fields = [
"id",
"name",
"gender",
"designation",
"birth_date",
"phone",
"email",
"temporary_address",
"permanent_address",
"marital_status",
"parent_name",
"parent_phone",
"citizenship_no",
"passport",
"image",
"joining_date",
"is_active",
]
read_only_fields = ["id"]
class RoutineSerializer(serializers.ModelSerializer):
teacher = StaffSerializer(read_only=True)
subject = SubjectSerializer(read_only=True)
course = CourseSerializer(read_only=True)
class Meta:
model = Routine
fields = [
"id",
"course",
"subject",
"teacher",
"start_time",
"end_time",
"period_or_year",
"is_active",
]
class AttendanceRecordSerializer(serializers.ModelSerializer):
student = StudentSerializer(read_only=True)
class Meta:
model = AttendanceRecord
fields = ["id", "attendance", "student", "student_attend"]
class AttendanceSerializer(serializers.ModelSerializer):
records = AttendanceRecordSerializer(many=True, read_only=True)
routine = RoutineSerializer(read_only=True)
teacher = StaffSerializer(read_only=True)
class Meta:
model = Attendance
fields = [
"id",
"date",
"routine",
"teacher",
"teacher_attend",
"class_status",
"records",
]
class NoticeSerializer(serializers.ModelSerializer):
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
image_url = serializers.SerializerMethodField()
class Meta:
model = Notice
fields = ["id", "title", "message", "image", "image_url", "created_at"]
read_only_fields = ["created_at"]
def get_image_url(self, obj):
if obj.image:
return obj.image.url
return None
class StaffLeaveSerializer(serializers.ModelSerializer):
staff = StaffSerializer(read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
class Meta:
model = StaffLeave
fields = [
"id",
"staff",
"start_date",
"end_date",
"message",
"status",
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
class StudentLeaveSerializer(serializers.ModelSerializer):
student = StudentSerializer(read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
class Meta:
model = StudentLeave
fields = [
"id",
"student",
"start_date",
"end_date",
"message",
"status",
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
class StudentFeedbackSerializer(serializers.ModelSerializer):
student = StudentSerializer(read_only=True)
teacher = StaffSerializer(read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
class Meta:
model = StudentFeedback
fields = [
"id",
"student",
"teacher",
"rating",
"feedback_text",
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
class InstituteFeedbackSerializer(serializers.ModelSerializer):
user = StudentSerializer(read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
class Meta:
model = InstituteFeedback
fields = [
"id",
"institute",
"user",
"feedback_type",
"rating",
"feedback_text",
"is_anonymous",
"is_public",
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
class StaffInstituteFeedbackSerializer(serializers.ModelSerializer):
staff = StaffSerializer(read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
class Meta:
model = StaffInstituteFeedback
fields = [
"id",
"institute",
"staff",
"feedback_type",
"rating",
"feedback_text",
"is_anonymous",
"is_public",
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
class CourseTrackingSerializer(serializers.ModelSerializer):
student = StudentSerializer(read_only=True)
course = CourseSerializer(read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
current_period_display = serializers.CharField(read_only=True)
class Meta:
model = CourseTracking
fields = [
"id",
"student",
"course",
"enrollment_date",
"start_date",
"expected_end_date",
"actual_end_date",
"progress_status",
"completion_percentage",
"current_period",
"period_start_date",
"period_end_date",
"notes",
"created_at",
"updated_at",
"current_period_display",
]
read_only_fields = [
"created_at",
"updated_at",
"enrollment_date",
"current_period_display",
]
class TOTPSecretSerializer(serializers.ModelSerializer):
class Meta:
model = TOTPSecret
fields = ["id", "identifier", "created_at", "expires_at"]
class ResetTokenSerializer(serializers.ModelSerializer):
class Meta:
model = ResetToken
fields = ["id", "token", "identifier", "created_at", "expires_at"]
class ParentSerializer(serializers.ModelSerializer):
students = StudentSerializer(many=True, read_only=True)
class Meta:
model = Parent
fields = ["id", "name", "phone", "email", "address", "students"]
read_only_fields = ["id"]