huge updates
This commit is contained in:
1 parent
b5a43ac0ad
commit
6cc74a355f
40 files changed
+6878
-2378
No files matched your search
+267
-45
@@ -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
|
||||
Reference in new issue
Block a user