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.save()
if completion_status == "SUBMITTED":
if completion_status == AssignmentCompletionStatus.SUBMITTED:
learning_content = assignment.learningcontentassignment_set.first()
if learning_content:
mark_course_completion(

View File

@ -9,7 +9,12 @@ from vbv_lernwelt.course_session.models import (
@admin.register(CourseSessionAttendanceCourse)
class CourseSessionAttendanceCourseAdmin(admin.ModelAdmin):
# 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 = [
"course_session",
"learning_content",

View File

@ -1,5 +1,6 @@
from django.db import models
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.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
# we will store the attendance list as a JSONField
# 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):
if not self.pk:

View File

@ -20,7 +20,9 @@ def update_attendance_list(
attendance_course: CourseSessionAttendanceCourse,
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 = []
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.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 for user_id in user_id_list_before if user_id not in user_id_list_after
]
user_id_set_removed = user_id_set_before - user_id_set_after
for user_id in user_id_list_removed:
# FIXME: create completion for every user in attendance_user_list
for user_id in user_id_set_removed:
u = User.objects.filter(id=user_id).first()
if u is not None:
mark_course_completion(