WIP: Add feedback export to file
This commit is contained in:
parent
f8ef905f13
commit
a3d65eb78d
|
|
@ -0,0 +1,74 @@
|
||||||
|
from datetime import datetime
|
||||||
|
from itertools import groupby
|
||||||
|
from operator import attrgetter
|
||||||
|
|
||||||
|
import djclick as click
|
||||||
|
import structlog
|
||||||
|
from openpyxl import Workbook
|
||||||
|
|
||||||
|
from vbv_lernwelt.feedback.models import FeedbackResponse
|
||||||
|
|
||||||
|
logger = structlog.get_logger(__name__)
|
||||||
|
|
||||||
|
VV_FEEDBACK_QUESTIONS = [
|
||||||
|
("satisfaction", "Zufriedenheit insgesamt"),
|
||||||
|
("goal_attainment", "Zielerreichung insgesamt"),
|
||||||
|
(
|
||||||
|
"proficiency",
|
||||||
|
"Wie beurteilst du deine Sicherheit bezüglichen den Themen nach dem Circle?",
|
||||||
|
),
|
||||||
|
("preparation_task_clarity", "Waren die Praxisaufträge klar und verständlich?"),
|
||||||
|
("would_recommend", "Würdest du den Circle weiterempfehlen?"),
|
||||||
|
("course_positive_feedback", "Was hat dir besonders gut gefallen?"),
|
||||||
|
("course_negative_feedback", "Wo siehst du Verbesserungspotential?"),
|
||||||
|
]
|
||||||
|
|
||||||
|
logger = structlog.get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
@click.argument("course_session_id")
|
||||||
|
def command(course_session_id):
|
||||||
|
wb = Workbook()
|
||||||
|
wb.remove_sheet(wb.active)
|
||||||
|
# Create another sheet
|
||||||
|
feedbacks = FeedbackResponse.objects.filter(
|
||||||
|
course_session_id=course_session_id
|
||||||
|
).order_by("circle")
|
||||||
|
grouped_feedbacks = groupby(feedbacks, key=attrgetter("circle"))
|
||||||
|
|
||||||
|
for circle, group_feedbacks in grouped_feedbacks:
|
||||||
|
logger.debug(
|
||||||
|
"export_feedback_for_circle",
|
||||||
|
data={
|
||||||
|
"circle": circle.title,
|
||||||
|
"course_session_id": course_session_id,
|
||||||
|
"count": sum(1 for _ in group_feedbacks),
|
||||||
|
},
|
||||||
|
label="feedback_export",
|
||||||
|
)
|
||||||
|
create_sheet(wb, circle.title, group_feedbacks)
|
||||||
|
|
||||||
|
today_date = datetime.today().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
# Set the filename with today's date
|
||||||
|
filename = f"feedback_export_{today_date}.xlsx"
|
||||||
|
wb.save("example.xlsx")
|
||||||
|
|
||||||
|
|
||||||
|
def create_sheet(wb: Workbook, title: str, data: list[FeedbackResponse]):
|
||||||
|
sheet = wb.create_sheet(title=title)
|
||||||
|
# add header
|
||||||
|
questions = [q[1] for q in VV_FEEDBACK_QUESTIONS]
|
||||||
|
for col_idx, title in enumerate(questions, start=2):
|
||||||
|
sheet.cell(row=1, column=col_idx, value=title)
|
||||||
|
|
||||||
|
add_rows(sheet, data)
|
||||||
|
return sheet
|
||||||
|
|
||||||
|
|
||||||
|
def add_rows(sheet, data):
|
||||||
|
for row_idx, feedback in enumerate(data, start=2):
|
||||||
|
for col_idx, question in enumerate(VV_FEEDBACK_QUESTIONS, start=2):
|
||||||
|
response = feedback.data.get(question[0], "")
|
||||||
|
sheet.cell(row=row_idx, column=col_idx, value=response)
|
||||||
Loading…
Reference in New Issue