Add export for trainers

This commit is contained in:
Christian Cueni 2023-08-15 16:47:03 +02:00
parent 8e24cf707f
commit 95a6d404b5
4 changed files with 34 additions and 17 deletions

View File

@ -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(

View File

@ -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",

View File

@ -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,
"",
]
)

View File

@ -31,6 +31,9 @@
<h2>Export Edoniq Teilnehmer</h2>
<a href="{% url 'edoniq_export_students' %}" class="btn btn-primary">Teilnehmer exportieren</a>
<h2>Export Edoniq Trainer</h2>
<a href="{% url 'edoniq_export_trainers' %}" class="btn btn-primary">Trainer exportieren</a>
<h1>Reset</h1>
<form action="/api/core/cypressreset/" method="post">
{% csrf_token %}