from typing import Optional, Tuple from rest_framework import serializers from ..models import (Administre, Decision, DecisionChoices, DecisionTree, FormationEmploi, Poste, FMOB, Administres_Pams) from ..utils.attributes import safe_rgetattr from ..utils.decisions import KEY_CREATE, KEY_UPDATE, get_available_decisions from ..utils.permissions import (KEY_READ, KEY_WRITE, Profiles, get_profiles_by_adm) from .commun import AssignmentState from .fmob import FmobSerializer from .fonction import FonctionSerializer from .formation_emploi import FormationEmploiSerializer from .grade import GradeSerializer from .sous_vivier import SousVivierSerializer CTX_KEY_DECISIONS = 'decisions' CTX_KEY_PROFILES = 'profiles' class AdministreSerializer(serializers.ModelSerializer): """ Cette classe sera responsable de la conversion des objets administres en type json contenant les champs de l'administré et les champs de fonction, formation_emploi, sous_vivier, decisions, grade et Fmob liés à chaque administré. Cette classe va également ordonner le json par a_id_sap. Les variables qui seront affichées dans le json sont celles mentionnées dans la variable fields. """ a_id_sap = serializers.ReadOnlyField() formation_emploi = FormationEmploiSerializer(read_only=True) sous_vivier = SousVivierSerializer(read_only=True) sous_vivier_id = serializers.IntegerField(write_only=True, allow_null=True) fonction = FonctionSerializer(read_only=True) grade = GradeSerializer(read_only=True) class Meta: model = Administre ordering = [Administre.Cols.PK] fields = '__all__'