Skip to content

Commit a97519d

Browse files
authored
Merge pull request #13 from DevOps-Cloud-Team5/SCRUM-40-Attendence-and-Lectures
create lectures and attendence models
2 parents 1808cb7 + d3681d0 commit a97519d

File tree

3 files changed

+82
-2
lines changed

3 files changed

+82
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Generated by Django 5.0.2 on 2024-03-13 13:57
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('api', '0002_alter_user_role_usercourse'),
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name='CourseLecture',
17+
fields=[
18+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19+
('start_time', models.DateTimeField()),
20+
('end_time', models.DateTimeField()),
21+
('lecture_type', models.CharField(choices=[('lecture', 'Lecture'), ('practical', 'Practical'), ('workshop', 'Workshop'), ('exam', 'Exam')], default='lecture')),
22+
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_lecture', to='api.course')),
23+
],
24+
),
25+
migrations.CreateModel(
26+
name='AttendenceAcknowledgement',
27+
fields=[
28+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
29+
('attended_student', models.BooleanField(default=False)),
30+
('attended_teacher', models.BooleanField(default=False)),
31+
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_ack', to=settings.AUTH_USER_MODEL)),
32+
('lecture', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lecture', to='api.courselecture')),
33+
],
34+
),
35+
]

api/models.py

+47-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
from django.contrib.auth.models import AbstractUser, AbstractBaseUser, UserManager
23
from django.db import models
34
from django.contrib.auth.validators import UnicodeUsernameValidator
@@ -52,6 +53,11 @@ def clean(self):
5253
def get_classes(self):
5354
return [uc.course for uc in UserCourse.objects.filter(user__id=self.id)]
5455

56+
class LectureTypes(models.TextChoices):
57+
LECTURE = "lecture"
58+
PRACTICAL = "practical"
59+
WORKSHOP = "workshop"
60+
EXAM = "exam"
5561

5662
class Course(models.Model):
5763
course_name = models.CharField(max_length=50)
@@ -68,11 +74,51 @@ def get_enrolled_students(self):
6874
def get_teachers(self):
6975
return [uc.user for uc in UserCourse.objects.filter(user__role=AccountRoles.TEACHER)]
7076

77+
def get_lectures(self):
78+
return [lecture for lecture in CourseLecture.objects.filter(course=self)]
79+
7180
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()
7385

7486
# This is for storing users (teachers/students) in courses
7587
class UserCourse(models.Model):
7688
user = models.ForeignKey(User, null=False, related_name='user', on_delete=models.CASCADE)
7789
course = models.ForeignKey(Course, null=False, related_name='course', on_delete=models.CASCADE)
7890

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+

example.env

-1
This file was deleted.

0 commit comments

Comments
 (0)