diff --git a/server/config/urls.py b/server/config/urls.py index b6c480f2..4268109e 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -37,7 +37,7 @@ from vbv_lernwelt.course.views import ( request_course_completion, request_course_completion_for_user, ) -from vbv_lernwelt.edoniq_test.views import export_students +from vbv_lernwelt.edoniq_test.views import export_students, export_trainers from vbv_lernwelt.feedback.views import ( get_expert_feedbacks_for_course, get_feedback_for_circle, @@ -147,6 +147,7 @@ urlpatterns = [ # edoniq test path(r'api/core/edoniq-test/export-users/', export_students, name='edoniq_export_students'), + path(r'api/core/edoniq-test/export-trainers/', export_trainers, name='edoniq_export_trainers'), # importer path( diff --git a/server/vbv_lernwelt/edoniq_test/tests/test_edoniq_export.py b/server/vbv_lernwelt/edoniq_test/tests/test_edoniq_export.py index a3669741..c3558ea3 100644 --- a/server/vbv_lernwelt/edoniq_test/tests/test_edoniq_export.py +++ b/server/vbv_lernwelt/edoniq_test/tests/test_edoniq_export.py @@ -42,7 +42,7 @@ class EdoniqUserExportTestCase(TestCase): user_data = [ [ - user.user.additional_json_data.get("Lehrvertragsnummer", ""), + user.user.id, user.user.first_name, user.user.last_name, "m", diff --git a/server/vbv_lernwelt/edoniq_test/views.py b/server/vbv_lernwelt/edoniq_test/views.py index a9436260..4c418bf0 100644 --- a/server/vbv_lernwelt/edoniq_test/views.py +++ b/server/vbv_lernwelt/edoniq_test/views.py @@ -5,6 +5,7 @@ from typing import List from django.contrib.admin.views.decorators import staff_member_required from django.http import HttpResponse +from vbv_lernwelt.core.models import User from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR, COURSE_UK_IT from vbv_lernwelt.course.models import CourseSessionUser @@ -17,15 +18,27 @@ def export_students(request): return generate_export_response(course_session_users) -def fetch_course_session_users(courses: List[int]): +def export_trainers(request): + course_session_users = fetch_course_session_users( + UK_COURSE_IDS, role=CourseSessionUser.Role.EXPERT + ) + return generate_export_response(course_session_users, role="Trainer") + + +def fetch_course_session_users(courses: List[int], role=CourseSessionUser.Role.MEMBER): # if a user is in multiple courses, he should be exported multiple times # todo: check if this is the case otherwise use .distinct("user") - return CourseSessionUser.objects.filter( - course_session__course__id__in=courses, role=CourseSessionUser.Role.MEMBER - ).order_by("user__email") + return ( + User.objects.filter( + coursesessionuser__course_session__course__id__in=courses, + coursesessionuser__role=role, + ) + .order_by("email") + .distinct() + ) -def generate_export_response(cs_users: List[CourseSessionUser]) -> HttpResponse: +def generate_export_response(cs_users: List[User], role="Lernende") -> HttpResponse: response = HttpResponse(content_type="text/csv") response[ "Content-Disposition" @@ -52,17 +65,17 @@ def generate_export_response(cs_users: List[CourseSessionUser]) -> HttpResponse: for cs_user in cs_users: writer.writerow( [ - cs_user.user.additional_json_data.get("Lehrvertragsnummer", ""), - cs_user.user.first_name, - cs_user.user.last_name, + cs_user.id, + cs_user.first_name, + cs_user.last_name, "m", - cs_user.user.language, - cs_user.user.email, - cs_user.user.additional_json_data.get("Geburtsdatum", ""), - "Lernende", - cs_user.user.additional_json_data.get("Firmenname", ""), - cs_user.user.additional_json_data.get("Lehrvertragsnummer", ""), - cs_user.course_session.import_id, + cs_user.language, + cs_user.email, + cs_user.additional_json_data.get("Geburtsdatum", ""), + role, + cs_user.additional_json_data.get("Firmenname", ""), + cs_user.additional_json_data.get("Lehrvertragsnummer", ""), + cs_user.coursesessionuser_set.first().course_session.import_id, "", ] ) diff --git a/server/vbv_lernwelt/templates/admin/index.html b/server/vbv_lernwelt/templates/admin/index.html index 96013183..ffdf0dc3 100644 --- a/server/vbv_lernwelt/templates/admin/index.html +++ b/server/vbv_lernwelt/templates/admin/index.html @@ -31,6 +31,9 @@

Export Edoniq Teilnehmer

Teilnehmer exportieren +

Export Edoniq Trainer

+ Trainer exportieren +

Reset

{% csrf_token %}