From a407b76038a1af4e23ceb731003195087a83d3e5 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Mon, 26 Feb 2024 09:53:24 +0100 Subject: [PATCH] Add endpoint and button in admin ui --- server/config/urls.py | 8 +++ ...ses.py => reset_iterativ_test_sessions.py} | 53 ++++++++++--------- server/vbv_lernwelt/core/views.py | 11 ++++ .../vbv_lernwelt/templates/admin/index.html | 8 +++ 4 files changed, 54 insertions(+), 26 deletions(-) rename server/vbv_lernwelt/core/management/commands/{reset_test_courses.py => reset_iterativ_test_sessions.py} (91%) diff --git a/server/config/urls.py b/server/config/urls.py index 1f2b36fa..42917ad9 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -25,6 +25,7 @@ from vbv_lernwelt.core.views import ( check_rate_limit, cypress_reset_view, generate_web_component_icons, + iterativ_test_coursesessions_reset_view, permission_denied_view, rate_limit_exceeded_view, vue_home, @@ -209,6 +210,13 @@ urlpatterns = [ name="t2l_sync", ), + # iterativ Test course sessions + path( + r"api/core/resetiterativsessions/", + iterativ_test_coursesessions_reset_view, + name="iterativ_test_coursesessions_reset_view", + ), + path("server/graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))), # testing and debug diff --git a/server/vbv_lernwelt/core/management/commands/reset_test_courses.py b/server/vbv_lernwelt/core/management/commands/reset_iterativ_test_sessions.py similarity index 91% rename from server/vbv_lernwelt/core/management/commands/reset_test_courses.py rename to server/vbv_lernwelt/core/management/commands/reset_iterativ_test_sessions.py index 73be4444..ed690011 100644 --- a/server/vbv_lernwelt/core/management/commands/reset_test_courses.py +++ b/server/vbv_lernwelt/core/management/commands/reset_iterativ_test_sessions.py @@ -20,6 +20,7 @@ from vbv_lernwelt.course.models import ( from vbv_lernwelt.course_session.models import ( CourseSessionAssignment, CourseSessionAttendanceCourse, + CourseSessionEdoniqTest, ) from vbv_lernwelt.course_session_group.models import CourseSessionGroup from vbv_lernwelt.feedback.models import FeedbackResponse @@ -69,12 +70,11 @@ def create_or_update_uk(language="de"): ) cs = CourseSession.objects.get(import_id=data["ID"]) - members, member_with_mentor, trainer, regionenleiter, mentor = reset_uk_users() - delete_cs_data(cs, members + [member_with_mentor, trainer, regionenleiter, mentor]) + members, trainer, regionenleiter = get_or_create_users_uk() + delete_cs_data(cs, members + [trainer, regionenleiter]) - add_to_course_session(cs, members + [member_with_mentor]) + add_to_course_session(cs, members) add_trainers_to_course_session(cs, [trainer], uk_circle_keys, language) - add_mentor_to_course_session(cs, [(mentor, member_with_mentor)]) create_and_add_to_cs_group(cs.course, IT_UK_TEST_REGION, [cs], regionenleiter) @@ -86,8 +86,9 @@ def create_or_update_vv(language="de"): ) cs.title = IT_VV_TEST_COURSE cs.save() + create_or_update_assignment_course_session(cs) - members, member_with_mentor, mentor = reset_vv_users() + members, member_with_mentor, mentor = get_or_create_users_vv() delete_cs_data(cs, members + [member_with_mentor, mentor]) add_to_course_session(cs, members + [member_with_mentor]) @@ -95,16 +96,26 @@ def create_or_update_vv(language="de"): def delete_cs_data(cs: CourseSession, users: list[User]): - try: + if cs: CourseCompletion.objects.filter(course_session=cs).delete() Notification.objects.filter(course_session=cs).delete() AssignmentCompletion.objects.filter(course_session=cs).delete() CourseSessionAttendanceCourse.objects.filter(course_session=cs).update( attendance_user_list=[] ) + CourseSessionEdoniqTest.objects.filter(course_session=cs).delete() CourseSessionUser.objects.filter(course_session=cs).delete() - LearningMentor.objects.filter(course=cs.course).delete() - except CourseSession.DoesNotExist: + learning_mentor_ids = ( + LearningMentor.objects.filter(participants__course_session=cs) + .values_list("id", flat=True) + .distinct() + | LearningMentor.objects.filter(mentor__in=users) + .values_list("id", flat=True) + .distinct() + ) + # cannot call delete on distinct objects + LearningMentor.objects.filter(id__in=list(learning_mentor_ids)).delete() + else: logger.info("no_course_session_found", import_id=cs.import_id) FeedbackResponse.objects.filter(feedback_user__in=users).delete() @@ -127,11 +138,11 @@ def add_mentor_to_course_session( course_session: CourseSession, mentor_mentee_pairs: list[tuple[User, User]] ): for mentor, mentee in mentor_mentee_pairs: - uk_mentor = LearningMentor.objects.create( + lm = LearningMentor.objects.create( course=course_session.course, mentor=mentor, ) - uk_mentor.participants.add( + lm.participants.add( CourseSessionUser.objects.get( user__id=mentee.id, course_session=course_session, @@ -162,20 +173,13 @@ def add_trainers_to_course_session( csu.save() -def reset_uk_users(): +def get_or_create_users_uk(): members = [ _create_or_update_user( f"teilnehmer{n}.uk@iterativ.ch", "Teilnehmer üK", "Iterativ", PASSWORD, "de" ) for n in range(1, 10) ] - member_with_mentor = _create_or_update_user( - "teilnehmer1.uk.lb@iterativ.ch", - "Teilnehmer üK mit LB", - "Iterativ", - PASSWORD, - "de", - ) trainer = _create_or_update_user( "trainer1.uk@iterativ.ch", "Trainer üK", "Iterativ", PASSWORD, "de" ) @@ -186,17 +190,14 @@ def reset_uk_users(): PASSWORD, "de", ) - mentor = _create_or_update_user( - "lernbegleitung1.uk@iterativ.ch", - "Lernbegleitung üK", - "Iterativ", - PASSWORD, - "de", + return ( + members, + trainer, + regionenleiter, ) - return members, member_with_mentor, trainer, regionenleiter, mentor -def reset_vv_users(): +def get_or_create_users_vv(): members = [ _create_or_update_user( f"teilnehmer{n}.vv@iterativ.ch", "Teilnehmer VV", "Iterativ", PASSWORD, "de" diff --git a/server/vbv_lernwelt/core/views.py b/server/vbv_lernwelt/core/views.py index 854530a1..1e984b4d 100644 --- a/server/vbv_lernwelt/core/views.py +++ b/server/vbv_lernwelt/core/views.py @@ -179,6 +179,17 @@ def cypress_reset_view(request): return HttpResponseRedirect("/server/admin/") +@api_view(["POST"]) +@authentication_classes((authentication.SessionAuthentication,)) +@permission_classes((IsAdminUser,)) +def iterativ_test_coursesessions_reset_view(request): + call_command( + "reset_iterativ_test_sessions", + ) + + return HttpResponseRedirect("/server/admin/") + + @django_view_authentication_exempt def generate_web_component_icons(request): svg_files = [] diff --git a/server/vbv_lernwelt/templates/admin/index.html b/server/vbv_lernwelt/templates/admin/index.html index d6cabe3f..55e83b58 100644 --- a/server/vbv_lernwelt/templates/admin/index.html +++ b/server/vbv_lernwelt/templates/admin/index.html @@ -43,6 +43,14 @@ Teilnehmer und Trainer exportieren +
+ +
+ {% csrf_token %} +

Zurücksetzen der Iterativ Testdurchführungen (üK: "Iterativ üK Testkurs", VV: "Iterativ VV Testkurs")

+ +
+