"""Bulk-import van personen (leerlingen/medewerkers). Geen eigen model.""" from rest_framework.decorators import api_view, permission_classes from rest_framework.response import Response from core.audit import audit_log from core.models import Groep, Persoon, Rol from core.permissions import CoreDataPermission, module_permission_class GELDIGE_ROLLEN = {r.value for r in Rol} PersonenwizardModuleEnabled = module_permission_class("personenwizard") @api_view(["POST"]) @permission_classes([CoreDataPermission, PersonenwizardModuleEnabled]) 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 audit_log(request, "import", "Persoon", {"aangemaakt": aangemaakt, "rol": rol}) return Response({"aangemaakt": aangemaakt, "meldingen": meldingen})