From 95a6d404b55bf3f3db8a50cc5276933f2d3f3558 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Tue, 15 Aug 2023 16:47:03 +0200 Subject: [PATCH 1/2] Add export for trainers --- server/config/urls.py | 3 +- .../edoniq_test/tests/test_edoniq_export.py | 2 +- server/vbv_lernwelt/edoniq_test/views.py | 43 ++++++++++++------- .../vbv_lernwelt/templates/admin/index.html | 3 ++ 4 files changed, 34 insertions(+), 17 deletions(-) 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 %} From 5c7baab570ff32c0a22a5bdc028b78c3ce61e523 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Wed, 16 Aug 2023 07:47:28 +0200 Subject: [PATCH 2/2] Fix tests --- .../edoniq_test/tests/test_edoniq_export.py | 20 +++++++++---------- server/vbv_lernwelt/edoniq_test/views.py | 3 +-- 2 files changed, 11 insertions(+), 12 deletions(-) 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 c3558ea3..fae09e0e 100644 --- a/server/vbv_lernwelt/edoniq_test/tests/test_edoniq_export.py +++ b/server/vbv_lernwelt/edoniq_test/tests/test_edoniq_export.py @@ -34,7 +34,7 @@ class EdoniqUserExportTestCase(TestCase): def test_fetch_course_session_users(self): users = fetch_course_session_users([COURSE_TEST_ID]) - self.assertEqual(len(users), 3) + self.assertEqual(len(users), 2) def test_response_csv(self): users = fetch_course_session_users([COURSE_TEST_ID]) @@ -42,17 +42,17 @@ class EdoniqUserExportTestCase(TestCase): user_data = [ [ - user.user.id, - user.user.first_name, - user.user.last_name, + str(user.id), + user.first_name, + user.last_name, "m", - user.user.language, - user.user.email, - user.user.additional_json_data.get("Geburtsdatum", ""), + user.language, + user.email, + user.additional_json_data.get("Geburtsdatum", ""), "Lernende", - user.user.additional_json_data.get("Firmenname", ""), - user.user.additional_json_data.get("Lehrvertragsnummer", ""), - user.course_session.import_id, + user.additional_json_data.get("Firmenname", ""), + user.additional_json_data.get("Lehrvertragsnummer", ""), + user.coursesessionuser_set.first().course_session.import_id, "", ] for user in users diff --git a/server/vbv_lernwelt/edoniq_test/views.py b/server/vbv_lernwelt/edoniq_test/views.py index 4c418bf0..1fe5cf44 100644 --- a/server/vbv_lernwelt/edoniq_test/views.py +++ b/server/vbv_lernwelt/edoniq_test/views.py @@ -26,8 +26,7 @@ def export_trainers(request): 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") + # if users should be exported per course session, remove the distinct() call return ( User.objects.filter( coursesessionuser__course_session__course__id__in=courses,