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