From 48a72fd1998fc666cb2af040ffce2338b53063b8 Mon Sep 17 00:00:00 2001 From: bes-r <27369668+bes-r@users.noreply.github.com> Date: Wed, 17 Jun 2026 14:56:55 +0200 Subject: [PATCH] auto-rooster als tab onder roostermaker; code-review: imports + model-drift opgeschoond --- .../0002_alter_gebruikersprofiel_persoon.py | 20 +++++++++++++ backend/modules/autorooster/apps.py | 7 ++--- backend/modules/blokwizard/apps.py | 2 +- ...pen_alter_leerplein_leerlingen_and_more.py | 29 +++++++++++++++++++ backend/modules/personenwizard/apps.py | 2 +- backend/modules/printing/apps.py | 2 +- backend/modules/stage/serializers.py | 2 +- frontend/src/pages.jsx | 10 ++++++- 8 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 backend/modules/accounts/migrations/0002_alter_gebruikersprofiel_persoon.py create mode 100644 backend/modules/leerplein/migrations/0004_alter_leerplein_groepen_alter_leerplein_leerlingen_and_more.py 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 && } + {edit && tab === "auto" && autoroosterAan && } + {tab === "instellingen" && (

Bouwstenen van het rooster — beheer ze hier zonder het Rooster te verlaten.