roosterwijs/README.md

3.3 KiB

Roosterwijs

Modulair, flexibel roostersysteem voor het speciaal onderwijs (uil-logo: een uil staat voor wijsheid → Roosterwijs). Zie PLAN.md voor de visie en de fasering, en DEPLOY.md voor draaien op een test-/productieserver.

Status: Fase 0 (fundament + plugin-framework), Fase 1 (kerndomein: personen, groepen, subgroepen, functies) en Fase 2 (schooljaarkalender + roosterblokken) zijn klaar. Medewerkers kunnen meerdere functies hebben uit een beheerbare functie-catalogus.

Wat er nu staat

  • Backend (backend/) — Django + Django REST Framework.
    • plugins/ — het plugin-framework: een moduleregister, opslag van de aan/uit-status per module en een beheer-API.
    • core/ — de kern (altijd actief). Fase 1: modellen Persoon, Groep en Subgroep met een volledige CRUD-API. Roosterblokken en kalender volgen in fase 2.
    • modules/printing/ en modules/accounts/ — twee voorbeeldmodules die zich bij opstarten aanmelden bij het register.
  • Frontend (frontend/) — React (Vite). Zijbalk met Roosterwijs-logo die alleen menu's toont van ingeschakelde modules, beheerschermen voor Personen, Groepen en Subgroepen, en een scherm Modulebeheer.

Hoe modulariteit werkt (het verkoopargument)

  1. Een module is een gewone Django-app met een apps.py die in ready() een ModuleSpec registreert (naam, beschrijving, versie, afhankelijkheden en menu-items).
  2. Het register weet wélke modules bestaan; de database onthoudt of ze aan staan. Een beheerder schakelt ze per school in/uit via Modulebeheer.
  3. Uitgeschakelde modules leveren geen menu's of schermen — de kern blijft overal gelijk, modules zijn los bij te schakelen.

Een nieuwe module toevoegen = nieuwe app maken, één regel in MODULE_APPS (in backend/config/settings.py), klaar.

Starten

Backend (Django, poort 8000)

cd backend
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser   # optioneel, voor /admin/
python manage.py runserver

API-eindpunten:

  • GET /api/modules/ — alle modules met status.
  • POST /api/modules/<key>/state/ — body {"enabled": true|false}.
  • GET /api/info/ — korte systeem-/gezondheidsinfo.
  • CRUD-endpoints (telkens met PATCH/DELETE op /<id>/): /api/personen/ (filter ?rol=leerling), /api/groepen/, /api/subgroepen/, /api/functies/, /api/schooljaren/, /api/kalenderdagen/ (filter ?schooljaar=<id>), /api/tijdsloten/, /api/activiteiten/, /api/locaties/, /api/roosterblokken/ (filters ?schooljaar=, ?groep=, ?subgroep=, ?leerling=).
  • /admin/ — Django-admin (personen, groepen, subgroepen en modulestatus).

Draait SQLite niet op je projectmap (bv. op een netwerkschijf)? Zet dan ROOSTER_DB_PATH naar een lokaal pad, of pas DATABASES aan.

Frontend (React, poort 5173)

cd frontend
npm install
npm run dev

De dev-server stuurt /api automatisch door naar de backend op poort 8000. Open daarna http://localhost:5173 en ga naar Modulebeheer om modules aan/uit te zetten.

Volgende stap (Fase 3 & 4)

Flexibiliteit & uitzonderingen (individuele afwijkingen, afwezigheid/vervanging, vrije dagen die blokken automatisch uitschakelen) en conflictdetectie (dubbele inzet van personen/leerlingen, locatiebotsingen).