Changes after code review
This commit is contained in:
parent
dfefdb52ca
commit
5b3da272ce
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue