73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
import enum
|
|
from typing import List, TypedDict
|
|
|
|
from vbv_lernwelt.core.models import User
|
|
from vbv_lernwelt.course.services import mark_course_completion
|
|
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
|
|
|
|
|
|
class AttendanceUserStatus(enum.Enum):
|
|
PRESENT = "PRESENT"
|
|
ABSENT = "ABSENT"
|
|
|
|
|
|
class AttendanceUser(TypedDict):
|
|
user_id: str
|
|
status: AttendanceUserStatus
|
|
|
|
|
|
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]
|
|
|
|
result_user_list = []
|
|
for attendance_user in attendance_user_list:
|
|
u = User.objects.filter(id=attendance_user.get("user_id")).first()
|
|
if u is not None:
|
|
result_user_list.append(
|
|
{
|
|
"user_id": u.id,
|
|
"status": attendance_user.get(
|
|
"status", AttendanceUserStatus.PRESENT
|
|
).value,
|
|
"email": u.email,
|
|
"first_name": u.first_name,
|
|
"last_name": u.last_name,
|
|
}
|
|
)
|
|
completion_status = (
|
|
"success"
|
|
if attendance_user.get("status").value == "PRESENT"
|
|
else "fail"
|
|
)
|
|
mark_course_completion(
|
|
page_key=attendance_course.learning_content.translation_key,
|
|
user=u,
|
|
course_session=attendance_course.course_session,
|
|
completion_status=completion_status,
|
|
)
|
|
|
|
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_list_removed = [
|
|
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:
|
|
# FIXME: create completion for every user in attendance_user_list
|
|
u = User.objects.filter(id=user_id).first()
|
|
if u is not None:
|
|
mark_course_completion(
|
|
page_key=attendance_course.learning_content.translation_key,
|
|
user=u,
|
|
course_session=attendance_course.course_session,
|
|
completion_status="fail",
|
|
)
|
|
|
|
return attendance_course
|