roosterwijs/backend/modules/personenwizard/views.py

45 lines
1.8 KiB
Python

"""Bulk-import van personen (leerlingen/medewerkers). Geen eigen model."""
from rest_framework.decorators import api_view
from rest_framework.response import Response
from core.models import Groep, Persoon, Rol
GELDIGE_ROLLEN = {r.value for r in Rol}
@api_view(["POST"])
def personen_import(request):
rol = request.data.get("rol")
personen = request.data.get("personen") or []
groep_aanmaken = bool(request.data.get("groep_aanmaken"))
if rol not in GELDIGE_ROLLEN:
return Response({"detail": "Onbekende rol."}, status=400)
if not isinstance(personen, list):
return Response({"detail": "personen moet een lijst zijn."}, status=400)
groep_cache = {g.naam.lower(): g for g in Groep.objects.all()}
aangemaakt = 0
meldingen = []
for i, p in enumerate(personen):
vn = str(p.get("voornaam") or "").strip()
an = str(p.get("achternaam") or "").strip()
if not vn and not an:
continue
if not an:
meldingen.append({"regel": i + 1, "melding": "achternaam ontbreekt — overgeslagen"})
continue
obj = Persoon(voornaam=vn, achternaam=an, rol=rol)
if rol == Rol.LEERLING:
gnaam = str(p.get("groep") or "").strip()
if gnaam:
g = groep_cache.get(gnaam.lower())
if not g and groep_aanmaken:
g = Groep.objects.create(naam=gnaam)
groep_cache[gnaam.lower()] = g
if g:
obj.groep = g
else:
meldingen.append({"regel": i + 1, "melding": f"groep '{gnaam}' niet gevonden — leerling zonder groep aangemaakt"})
obj.save()
aangemaakt += 1
return Response({"aangemaakt": aangemaakt, "meldingen": meldingen})