1
+ import datetime
1
2
from django .contrib .auth .models import AbstractUser , AbstractBaseUser , UserManager
2
3
from django .db import models
3
4
from django .contrib .auth .validators import UnicodeUsernameValidator
@@ -52,6 +53,11 @@ def clean(self):
52
53
def get_classes (self ):
53
54
return [uc .course for uc in UserCourse .objects .filter (user__id = self .id )]
54
55
56
+ class LectureTypes (models .TextChoices ):
57
+ LECTURE = "lecture"
58
+ PRACTICAL = "practical"
59
+ WORKSHOP = "workshop"
60
+ EXAM = "exam"
55
61
56
62
class Course (models .Model ):
57
63
course_name = models .CharField (max_length = 50 )
@@ -68,11 +74,51 @@ def get_enrolled_students(self):
68
74
def get_teachers (self ):
69
75
return [uc .user for uc in UserCourse .objects .filter (user__role = AccountRoles .TEACHER )]
70
76
77
+ def get_lectures (self ):
78
+ return [lecture for lecture in CourseLecture .objects .filter (course = self )]
79
+
71
80
def add_user_to_course (self , user : User ):
72
- UserCourse .objects .create (user = user , course = self )
81
+ UserCourse .objects .create (user = user , course = self ).save ()
82
+
83
+ def add_lecture_to_course (self , start_time : datetime .datetime , end_time : datetime .datetime , lecture_type : LectureTypes = LectureTypes .LECTURE ):
84
+ CourseLecture .objects .create (start_time = start_time , end_time = end_time , lecture_type = lecture_type , course = self ).save ()
73
85
74
86
# This is for storing users (teachers/students) in courses
75
87
class UserCourse (models .Model ):
76
88
user = models .ForeignKey (User , null = False , related_name = 'user' , on_delete = models .CASCADE )
77
89
course = models .ForeignKey (Course , null = False , related_name = 'course' , on_delete = models .CASCADE )
78
90
91
+ class CourseLecture (models .Model ):
92
+ course = models .ForeignKey (Course , null = False , related_name = 'course_lecture' , on_delete = models .CASCADE )
93
+ start_time = models .DateTimeField ()
94
+ end_time = models .DateTimeField ()
95
+ lecture_type = models .CharField (
96
+ choices = LectureTypes .choices ,
97
+ default = LectureTypes .LECTURE ,
98
+ )
99
+
100
+ def set_attendence_user (self , student : User , teacher = False ):
101
+ queryset = AttendenceAcknowledgement .objects .filter (lecture = self , student = student )
102
+ if not queryset : ack = AttendenceAcknowledgement .objects .create (lecture = self , student = student )
103
+ else : ack = queryset [0 ]
104
+
105
+ if teacher : ack .attended_teacher = True
106
+ else : ack .attended_student = True
107
+ ack .save ()
108
+
109
+ def get_attendence_user (self , student : User ):
110
+ queryset = AttendenceAcknowledgement .objects .filter (lecture = self , student = student )
111
+ return None if not queryset else queryset [0 ]
112
+
113
+ def get_attendence (self ):
114
+ queryset = AttendenceAcknowledgement .objects .filter (lecture = self )
115
+ return [] if not queryset else queryset [0 ]
116
+
117
+ class AttendenceAcknowledgement (models .Model ):
118
+ attended_student = models .BooleanField (default = False )
119
+ attended_teacher = models .BooleanField (default = False )
120
+ student = models .ForeignKey (User , null = False , related_name = 'user_ack' , on_delete = models .CASCADE )
121
+ lecture = models .ForeignKey (CourseLecture , null = False , related_name = 'lecture' , on_delete = models .CASCADE )
122
+
123
+
124
+
0 commit comments