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,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