vbv/server/vbv_lernwelt/importer/views.py

80 lines
2.2 KiB
Python

import traceback
from typing import Callable
from django.contrib import messages
from django.contrib.admin.views.decorators import staff_member_required
from django.shortcuts import redirect, render
from vbv_lernwelt.importer.services import (
import_course_sessions_from_excel,
import_students_from_excel,
import_trainers_from_excel_for_training,
sync_students_from_t2l_excel,
)
@staff_member_required
def coursesessions_trainers_import(request):
return handle_import(
request,
"Die Durchführungen und Trainer wurden erfolgreich importiert!",
import_training_and_trainer,
)
def import_training_and_trainer(excel_file: str):
import_course_sessions_from_excel(
excel_file,
circle_keys=[
"Kickoff",
"Basis",
"Fahrzeug",
"Haushalt Teil 1",
"Haushalt Teil 2",
"Reisen & Rechtsstreitigkeiten",
"Wohneigentum",
"KMU Teil 1",
"KMU Teil 2",
"3-Säulenkonzept",
"Einkommenssicherung (Invalidität)",
"Einkommenssicherung (Todesfall)",
"Pensionierung",
],
)
import_trainers_from_excel_for_training(excel_file)
@staff_member_required
def coursesessions_students_import(request):
return handle_import(
request,
"Die Teilnehmer wurden erflogreich importiert!",
import_students_from_excel,
)
@staff_member_required
def t2l_sync(request):
return handle_import(
request,
"Die Daten wurden erflogreich synchronisiert!",
sync_students_from_t2l_excel,
)
def handle_import(request, success_msg: str, importer: Callable[[str], None]):
if request.method == "POST" and request.FILES["excel_file"]:
excel_file = request.FILES["excel_file"]
try:
importer(excel_file)
except Exception:
return render(
# it is a "power" feature, so we will output the traceback on error
request,
"admin/importer/error.html",
{"error": traceback.format_exc()},
)
messages.info(request, success_msg)
return redirect("admin:index")