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).
|
(de betreffende blokken vervallen voor die leerling).
|
||||||
- [ ] Stage instelbaar **per blok, per dagdeel of per dag**.
|
- [ ] 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: Urenoverzicht
|
||||||
|
|
||||||
- [ ] **Module die berekent hoeveel uur een groep per vak krijgt.**
|
- [ ] **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)
|
naam = models.CharField("naam", max_length=100)
|
||||||
omschrijving = models.CharField("omschrijving", max_length=255, blank=True)
|
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(
|
leden = models.ManyToManyField(
|
||||||
Persoon,
|
Persoon,
|
||||||
verbose_name="leden",
|
verbose_name="leden",
|
||||||
|
|
@ -156,6 +165,13 @@ class Subgroep(models.Model):
|
||||||
blank=True,
|
blank=True,
|
||||||
limit_choices_to={"rol": Rol.LEERLING},
|
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)
|
actief = models.BooleanField("actief", default=True)
|
||||||
aangemaakt_op = models.DateTimeField(auto_now_add=True)
|
aangemaakt_op = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,15 +65,26 @@ class PersoonSerializer(serializers.ModelSerializer):
|
||||||
data["vakken"] = []
|
data["vakken"] = []
|
||||||
return data
|
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):
|
def create(self, validated_data):
|
||||||
# Een leerkracht krijgt de theorievakken standaard direct gekoppeld.
|
# Een leerkracht krijgt de theorievakken standaard direct gekoppeld.
|
||||||
if validated_data.get("rol") == "leerkracht":
|
if validated_data.get("rol") == "leerkracht":
|
||||||
theorie = list(Activiteit.objects.filter(theorievak=True, actief=True))
|
validated_data["vakken"] = self._met_theorievakken(validated_data.get("vakken", []))
|
||||||
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]
|
|
||||||
return super().create(validated_data)
|
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):
|
class SubgroepSerializer(serializers.ModelSerializer):
|
||||||
leden = serializers.PrimaryKeyRelatedField(
|
leden = serializers.PrimaryKeyRelatedField(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue