"""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})