This commit is contained in:
2022-11-08 21:19:51 +01:00
commit 4c456eafc3
160 changed files with 21472 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
from .administre import *
from .alimentation import *
from .commun import *
from .current_user import *
from .decision import *
from .domaine import *
from .exportation_fichiers import *
from .filiere import *
from .fmob import *
from .fonction import *
from .formation_emploi import *
from .grade import *
from .initial import *
from .notation import *
from .pcp_fe_groupe import *
from .sous_vivier import *
from .suppression import *

View File

@@ -0,0 +1,41 @@
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__'

View File

@@ -0,0 +1,86 @@
from rest_framework import serializers
class FileSVSerializer(serializers.Serializer):
"""Cette classe ne sera utilisée que pour valider si le fichier SV est un vrai fichier.
"""
SV = serializers.FileField()
class Meta:
fields = ['sv_file']
class ChargementCompetencesSerializer(serializers.Serializer):
"""
Cette classe ne sera utilisée que pour valider si les fichiers competence_v1 et competence_v2 sont un vrais fichier.
"""
ref_skills = serializers.FileField(label="Référentiel des compétences", help_text="Fichier 'Référenciel des compétences_corrigé v2.xlsx'", required = False)
specific_skills = serializers.FileField(label="Compétences particulières", help_text="Fichier 'COMPETENCES PARTICULIERES.xlsx'", required = False)
class Meta:
fields = '__all__'
class AlimentationSerializer(serializers.Serializer):
"""Cette classe ne sera utilisée que pour valider si les fichiers Donnees_BO_ADT, REO, Ref Gest, Ref Org, Ref Sv Fil, Ref FE, FMOB, domaine_filiere, insee_mapin et diplomes sont des vrais fichiers.
"""
Donnees_BO_ADT = serializers.FileField(label="Données BO", help_text="Fichier 'Données BO_Anonymes.xlsx'", required=False)
REO = serializers.FileField(label="REO", help_text="Fichier 'REO2022_OGURE_NG.xlsx'", required=False)
REO_PAM_SUIVANT = serializers.FileField(label="REO A + 1",help_text="Fichier REO2023_OGURE_NG.xlsx", required=False)
REO_OCV = serializers.FileField(label="Requêtes OCV", help_text="Fichier 'Copie requete ocv postes et mise à poste v2.xlsx'", required=False)
referentiel_gestionnaire = serializers.FileField(label="Référentiel de gestionnaires", help_text="Fichier 'Référentiel gestionnaires DRHAT.xlsx'", required=False)
referentiel_organique = serializers.FileField(label="Référentiel organique", help_text="Fichier 'Référentiel organique DRHAT.xlsx'", required=False)
refeferentiel_sous_vivier_filiere = serializers.FileField(label="Référentiel de sous-viviers/filières", help_text="Fichier 'Référentiel sous-viviers filières_V3.xlsx'", required=False)
referentiel_fe = serializers.FileField(label="Référentiel FE", help_text="Fichier 'Référentiel FE anonymisé_V2.xlsx'", required=False)
FMOB = serializers.FileField(label="Formulaire de mobilité", help_text="Fichier 'FMOB_FEMP modifié.xlsx'", required=False)
FMOB_PAM_SUIVANT = serializers.FileField(label="Formulaire de mobilité A + 1", help_text="Fichier 'FMOB PAM A1 (2023).xlsx", required=False)
domaine_filiere = serializers.FileField(label="Domaines - filières", help_text="Fichier 'DOMAINES FILIERES DRHAT.xlsx'", required=False)
insee_maping = serializers.FileField(label="INSEE", help_text="Fichier 'INSEE.xlsx'", required=False)
diplomes = serializers.FileField(label="Diplômes", help_text="Fichier 'Diplomes 2021.xlsx'", required=False)
FUD = serializers.FileField(label="FUD", help_text="Fichier 'FUD.xlsx'", required=False)
ref_zones_geo = serializers.FileField(label="Référentiel des zones géographiques", help_text="Fichier 'Zones_Geographique.xlsx'", required=False)
class Meta:
fields = '__all__'
class AlimentationReferentielSerializer(serializers.Serializer):
""" Valide que les données sont bien des fichiers. """
referentiel_fe = serializers.FileField(label='Référentiel FE', help_text='Référentiel FE anonymisé_V2.xlsx')
class Meta:
fields = '__all__'
class AlimentationZoneGeographiqueSerializer(serializers.Serializer):
""" Valide que les données sont bien des fichiers. """
ref_zones_geo = serializers.FileField(label="Référentiel des zones géographiques", help_text="Fichier 'Zones_Geographique.xlsx'", required=False)
class Meta:
fields = '__all__'
class AlimentationCommentairesSerializer(serializers.Serializer):
""" Valide que les données sont bien des fichiers. """
commentaires = serializers.FileField(label='Commentaires', help_text='20220427_NP_DRHAT_SDG_BCCM_com-OGURE.xlsx', required=False)
class Meta:
fields = '__all__'
class AlimentationRefsDroitSerializer(serializers.Serializer):
""" Valide que les données sont bien des fichiers. """
referentiel_gestionnaire = serializers.FileField(label="Référentiel de gestionnaires", help_text="Fichier 'Référentiel gestionnaires DRHAT.xlsx'", required=False)
referentiel_organique = serializers.FileField(label="Référentiel organique", help_text="Fichier 'Référentiel organique DRHAT.xlsx'", required=False)
refeferentiel_sous_vivier_filiere = serializers.FileField(label="Référentiel de sous-viviers/filières", help_text="Fichier 'Référentiel sous-viviers filières_V3.xlsx'", required=False)
referentiel_fe = serializers.FileField(label="Référentiel FE", help_text="Fichier 'Référentiel FE anonymisé_V2.xlsx'", required=False)
class Meta:
fields = '__all__'

View File

@@ -0,0 +1,29 @@
from enum import Enum
from rest_framework import serializers
class AssignmentState(str, Enum):
""" état d'affectation BMOB (lié au changement de BMOB) """
# reste dans la même FE
RESTANT = 'RESTANT'
# entre dans une FE du périmètre du PCP
ENTRANT = 'ENTRANT'
# sort d'une FE du périmètre du PCP
SORTANT = 'SORTANT'
# ENTRANT + SORTANT (mais pas RESTANT car ce n'est pas la même FE)
ENTRANT_SORTANT = 'ENTRANT_SORTANT'
def __repr__(self):
return "%s.%s" % (self.__class__.__name__, self._name_)
class ChoicesSerializer(serializers.Serializer):
""" Représente un élément qui hérite de Choices sous forme {code, libelle} """
code = serializers.ReadOnlyField(source='value')
libelle = serializers.ReadOnlyField(source='label')

View File

@@ -0,0 +1,72 @@
from rest_framework import serializers
from ..models import CustomUser, SousVivier, FormationEmploi
from ..utils.permissions import KEY_READ, KEY_WRITE
from .pcp_fe_groupe import PcpFeGroupeSerializer
CTX_KEY_SOUS_VIVIERS_SUPER = 'sous_viviers_super'
CTX_KEY_SOUS_VIVIERS = 'sous_viviers'
CTX_KEY_FORMATION_EMPLOIS = 'formation_emplois'
CTX_KEY_PCP_FE_GROUPE = 'fe_groupe'
CTX_KEY_PROFILES = 'profiles'
class _SousVivierUserSerializer(serializers.ModelSerializer):
""" Classe de représentation d'un sous-vivier de l'utilisateur """
class Meta:
model = SousVivier
exclude = ('gestionnaires',)
def to_representation(self, instance):
res = super().to_representation(instance)
ids_super = self.context.get(CTX_KEY_SOUS_VIVIERS_SUPER)
if ids_super and instance.pk in ids_super:
res['admin'] = True
return res
class _FormationEmploiUserSerializer(serializers.ModelSerializer):
""" Classe de représentation d'un sous-vivier de l'utilisateur """
class Meta:
model = FormationEmploi
fields = [FormationEmploi.Cols.PK, FormationEmploi.Cols.LIBELLE, 'fe_mere_credo', 'fe_mere_la', 'gestionnaire_id']
gestionnaire_id = serializers.ReadOnlyField()
def to_representation(self, instance):
res = super().to_representation(instance)
return res
class UserInfoSerializer(serializers.ModelSerializer):
""" Gère la forme publique de l'utilisateur connecté. """
class Meta:
model = CustomUser
fields = ['id', 'username', 'first_name', 'last_name', 'email', 'grade', 'administre']
administre = serializers.ReadOnlyField(source='administre_id')
def to_representation(self, instance):
res = super().to_representation(instance)
svs_super = self.context.get(CTX_KEY_SOUS_VIVIERS_SUPER) or ()
svs = self.context.get(CTX_KEY_SOUS_VIVIERS) or ()
fes = self.context.get(CTX_KEY_FORMATION_EMPLOIS) or ()
all_svs = set(list(svs) + list(svs_super))
all_fes = set(list(fes))
svs_ids_specific_super = {sv.pk for sv in svs_super if sv not in svs}
res['sous_viviers'] = _SousVivierUserSerializer(all_svs, many=True, context={
CTX_KEY_SOUS_VIVIERS_SUPER: svs_ids_specific_super
}).data
res['formation_emplois'] = _FormationEmploiUserSerializer(all_fes, many=True).data
res['fe_groupe'] = PcpFeGroupeSerializer(self.context.get(CTX_KEY_PCP_FE_GROUPE) or ()).data
profiles = self.context.get(CTX_KEY_PROFILES) or {}
res['profils'] = {'lecture': profiles.get(KEY_READ) or (), 'ecriture': profiles.get(KEY_WRITE) or ()}
return res

View File

@@ -0,0 +1,35 @@
from rest_framework import serializers
from ..models import Decision, DecisionChoices
from .administre import AdministreSerializer
from .initial import PosteSerializer
from .notation import NotationSerializer
class DecisionSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets decisions en type json contenant les champs de decision
et les champs de notation, poste et administre liés à chaque decision . Cette classe va également ordonner le json par de_date_decision.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
notation = NotationSerializer()
# poste = PosteSerializer()
# administre = AdministreSerializer()
de_date_decision = serializers.ReadOnlyField()
class Meta:
model = Decision
fields = '__all__'
ordering = ['de_date_decision']
class CreateDecisionSerializer(serializers.ModelSerializer):
""" Valide les données pour une création de décision """
administre_id = serializers.IntegerField(write_only=True)
poste_id = serializers.CharField(max_length=100, write_only=True)
de_decision = serializers.ChoiceField(choices=DecisionChoices.choices)
delete_former = serializers.BooleanField(write_only=True, required=False)
class Meta:
model = Decision
fields = ['administre_id', 'poste_id', 'de_decision', 'delete_former']

View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
from ..models.domaine import Domaine
class DomaineSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets domaines en type json contenant les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = Domaine
fields = '__all__'

View File

@@ -0,0 +1,11 @@
from tabnanny import verbose
from rest_framework import serializers
class ExportationSerializer(serializers.Serializer):
"""Cette classe ne sera utilisée que pour valider si les fichiers Donnees_BO_ADT, REO, Ref Gest, Ref Org, Ref Sv Fil, Ref FE, FMOB, domaine_filiere, insee_mapin et diplomes sont des vrais fichiers.
"""
FICHIERS_CHOICES = (("1", "Données BO"), ("2", "REO"),)
fichier_exporte = serializers.ChoiceField(label='Fichier à exporter', help_text='Selectionnez le fichier que vous souhaitez exporter', choices=FICHIERS_CHOICES)
class Meta:
fields = '__all__'

View File

@@ -0,0 +1,16 @@
from rest_framework import serializers
from ..models.filiere import Filiere
from .domaine import DomaineSerializer
class FiliereSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets filières en type json contenant les informations de filière
et les champs du domaine liés à chaque filiere.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
domaine = DomaineSerializer()
class Meta:
model = Filiere
fields = '__all__'

View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
from ..models import FMOB
class FmobSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets Fmob en type json contenant uniquement les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = FMOB
fields = '__all__'

View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
from ..models import Fonction
class FonctionSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets fonctions en type json contenant les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = Fonction
fields = '__all__'

View File

@@ -0,0 +1,25 @@
from rest_framework import serializers
from ..models import FormationEmploi, Garnison
class FormationEmploiSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets FormationEmploi en type json contenant les informations de FormationEmploi
et le champs garnison lieu liés à chaque FormationEmploi.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class MereSerializer(serializers.ModelSerializer):
"""Classe de représentation de la FE mère"""
fe_code = serializers.ReadOnlyField()
fe_libelle = serializers.ReadOnlyField()
class Meta:
model = FormationEmploi
fields = ['fe_code', 'fe_libelle']
mere = MereSerializer(read_only=True)
class Meta:
model = FormationEmploi
exclude = ('gestionnaires',)

View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
from ..models import Grade
class GradeSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets grades en type json contenant les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = Grade
fields = '__all__'

View File

@@ -0,0 +1,259 @@
"""Ce fichier contient des fonctions qui permettent de convertir des données complexes,
telles que des querysets et des instances de modèle, en types de données Python qui peuvent ensuite
être facilement rendus en JSON, XML ou d'autres types de contenu.
"""
from rest_framework import serializers
from typing import Optional, Tuple
from .. import constants
from ..models import (Competence, Decision, Garnison, Marque, MarquesGroupe,
Poste, PAM, Administres_Pams, FormationEmploi, Postes_Pams,
DecisionChoices, DecisionTree, FMOB)
from .commun import AssignmentState
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 ChoicesSerializer
from .filiere import FiliereSerializer
from .fonction import FonctionSerializer
from .formation_emploi import FormationEmploiSerializer
from .sous_vivier import SousVivierSerializer
from .fmob import FmobSerializer
from .administre import AdministreSerializer
CTX_KEY_DECISIONS = 'decisions'
CTX_KEY_PROFILES = 'profiles'
class ScoringValidator(serializers.Serializer):
""" pour interprêter et valider le contenu JSON """
sous_vivier_id = serializers.CharField(max_length=100, required=True, allow_null=False, allow_blank=False)
pam_id = serializers.CharField(max_length=100, required=True, allow_null=False, allow_blank=False)
class ScoringSelectifValidator(serializers.Serializer):
""" pour interprêter et valider le contenu JSON """
sous_vivier_id = serializers.CharField(max_length=100, required=True, allow_null=False, allow_blank=False)
administre_id = serializers.ListField()
poste_id = serializers.ListField()
pam_id = serializers.CharField(max_length=100)
class SimpleDecisionPosteSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets decision en type json contenant uniquement les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
grade = serializers.ReadOnlyField(source='administre.grade.gr_code')
nom = serializers.ReadOnlyField(source='administre.a_nom')
prenom = serializers.ReadOnlyField(source='administre.a_prenom')
class Meta:
model = Decision
fields = '__all__'
class AdministresPamsSerializer(serializers.ModelSerializer):
class DecisionLocalSerializer(serializers.ModelSerializer):
"""Classe de représentation locale d'une décision"""
class PosteLocalSerializer(serializers.Serializer):
"""Classe de représentation locale d'un poste"""
class FormationEmploiLocalSerializer(FormationEmploiSerializer):
"""Classe de représentation locale d'une FE"""
class Meta:
model = FormationEmploi
fields = ['fe_code', 'fe_libelle', 'fe_mere_credo', 'fe_mere_la', 'fe_garnison_lieu', 'mere']
p_id = serializers.ReadOnlyField()
formation_emploi = FormationEmploiLocalSerializer(read_only=True)
class Meta:
model = Poste
fields = '__all__'
poste = PosteLocalSerializer(read_only=True)
class Meta:
model = Decision
fields = '__all__'
administre = AdministreSerializer()
pam_id = serializers.ReadOnlyField(source='pam.pam_id')
pam_date = serializers.ReadOnlyField(source='pam.pam_date')
pam_libelle = serializers.ReadOnlyField(source='pam.pam_libelle')
pam_statut = serializers.ReadOnlyField(source='pam.pam_statut')
fmobs = FmobSerializer()
decision = DecisionLocalSerializer()
profils = serializers.SerializerMethodField()
decisions_possibles = serializers.SerializerMethodField()
etat_fe_bmob = serializers.SerializerMethodField()
def get_decisions_possibles(self, obj: Administres_Pams) -> Tuple[DecisionChoices]:
decisions_by_adm = self.context.get(CTX_KEY_DECISIONS) or get_available_decisions((obj,), user=self.context['request'].user)
decisions = decisions_by_adm.get(obj.id) or {}
return {'creation': decisions.get(KEY_CREATE) or (), 'maj': decisions.get(KEY_UPDATE) or ()}
def get_profils(self, obj: Administres_Pams) -> Tuple[Profiles]:
profiles_by_adm = self.context.get(CTX_KEY_PROFILES) or get_profiles_by_adm(self.context['request'].user, obj)
profiles = profiles_by_adm.get(obj.id) or {}
return {'lecture': profiles.get(KEY_READ) or (), 'ecriture': profiles.get(KEY_WRITE) or ()}
def get_etat_fe_bmob(self, obj: Administres_Pams) -> Optional[AssignmentState]:
decision = safe_rgetattr(obj, f'{Administres_Pams.Cols.REL_DECISION}.{Decision.Cols.STATUT}')
if not decision or DecisionTree.ME not in DecisionChoices(decision).trees:
return None
profiles_by_adm = self.context.get(CTX_KEY_PROFILES) or get_profiles_by_adm(self.context['request'].user, obj)
profiles = (profiles_by_adm.get(obj.id) or {}).get(KEY_READ) or ()
if Profiles.PCP in profiles:
return AssignmentState.RESTANT
current = Profiles.PCP_ACTUEL in profiles
future = Profiles.PCP_FUTUR in profiles
if current and future:
return AssignmentState.ENTRANT_SORTANT
if current:
return AssignmentState.SORTANT
if future:
return AssignmentState.ENTRANT
return None
def to_representation(self, instance):
ret = super().to_representation(instance)
ret.update(ret.pop('administre'))
ret['a_statut_pam'] = ret.pop('a_statut_pam_annee')
if 'fmobs' in ret and ret['fmobs']:
ret['fmobs'] = [ret['fmobs']]
return ret
class Meta:
model = Administres_Pams
fields = '__all__'
class PAMSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets decision en type json contenant uniquement les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = PAM
fields = '__all__'
class MarquesGroupeSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets marquegroupes en type json contenant uniquement les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = MarquesGroupe
fields = '__all__'
class MarqueSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets marque en type json contenant les informations de marque et les champs de marquesgroupe liés à chaque marque.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
groupe_marques = MarquesGroupeSerializer()
class Meta:
model = Marque
fields = '__all__'
class GarnisonSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets garnisons en type json contenant les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = Garnison
fields = '__all__'
class SousVivierAssociationSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la creation d'un json contenant les champs du SousVivier
et les champs de filière liés à chaque SousVivier.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
filiere = FiliereSerializer()
sous_vivier = SousVivierSerializer()
class Meta:
fields = '__all__'
class CompetenceSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets competences en type json contenant les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = Competence
fields = '__all__'
class PosteSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets postes en type json contenant les champs du poste
et les champs de fonction, formation_emploi, sous_vivier et decisions liés à chaque poste. Cette classe va également ordonner le json par p_id et valider certaines variables.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
p_id = serializers.ReadOnlyField()
fonction = FonctionSerializer()
formation_emploi = FormationEmploiSerializer()
sous_viviers = SousVivierSerializer(many=True)
p_nb_prepositionne = serializers.IntegerField(read_only=True)
p_nb_positionne = serializers.IntegerField(read_only=True)
p_nb_omi_en_cours = serializers.IntegerField(read_only=True)
p_nb_omi_active = serializers.IntegerField(read_only=True)
p_poids_competences = serializers.IntegerField(read_only=True)
p_poids_filiere = serializers.IntegerField(read_only=True)
p_poids_nf = serializers.IntegerField(read_only=True)
class Meta:
model = Poste
ordering = ['p_id']
fields = '__all__'
class PostesPamsSerializer(serializers.ModelSerializer):
pam_id = serializers.ReadOnlyField(source='p_pam.pam_id')
pam_date = serializers.ReadOnlyField(source='p_pam.pam_date')
pam_libelle = serializers.ReadOnlyField(source='p_pam.pam_libelle')
pam_statut = serializers.ReadOnlyField(source='p_pam.pam_statut')
decisions = SimpleDecisionPosteSerializer()
poste = PosteSerializer()
def to_representation(self, instance):
ret = super().to_representation(instance)
ret.update(ret.pop('poste'))
if ret['decisions']:
ret['decisions'] = [ret['decisions']]
else :
ret['decisions'] = []
return ret
class Meta:
model = Postes_Pams
fields = '__all__'
class RefStatutPamChoicesSerializer(ChoicesSerializer):
""" Représente un élément StatutPamChoices dans les données de référence """
inclusAlgo = serializers.ReadOnlyField(source='calc_enabled')
affectationManuellePossible = serializers.ReadOnlyField(source='dec_enabled')
class RefAvisPosteChoicesSerializer(RefStatutPamChoicesSerializer):
""" Représente un élément AvisPosteChoices dans les données de référence """

View File

@@ -0,0 +1,11 @@
from rest_framework import serializers
from ..models import Notation
class NotationSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets Notation en type json contenant uniquement les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = Notation
fields = '__all__'

View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
from ..models import PcpFeGroupe
class PcpFeGroupeSerializer(serializers.ModelSerializer):
"""Cette classe sera responsable de la conversion des objets PcpFeGroupe en type json contenant les informations mentionnées dans la variable fields.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = PcpFeGroupe
fields = '__all__'

View File

@@ -0,0 +1,15 @@
from rest_framework import serializers
from ..models import SousVivier
class SousVivierSerializer(serializers.ModelSerializer):
"""
Cette classe sera responsable de la conversion des objets SousVivier en type json contenant les informations du SousVivier
et la/le gestionnaire responsable de chaque SousVivier.
Si fields='__all__', alors toutes les variables liées à cette classe seront affichées dans le json.
"""
class Meta:
model = SousVivier
exclude = (SousVivier.Cols.M2M_GESTIONNAIRES,)

View File

@@ -0,0 +1,9 @@
from rest_framework import serializers
class SuppressionAdministresSerializer(serializers.Serializer):
""" Valide que les données sont bien des fichiers. """
administres = serializers.FileField(label='Administrés à supprimer', help_text="Fichier 'Militaires à supprimer d\'OGURE.xlsx'", required=False)
class Meta:
fields = '__all__'