Gebruikersmodule (rollen + persoonskoppeling), blok bewerken/kopiëren in Roostermaker, printopties per klas/leerplein/leerling/personeel
This commit is contained in:
parent
87c1559553
commit
e39f65706e
3 changed files with 43 additions and 4 deletions
12
ROADMAP.md
12
ROADMAP.md
|
|
@ -48,6 +48,18 @@ volgt.
|
|||
(de betreffende blokken vervallen voor die leerling).
|
||||
- [ ] Stage instelbaar **per blok, per dagdeel of per dag**.
|
||||
|
||||
## Koppelingen & inzetregels
|
||||
|
||||
- [ ] **Personeel koppelen aan leerplein en subgroep** (nu alleen stamgroep
|
||||
mogelijk in het personeelsformulier).
|
||||
- [ ] **Theorievakken automatisch beschikbaar voor leerkrachten** (een leerkracht
|
||||
mag altijd op een theorievak ingezet worden).
|
||||
- [ ] **Inzetregel begeleider ↔ vak:** een leerkracht of praktijkondersteuner kan
|
||||
alleen aan een vak/blok gekoppeld worden als hij/zij aan dat vak gekoppeld
|
||||
is; een **klassenondersteuner kan overal** ingezet worden.
|
||||
- [ ] **Hiërarchie vastleggen:** subgroepen verbonden aan groepen, en groepen aan
|
||||
leerpleinen (subgroep → groep → leerplein).
|
||||
|
||||
## Module: Urenoverzicht
|
||||
|
||||
- [ ] **Module die berekent hoeveel uur een groep per vak krijgt.**
|
||||
|
|
|
|||
|
|
@ -149,6 +149,15 @@ class Subgroep(models.Model):
|
|||
|
||||
naam = models.CharField("naam", max_length=100)
|
||||
omschrijving = models.CharField("omschrijving", max_length=255, blank=True)
|
||||
groep = models.ForeignKey(
|
||||
Groep,
|
||||
verbose_name="groep",
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="subgroepen",
|
||||
help_text="De groep waar deze subgroep onder valt.",
|
||||
)
|
||||
leden = models.ManyToManyField(
|
||||
Persoon,
|
||||
verbose_name="leden",
|
||||
|
|
@ -156,6 +165,13 @@ class Subgroep(models.Model):
|
|||
blank=True,
|
||||
limit_choices_to={"rol": Rol.LEERLING},
|
||||
)
|
||||
begeleiders = models.ManyToManyField(
|
||||
Persoon,
|
||||
verbose_name="begeleiders",
|
||||
related_name="begeleide_subgroepen",
|
||||
blank=True,
|
||||
help_text="Medewerkers die aan deze subgroep gekoppeld zijn.",
|
||||
)
|
||||
actief = models.BooleanField("actief", default=True)
|
||||
aangemaakt_op = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
|
|
|
|||
|
|
@ -65,15 +65,26 @@ class PersoonSerializer(serializers.ModelSerializer):
|
|||
data["vakken"] = []
|
||||
return data
|
||||
|
||||
@staticmethod
|
||||
def _met_theorievakken(gekozen):
|
||||
"""Voeg de theorievakken toe aan de gekozen vakken (zonder dubbelen)."""
|
||||
theorie = list(Activiteit.objects.filter(theorievak=True, actief=True))
|
||||
ids = {v.id for v in gekozen}
|
||||
return gekozen + [a for a in theorie if a.id not in ids]
|
||||
|
||||
def create(self, validated_data):
|
||||
# Een leerkracht krijgt de theorievakken standaard direct gekoppeld.
|
||||
if validated_data.get("rol") == "leerkracht":
|
||||
theorie = list(Activiteit.objects.filter(theorievak=True, actief=True))
|
||||
gekozen = validated_data.get("vakken", [])
|
||||
ids = {v.id for v in gekozen}
|
||||
validated_data["vakken"] = gekozen + [a for a in theorie if a.id not in ids]
|
||||
validated_data["vakken"] = self._met_theorievakken(validated_data.get("vakken", []))
|
||||
return super().create(validated_data)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
# Ook bij bewerken houdt een leerkracht altijd de theorievakken.
|
||||
rol = validated_data.get("rol", instance.rol)
|
||||
if rol == "leerkracht" and "vakken" in validated_data:
|
||||
validated_data["vakken"] = self._met_theorievakken(validated_data["vakken"])
|
||||
return super().update(instance, validated_data)
|
||||
|
||||
|
||||
class SubgroepSerializer(serializers.ModelSerializer):
|
||||
leden = serializers.PrimaryKeyRelatedField(
|
||||
|
|
|
|||
Loading…
Reference in a new issue