Changes after code review

This commit is contained in:
Daniel Egger 2023-07-12 15:21:55 +02:00
parent dfefdb52ca
commit 5b3da272ce
4 changed files with 34 additions and 10 deletions

View File

@ -173,7 +173,7 @@ def update_assignment_completion(
acl.completion_data[key].update(task_data) acl.completion_data[key].update(task_data)
acl.save() acl.save()
if completion_status == "SUBMITTED": if completion_status == AssignmentCompletionStatus.SUBMITTED:
learning_content = assignment.learningcontentassignment_set.first() learning_content = assignment.learningcontentassignment_set.first()
if learning_content: if learning_content:
mark_course_completion( mark_course_completion(

View File

@ -9,7 +9,12 @@ from vbv_lernwelt.course_session.models import (
@admin.register(CourseSessionAttendanceCourse) @admin.register(CourseSessionAttendanceCourse)
class CourseSessionAttendanceCourseAdmin(admin.ModelAdmin): class CourseSessionAttendanceCourseAdmin(admin.ModelAdmin):
# Inline fields are not possible for the DueDate model, because it is not a ForeignKey relatoion. # Inline fields are not possible for the DueDate model, because it is not a ForeignKey relatoion.
readonly_fields = ["course_session", "learning_content", "due_date"] readonly_fields = [
"course_session",
"learning_content",
"due_date",
"attendance_user_list",
]
list_display = [ list_display = [
"course_session", "course_session",
"learning_content", "learning_content",

View File

@ -1,5 +1,6 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_jsonform.models.fields import JSONField as JSONSchemaField
from vbv_lernwelt.assignment.models import AssignmentType from vbv_lernwelt.assignment.models import AssignmentType
from vbv_lernwelt.duedate.models import DueDate from vbv_lernwelt.duedate.models import DueDate
@ -32,7 +33,24 @@ class CourseSessionAttendanceCourse(models.Model):
# because the attendance list is more of a snapshot of the current state # because the attendance list is more of a snapshot of the current state
# we will store the attendance list as a JSONField # we will store the attendance list as a JSONField
# the important field of the list type is "user_id" # the important field of the list type is "user_id"
attendance_user_list = models.JSONField(default=list) ATTENDANCE_USER_LIST_SCHEMA = {
"type": "array",
"items": {
"type": "object",
"properties": {
"user_id": {
"type": "number",
"required": True,
},
"email": {"type": "string"},
"first_name": {"type": "string"},
"last_name": {"type": "string"},
},
},
}
attendance_user_list = JSONSchemaField(
default=list, schema=ATTENDANCE_USER_LIST_SCHEMA
)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.pk: if not self.pk:

View File

@ -20,7 +20,9 @@ def update_attendance_list(
attendance_course: CourseSessionAttendanceCourse, attendance_course: CourseSessionAttendanceCourse,
attendance_user_list: List[AttendanceUser], attendance_user_list: List[AttendanceUser],
): ):
user_id_list_before = [u["user_id"] for u in attendance_course.attendance_user_list] user_id_set_before = set(
[u["user_id"] for u in attendance_course.attendance_user_list]
)
result_user_list = [] result_user_list = []
for attendance_user in attendance_user_list: for attendance_user in attendance_user_list:
@ -52,14 +54,13 @@ def update_attendance_list(
attendance_course.attendance_user_list = result_user_list attendance_course.attendance_user_list = result_user_list
attendance_course.save() attendance_course.save()
user_id_list_after = [u["user_id"] for u in attendance_course.attendance_user_list] user_id_set_after = set(
[u["user_id"] for u in attendance_course.attendance_user_list]
)
user_id_list_removed = [ user_id_set_removed = user_id_set_before - user_id_set_after
user_id for user_id in user_id_list_before if user_id not in user_id_list_after
]
for user_id in user_id_list_removed: for user_id in user_id_set_removed:
# FIXME: create completion for every user in attendance_user_list
u = User.objects.filter(id=user_id).first() u = User.objects.filter(id=user_id).first()
if u is not None: if u is not None:
mark_course_completion( mark_course_completion(