Add endpoint and button in admin ui

This commit is contained in:
Christian Cueni 2024-02-26 09:53:24 +01:00
parent abb9b4b7db
commit a407b76038
4 changed files with 54 additions and 26 deletions

View File

@ -25,6 +25,7 @@ from vbv_lernwelt.core.views import (
check_rate_limit, check_rate_limit,
cypress_reset_view, cypress_reset_view,
generate_web_component_icons, generate_web_component_icons,
iterativ_test_coursesessions_reset_view,
permission_denied_view, permission_denied_view,
rate_limit_exceeded_view, rate_limit_exceeded_view,
vue_home, vue_home,
@ -209,6 +210,13 @@ urlpatterns = [
name="t2l_sync", 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/", path("server/graphql/",
csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))), csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))),
# testing and debug # testing and debug

View File

@ -20,6 +20,7 @@ from vbv_lernwelt.course.models import (
from vbv_lernwelt.course_session.models import ( from vbv_lernwelt.course_session.models import (
CourseSessionAssignment, CourseSessionAssignment,
CourseSessionAttendanceCourse, CourseSessionAttendanceCourse,
CourseSessionEdoniqTest,
) )
from vbv_lernwelt.course_session_group.models import CourseSessionGroup from vbv_lernwelt.course_session_group.models import CourseSessionGroup
from vbv_lernwelt.feedback.models import FeedbackResponse 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"]) cs = CourseSession.objects.get(import_id=data["ID"])
members, member_with_mentor, trainer, regionenleiter, mentor = reset_uk_users() members, trainer, regionenleiter = get_or_create_users_uk()
delete_cs_data(cs, members + [member_with_mentor, trainer, regionenleiter, mentor]) 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_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) 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.title = IT_VV_TEST_COURSE
cs.save() cs.save()
create_or_update_assignment_course_session(cs) 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]) delete_cs_data(cs, members + [member_with_mentor, mentor])
add_to_course_session(cs, members + [member_with_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]): def delete_cs_data(cs: CourseSession, users: list[User]):
try: if cs:
CourseCompletion.objects.filter(course_session=cs).delete() CourseCompletion.objects.filter(course_session=cs).delete()
Notification.objects.filter(course_session=cs).delete() Notification.objects.filter(course_session=cs).delete()
AssignmentCompletion.objects.filter(course_session=cs).delete() AssignmentCompletion.objects.filter(course_session=cs).delete()
CourseSessionAttendanceCourse.objects.filter(course_session=cs).update( CourseSessionAttendanceCourse.objects.filter(course_session=cs).update(
attendance_user_list=[] attendance_user_list=[]
) )
CourseSessionEdoniqTest.objects.filter(course_session=cs).delete()
CourseSessionUser.objects.filter(course_session=cs).delete() CourseSessionUser.objects.filter(course_session=cs).delete()
LearningMentor.objects.filter(course=cs.course).delete() learning_mentor_ids = (
except CourseSession.DoesNotExist: 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) logger.info("no_course_session_found", import_id=cs.import_id)
FeedbackResponse.objects.filter(feedback_user__in=users).delete() 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]] course_session: CourseSession, mentor_mentee_pairs: list[tuple[User, User]]
): ):
for mentor, mentee in mentor_mentee_pairs: for mentor, mentee in mentor_mentee_pairs:
uk_mentor = LearningMentor.objects.create( lm = LearningMentor.objects.create(
course=course_session.course, course=course_session.course,
mentor=mentor, mentor=mentor,
) )
uk_mentor.participants.add( lm.participants.add(
CourseSessionUser.objects.get( CourseSessionUser.objects.get(
user__id=mentee.id, user__id=mentee.id,
course_session=course_session, course_session=course_session,
@ -162,20 +173,13 @@ def add_trainers_to_course_session(
csu.save() csu.save()
def reset_uk_users(): def get_or_create_users_uk():
members = [ members = [
_create_or_update_user( _create_or_update_user(
f"teilnehmer{n}.uk@iterativ.ch", "Teilnehmer üK", "Iterativ", PASSWORD, "de" f"teilnehmer{n}.uk@iterativ.ch", "Teilnehmer üK", "Iterativ", PASSWORD, "de"
) )
for n in range(1, 10) 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( trainer = _create_or_update_user(
"trainer1.uk@iterativ.ch", "Trainer üK", "Iterativ", PASSWORD, "de" "trainer1.uk@iterativ.ch", "Trainer üK", "Iterativ", PASSWORD, "de"
) )
@ -186,17 +190,14 @@ def reset_uk_users():
PASSWORD, PASSWORD,
"de", "de",
) )
mentor = _create_or_update_user( return (
"lernbegleitung1.uk@iterativ.ch", members,
"Lernbegleitung üK", trainer,
"Iterativ", regionenleiter,
PASSWORD,
"de",
) )
return members, member_with_mentor, trainer, regionenleiter, mentor
def reset_vv_users(): def get_or_create_users_vv():
members = [ members = [
_create_or_update_user( _create_or_update_user(
f"teilnehmer{n}.vv@iterativ.ch", "Teilnehmer VV", "Iterativ", PASSWORD, "de" f"teilnehmer{n}.vv@iterativ.ch", "Teilnehmer VV", "Iterativ", PASSWORD, "de"

View File

@ -179,6 +179,17 @@ def cypress_reset_view(request):
return HttpResponseRedirect("/server/admin/") 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 @django_view_authentication_exempt
def generate_web_component_icons(request): def generate_web_component_icons(request):
svg_files = [] svg_files = []

View File

@ -43,6 +43,14 @@
<a href="{% url 'edoniq_export_students_and_trainers' %}" class="btn btn-primary">Teilnehmer <a href="{% url 'edoniq_export_students_and_trainers' %}" class="btn btn-primary">Teilnehmer
und Trainer exportieren</a> und Trainer exportieren</a>
<hr style="margin: 24px 0">
<form action="/api/core/resetiterativsessions/" method="post">
{% csrf_token %}
<p>Zurücksetzen der Iterativ Testdurchführungen (üK: "Iterativ üK Testkurs", VV: "Iterativ VV Testkurs")</p>
<button class="btn">Iterativ Testdurchführungen zurücksetzen</button>
</form>
<hr style="margin: 24px 0"> <hr style="margin: 24px 0">
<form action="/api/core/cypressreset/" method="post"> <form action="/api/core/cypressreset/" method="post">