huge updates

This commit is contained in:
sankalp committed 2025-04-22 03:47:31 +05:45
1 parent b5a43ac0ad
commit 6cc74a355f
40 files changed
+6878 -2378

No files matched your search

+267 -45
View File
@@ -28,6 +28,8 @@ from app.models import (
Subject,
SubjectFile,
TeacherParentMeeting,
TOTPSecret,
ResetToken,
)
@@ -38,6 +40,10 @@ class FCMDeviceSerializer(serializers.ModelSerializer):
class InstituteSerializer(serializers.ModelSerializer):
logo_url = serializers.SerializerMethodField()
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 = Institute
fields = [
@@ -49,30 +55,41 @@ class InstituteSerializer(serializers.ModelSerializer):
"pan_no",
"reg_no",
"logo",
"logo_url",
"description",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_logo_url(self, obj):
if obj.logo:
return obj.logo.url
return None
class SubjectSerializer(serializers.ModelSerializer):
syllabus_pdf_url = serializers.SerializerMethodField()
class BatchSerializer(serializers.ModelSerializer):
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 = Subject
model = Batch
fields = [
"id",
"name",
"course",
"period_or_year",
"syllabus_pdf",
"syllabus_pdf_url",
"year",
"is_active",
"created_at",
"updated_at",
]
def get_syllabus_pdf_url(self, obj):
return obj.get_pdf_url()
read_only_fields = ["id", "created_at", "updated_at"]
class CourseSerializer(serializers.ModelSerializer):
subjects = SubjectSerializer(many=True, read_only=True)
subjects = serializers.SerializerMethodField()
batches = BatchSerializer(many=True, 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 = Course
@@ -82,21 +99,55 @@ class CourseSerializer(serializers.ModelSerializer):
"code",
"duration",
"duration_type",
"is_active",
"description",
"is_active",
"subjects",
"batches",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_subjects(self, obj):
from app.serializers import SubjectSerializer
subjects = obj.subjects.all()
return SubjectSerializer(subjects, many=True).data
class BatchSerializer(serializers.ModelSerializer):
class SubjectSerializer(serializers.ModelSerializer):
course = CourseSerializer(read_only=True)
syllabus_pdf_url = serializers.SerializerMethodField()
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 = Batch
fields = ["id", "name", "year"]
model = Subject
fields = [
"id",
"name",
"code",
"course",
"period_or_year",
"syllabus_pdf",
"syllabus_pdf_url",
"is_active",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_syllabus_pdf_url(self, obj):
if obj.syllabus_pdf:
return obj.syllabus_pdf.url
return None
class StudentSerializer(serializers.ModelSerializer):
batches = BatchSerializer(many=True, read_only=True)
course = CourseSerializer(read_only=True)
image_url = serializers.SerializerMethodField()
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 = Student
@@ -115,15 +166,28 @@ class StudentSerializer(serializers.ModelSerializer):
"parent_phone",
"citizenship_no",
"image",
"image_url",
"batches",
"course",
"current_semester",
"current_period",
"joining_date",
"fcm_token",
"created_at",
"updated_at",
]
read_only_fields = ["id"]
read_only_fields = ["id", "created_at", "updated_at"]
def get_image_url(self, obj):
if obj.image:
return obj.image.url
return None
class StaffSerializer(serializers.ModelSerializer):
image_url = serializers.SerializerMethodField()
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 = Staff
fields = [
@@ -142,16 +206,27 @@ class StaffSerializer(serializers.ModelSerializer):
"citizenship_no",
"passport",
"image",
"image_url",
"joining_date",
"is_active",
"fcm_token",
"created_at",
"updated_at",
]
read_only_fields = ["id"]
read_only_fields = ["id", "created_at", "updated_at"]
def get_image_url(self, obj):
if obj.image:
return obj.image.url
return None
class RoutineSerializer(serializers.ModelSerializer):
teacher = StaffSerializer(read_only=True)
subject = SubjectSerializer(read_only=True)
course = CourseSerializer(read_only=True)
subject = SubjectSerializer(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 = Routine
@@ -164,21 +239,18 @@ class RoutineSerializer(serializers.ModelSerializer):
"end_time",
"period_or_year",
"is_active",
"created_at",
"updated_at",
]
class AttendanceRecordSerializer(serializers.ModelSerializer):
student = StudentSerializer(read_only=True)
class Meta:
model = AttendanceRecord
fields = ["id", "attendance", "student", "student_attend"]
read_only_fields = ["id", "created_at", "updated_at"]
class AttendanceSerializer(serializers.ModelSerializer):
records = AttendanceRecordSerializer(many=True, read_only=True)
routine = RoutineSerializer(read_only=True)
teacher = StaffSerializer(read_only=True)
records = serializers.SerializerMethodField()
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 = Attendance
@@ -190,23 +262,66 @@ class AttendanceSerializer(serializers.ModelSerializer):
"teacher_attend",
"class_status",
"records",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_records(self, obj):
from app.serializers import AttendanceRecordSerializer
records = obj.records.all()
return AttendanceRecordSerializer(records, many=True).data
class AttendanceRecordSerializer(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 = AttendanceRecord
fields = [
"id",
"attendance",
"student",
"student_attend",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
class NoticeSerializer(serializers.ModelSerializer):
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
image_url = serializers.SerializerMethodField()
file_url = serializers.SerializerMethodField()
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 = Notice
fields = ["id", "title", "message", "image", "image_url", "created_at"]
read_only_fields = ["created_at"]
fields = [
"id",
"title",
"image",
"image_url",
"message",
"file",
"file_url",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_image_url(self, obj):
if obj.image:
return obj.image.url
return None
def get_file_url(self, obj):
if obj.file:
return obj.file.url
return None
class StaffLeaveSerializer(serializers.ModelSerializer):
staff = StaffSerializer(read_only=True)
@@ -225,7 +340,7 @@ class StaffLeaveSerializer(serializers.ModelSerializer):
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class StudentLeaveSerializer(serializers.ModelSerializer):
@@ -245,7 +360,7 @@ class StudentLeaveSerializer(serializers.ModelSerializer):
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class StudentFeedbackSerializer(serializers.ModelSerializer):
@@ -265,10 +380,37 @@ class StudentFeedbackSerializer(serializers.ModelSerializer):
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class ParentFeedbackSerializer(serializers.ModelSerializer):
parent = serializers.SerializerMethodField()
teacher = StaffSerializer(read_only=True)
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 = ParentFeedback
fields = [
"id",
"parent",
"teacher",
"student",
"rating",
"feedback_text",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_parent(self, obj):
from app.serializers import ParentSerializer
return ParentSerializer(obj.parent).data
class InstituteFeedbackSerializer(serializers.ModelSerializer):
institute = InstituteSerializer(read_only=True)
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)
@@ -287,10 +429,11 @@ class InstituteFeedbackSerializer(serializers.ModelSerializer):
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class StaffInstituteFeedbackSerializer(serializers.ModelSerializer):
institute = InstituteSerializer(read_only=True)
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)
@@ -309,15 +452,42 @@ class StaffInstituteFeedbackSerializer(serializers.ModelSerializer):
"created_at",
"updated_at",
]
read_only_fields = ["created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class ParentInstituteFeedbackSerializer(serializers.ModelSerializer):
institute = InstituteSerializer(read_only=True)
parent = serializers.SerializerMethodField()
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 = ParentInstituteFeedback
fields = [
"id",
"institute",
"parent",
"feedback_type",
"rating",
"feedback_text",
"is_anonymous",
"is_public",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_parent(self, obj):
from app.serializers import ParentSerializer
return ParentSerializer(obj.parent).data
class CourseTrackingSerializer(serializers.ModelSerializer):
student = StudentSerializer(read_only=True)
course = CourseSerializer(read_only=True)
current_period_display = serializers.CharField(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
@@ -332,37 +502,89 @@ class CourseTrackingSerializer(serializers.ModelSerializer):
"progress_status",
"completion_percentage",
"current_period",
"current_period_display",
"period_start_date",
"period_end_date",
"notes",
"created_at",
"updated_at",
"current_period_display",
]
read_only_fields = [
read_only_fields = ["id", "created_at", "updated_at", "current_period_display"]
class SubjectFileSerializer(serializers.ModelSerializer):
file_url = serializers.SerializerMethodField()
uploaded_by = serializers.SerializerMethodField()
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 = SubjectFile
fields = [
"id",
"subject",
"title",
"description",
"file",
"file_url",
"uploaded_by",
"uploaded_at",
"created_at",
"updated_at",
"enrollment_date",
"current_period_display",
]
read_only_fields = ["id", "created_at", "updated_at", "uploaded_at"]
def get_file_url(self, obj):
if obj.file:
return obj.file.url
return None
def get_uploaded_by(self, obj):
from app.serializers import StaffSerializer
if obj.uploaded_by:
return StaffSerializer(obj.uploaded_by).data
return None
class TOTPSecretSerializer(serializers.ModelSerializer):
class Meta:
model = TOTPSecret
fields = ["id", "identifier", "created_at", "expires_at"]
fields = ["id", "identifier", "secret_key", "created_at", "expires_at"]
read_only_fields = ["id", "created_at"]
class ResetTokenSerializer(serializers.ModelSerializer):
class Meta:
model = ResetToken
fields = ["id", "token", "identifier", "created_at", "expires_at"]
read_only_fields = ["id", "created_at"]
class ParentSerializer(serializers.ModelSerializer):
students = StudentSerializer(many=True, read_only=True)
image_url = serializers.SerializerMethodField()
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 = Parent
fields = ["id", "name", "phone", "email", "address", "students"]
read_only_fields = ["id"]
fields = [
"id",
"name",
"phone",
"email",
"address",
"students",
"image",
"image_url",
"fcm_token",
"is_active",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def get_image_url(self, obj):
if obj.image:
return obj.image.url
return None