diff --git a/backend/modules/accounts/migrations/0002_alter_gebruikersprofiel_persoon.py b/backend/modules/accounts/migrations/0002_alter_gebruikersprofiel_persoon.py
new file mode 100644
index 0000000..0055cdc
--- /dev/null
+++ b/backend/modules/accounts/migrations/0002_alter_gebruikersprofiel_persoon.py
@@ -0,0 +1,20 @@
+# Generated by Django 5.2.15 on 2026-06-17 12:53
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('core', '0009_activiteit_pictogram'),
+ ('module_accounts', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='gebruikersprofiel',
+ name='persoon',
+ field=models.ForeignKey(blank=True, help_text='Koppeling aan een leerling of medewerker uit de kern.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gebruikers', to='core.persoon'),
+ ),
+ ]
diff --git a/backend/modules/autorooster/apps.py b/backend/modules/autorooster/apps.py
index 59716b8..56565f6 100644
--- a/backend/modules/autorooster/apps.py
+++ b/backend/modules/autorooster/apps.py
@@ -8,7 +8,7 @@ class AutoroosterConfig(AppConfig):
verbose_name = "Module: Automatisch rooster"
def ready(self):
- from plugins.registry import MenuItem, ModuleSpec, registry
+ from plugins.registry import ModuleSpec, registry
registry.register(
ModuleSpec(
@@ -23,8 +23,7 @@ class AutoroosterConfig(AppConfig):
category="Hulpmiddelen",
core=False,
default_enabled=False,
- menu_items=(
- MenuItem("Auto-rooster", "/auto-rooster", icon="puzzle", order=44),
- ),
+ # Geen eigen menu-item: verschijnt als tab in de Roostermaker.
+ menu_items=(),
)
)
diff --git a/backend/modules/blokwizard/apps.py b/backend/modules/blokwizard/apps.py
index 2fa6cb4..31e9d0f 100644
--- a/backend/modules/blokwizard/apps.py
+++ b/backend/modules/blokwizard/apps.py
@@ -8,7 +8,7 @@ class BlokwizardConfig(AppConfig):
verbose_name = "Module: Vak-wizard"
def ready(self):
- from plugins.registry import MenuItem, ModuleSpec, registry
+ from plugins.registry import ModuleSpec, registry
registry.register(
ModuleSpec(
diff --git a/backend/modules/leerplein/migrations/0004_alter_leerplein_groepen_alter_leerplein_leerlingen_and_more.py b/backend/modules/leerplein/migrations/0004_alter_leerplein_groepen_alter_leerplein_leerlingen_and_more.py
new file mode 100644
index 0000000..42794a7
--- /dev/null
+++ b/backend/modules/leerplein/migrations/0004_alter_leerplein_groepen_alter_leerplein_leerlingen_and_more.py
@@ -0,0 +1,29 @@
+# Generated by Django 5.2.15 on 2026-06-17 12:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('core', '0009_activiteit_pictogram'),
+ ('module_leerplein', '0003_rename_leerplein_verbose_names'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='leerplein',
+ name='groepen',
+ field=models.ManyToManyField(blank=True, related_name='leerpleinen', to='core.groep', verbose_name='groepen'),
+ ),
+ migrations.AlterField(
+ model_name='leerplein',
+ name='leerlingen',
+ field=models.ManyToManyField(blank=True, limit_choices_to={'rol': 'leerling'}, related_name='leerpleinen', to='core.persoon', verbose_name='losse leerlingen'),
+ ),
+ migrations.AlterField(
+ model_name='leerplein',
+ name='subgroepen',
+ field=models.ManyToManyField(blank=True, related_name='leerpleinen', to='core.subgroep', verbose_name='subgroepen'),
+ ),
+ ]
diff --git a/backend/modules/personenwizard/apps.py b/backend/modules/personenwizard/apps.py
index 80ff5e8..edaee2f 100644
--- a/backend/modules/personenwizard/apps.py
+++ b/backend/modules/personenwizard/apps.py
@@ -8,7 +8,7 @@ class PersonenwizardConfig(AppConfig):
verbose_name = "Module: Personen-wizard & import"
def ready(self):
- from plugins.registry import MenuItem, ModuleSpec, registry
+ from plugins.registry import ModuleSpec, registry
registry.register(
ModuleSpec(
diff --git a/backend/modules/printing/apps.py b/backend/modules/printing/apps.py
index 70bbfb2..c4d140b 100644
--- a/backend/modules/printing/apps.py
+++ b/backend/modules/printing/apps.py
@@ -8,7 +8,7 @@ class PrintingConfig(AppConfig):
verbose_name = "Module: Printen/Exporteren"
def ready(self):
- from plugins.registry import MenuItem, ModuleSpec, registry
+ from plugins.registry import ModuleSpec, registry
registry.register(
ModuleSpec(
diff --git a/backend/modules/stage/serializers.py b/backend/modules/stage/serializers.py
index c342e39..3032839 100644
--- a/backend/modules/stage/serializers.py
+++ b/backend/modules/stage/serializers.py
@@ -1,6 +1,6 @@
from rest_framework import serializers
-from .models import Dagdeel, Omvang, Stage, StageType
+from .models import Omvang, Stage, StageType
class StageSerializer(serializers.ModelSerializer):
diff --git a/frontend/src/pages.jsx b/frontend/src/pages.jsx
index 3169031..494e78a 100644
--- a/frontend/src/pages.jsx
+++ b/frontend/src/pages.jsx
@@ -1900,6 +1900,7 @@ export function RoosterScherm({ mode }) {
const edit = mode === "edit";
const [printAan, setPrintAan] = useState(false);
const [blokwizardAan, setBlokwizardAan] = useState(false);
+ const [autoroosterAan, setAutoroosterAan] = useState(false);
const [schooljaren, setSchooljaren] = useState([]);
const [schooljaar, setSchooljaar] = useState("");
const [tijdsloten, setTijdsloten] = useState([]);
@@ -1950,7 +1951,11 @@ export function RoosterScherm({ mode }) {
listResource("leerpleinen").then(setLeerpleinen).catch(() => {});
listResource("stages", "?actief=1").then(setStages).catch(() => setStages([]));
// Afdrukken alleen tonen als de print-module aanstaat.
- getModules().then((ms) => { setPrintAan(ms.some((m) => m.key === "printing" && m.enabled)); setBlokwizardAan(ms.some((m) => m.key === "blokwizard" && m.enabled)); }).catch(() => {});
+ getModules().then((ms) => {
+ setPrintAan(ms.some((m) => m.key === "printing" && m.enabled));
+ setBlokwizardAan(ms.some((m) => m.key === "blokwizard" && m.enabled));
+ setAutoroosterAan(ms.some((m) => m.key === "autorooster" && m.enabled));
+ }).catch(() => {});
}, []);
// Scope-context + gefilterde blokken (voor weergave/afdrukken).
@@ -2388,6 +2393,7 @@ export function RoosterScherm({ mode }) {
{blokwizardAan && }
+ {autoroosterAan && }
)}
@@ -2547,6 +2553,8 @@ export function RoosterScherm({ mode }) {
{edit && tab === "wizard" && blokwizardAan &&
Bouwstenen van het rooster — beheer ze hier zonder het Rooster te verlaten.