73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
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
|