Handle uk feedback as well
This commit is contained in:
parent
93efd7333e
commit
36c7a1a5b3
|
|
@ -1,7 +1,10 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from vbv_lernwelt.course.models import Course, CourseSession, CourseSessionUser
|
from vbv_lernwelt.course.models import Course, CourseSession, CourseSessionUser
|
||||||
from vbv_lernwelt.feedback.services import get_feedbacks_for_course_sessions, get_feedbacks_for_courses
|
from vbv_lernwelt.feedback.services import (
|
||||||
|
get_feedbacks_for_course_sessions,
|
||||||
|
get_feedbacks_for_courses,
|
||||||
|
)
|
||||||
from vbv_lernwelt.learnpath.models import Circle
|
from vbv_lernwelt.learnpath.models import Circle
|
||||||
|
|
||||||
get_feedbacks_for_course_sessions.short_description = "Feedback export"
|
get_feedbacks_for_course_sessions.short_description = "Feedback export"
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,34 @@ VV_FEEDBACK_QUESTIONS = [
|
||||||
("course_negative_feedback", "Wo siehst du Verbesserungspotential?"),
|
("course_negative_feedback", "Wo siehst du Verbesserungspotential?"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
UK_FEEDBACK_QUESTIONS = [
|
||||||
|
("satisfaction", "Zufriedenheit insgesamt"),
|
||||||
|
("goal_attainment", "Zielerreichung insgesamt"),
|
||||||
|
(
|
||||||
|
"proficiency",
|
||||||
|
"Wie beurteilst du deine Sicherheit bezüglichen den Themen nach dem Kurs?",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"preparation_task_clarity",
|
||||||
|
"Waren die Vorbereitungsaufträge klar und verständlich?",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"instructor_competence",
|
||||||
|
"Wie beurteilst du die Themensicherheit und Fachkompetenz des Kursleiters/der Kursleiterin?",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"instructor_respect",
|
||||||
|
"Wurden Fragen und Anregungen der Kursteilnehmenden ernst genommen und aufgegriffen?",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"instructor_open_feedback",
|
||||||
|
"Was möchtest du dem Kursleiter/der Kursleiterin sonst noch sagen?",
|
||||||
|
),
|
||||||
|
("would_recommend", "Würdest du den Kurs weiterempfehlen?"),
|
||||||
|
("course_positive_feedback", "Was hat dir besonders gut gefallen?"),
|
||||||
|
("course_negative_feedback", "Wo siehst du Verbesserungspotential?"),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def update_feedback_response(
|
def update_feedback_response(
|
||||||
feedback_user: User,
|
feedback_user: User,
|
||||||
|
|
@ -130,7 +158,7 @@ def export_feedback(course_session_ids: list[str], save_as_file: bool):
|
||||||
feedbacks = FeedbackResponse.objects.filter(
|
feedbacks = FeedbackResponse.objects.filter(
|
||||||
course_session_id__in=course_session_ids,
|
course_session_id__in=course_session_ids,
|
||||||
submitted=True,
|
submitted=True,
|
||||||
).order_by("circle", "updated_at")
|
).order_by("circle", "course_session", "updated_at")
|
||||||
grouped_feedbacks = groupby(feedbacks, key=attrgetter("circle"))
|
grouped_feedbacks = groupby(feedbacks, key=attrgetter("circle"))
|
||||||
|
|
||||||
for circle, group_feedbacks in grouped_feedbacks:
|
for circle, group_feedbacks in grouped_feedbacks:
|
||||||
|
|
@ -158,22 +186,35 @@ def export_feedback(course_session_ids: list[str], save_as_file: bool):
|
||||||
|
|
||||||
def _create_sheet(wb: Workbook, title: str, data: list[FeedbackResponse]):
|
def _create_sheet(wb: Workbook, title: str, data: list[FeedbackResponse]):
|
||||||
sheet = wb.create_sheet(title=title)
|
sheet = wb.create_sheet(title=title)
|
||||||
|
|
||||||
|
if len(data) == 0:
|
||||||
|
return sheet
|
||||||
|
|
||||||
|
# we instruct the users not to mix exports of different courses, so we can assume the questions are the same and of the first type
|
||||||
|
question_data = (
|
||||||
|
UK_FEEDBACK_QUESTIONS
|
||||||
|
if data[0].data["feedback_type"] == "uk"
|
||||||
|
else VV_FEEDBACK_QUESTIONS
|
||||||
|
)
|
||||||
|
|
||||||
# add header
|
# add header
|
||||||
sheet.cell(row=1, column=1, value="Datum")
|
sheet.cell(row=1, column=1, value="Durchführung")
|
||||||
questions = [q[1] for q in VV_FEEDBACK_QUESTIONS]
|
sheet.cell(row=1, column=2, value="Datum")
|
||||||
for col_idx, title in enumerate(questions, start=2):
|
questions = [q[1] for q in question_data]
|
||||||
|
for col_idx, title in enumerate(questions, start=3):
|
||||||
sheet.cell(row=1, column=col_idx, value=title)
|
sheet.cell(row=1, column=col_idx, value=title)
|
||||||
|
|
||||||
_add_rows(sheet, data)
|
_add_rows(sheet, data, question_data)
|
||||||
return sheet
|
return sheet
|
||||||
|
|
||||||
|
|
||||||
def _add_rows(sheet, data):
|
def _add_rows(sheet, data, question_data):
|
||||||
for row_idx, feedback in enumerate(data, start=2):
|
for row_idx, feedback in enumerate(data, start=2):
|
||||||
|
sheet.cell(row=row_idx, column=1, value=feedback.course_session.title)
|
||||||
sheet.cell(
|
sheet.cell(
|
||||||
row=row_idx, column=1, value=feedback.updated_at.date().strftime("%d.%m.%Y")
|
row=row_idx, column=2, value=feedback.updated_at.date().strftime("%d.%m.%Y")
|
||||||
)
|
)
|
||||||
for col_idx, question in enumerate(VV_FEEDBACK_QUESTIONS, start=2):
|
for col_idx, question in enumerate(question_data, start=3):
|
||||||
response = feedback.data.get(question[0], "")
|
response = feedback.data.get(question[0], "")
|
||||||
sheet.cell(row=row_idx, column=col_idx, value=response)
|
sheet.cell(row=row_idx, column=col_idx, value=response)
|
||||||
|
|
||||||
|
|
@ -201,7 +242,9 @@ def _handle_feedback_export_action(course_seesions, file_name):
|
||||||
response = HttpResponse(
|
response = HttpResponse(
|
||||||
content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||||
)
|
)
|
||||||
response["Content-Disposition"] = f"attachment; filename={make_export_filename(file_name)}"
|
response[
|
||||||
|
"Content-Disposition"
|
||||||
|
] = f"attachment; filename={make_export_filename(file_name)}"
|
||||||
response.write(excel_bytes)
|
response.write(excel_bytes)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue