init
This commit is contained in:
110
backend-django/backend/views/fiche_detaillee.py
Normal file
110
backend-django/backend/views/fiche_detaillee.py
Normal file
@@ -0,0 +1,110 @@
|
||||
from django.forms import model_to_dict
|
||||
from django.http import Http404
|
||||
from rest_framework.exceptions import APIException
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from ..models import FMOB, Administre, FormationEmploi
|
||||
from ..utils.decorators import class_logger
|
||||
from .commun import (GestionnairePermission, execution_time_viewset,
|
||||
query_count_viewset)
|
||||
|
||||
|
||||
@class_logger
|
||||
@execution_time_viewset
|
||||
@query_count_viewset
|
||||
class FicheDetailleeView(APIView):
|
||||
"""
|
||||
Cette classe est dédiée au vue de la fiche détaillée des administrés
|
||||
"""
|
||||
permission_classes = [IsAuthenticated, GestionnairePermission]
|
||||
|
||||
def get(self, request: Request) -> Response:
|
||||
"""La fonction get recupére les infos administrés
|
||||
|
||||
:type request: rest_framework.request.Request
|
||||
:param request: Request contenant l'identifiant de l'administré
|
||||
|
||||
:return: - **Response** (*objet*): informations concernant l'administré, informations sur le formulaire de mobilité.
|
||||
"""
|
||||
try:
|
||||
res = {"result": "error"}
|
||||
if 'administre_id' in request.query_params:
|
||||
administre_id = request.query_params['administre_id']
|
||||
annee_pam = request.query_params['pam__in']
|
||||
administre_id_pam = request.query_params['administre_id'] + annee_pam
|
||||
administre = Administre.objects.get(a_id_sap=administre_id)
|
||||
res = model_to_dict(administre, fields=[field.name for field in administre._meta.fields if field != 'a_liste_id_competences'])
|
||||
res['a_liste_id_competences'] = ','.join(list(administre.a_liste_id_competences.values_list('comp_libelle', flat=True)))
|
||||
fmobs = FMOB.objects.filter(administre_id=administre_id_pam)
|
||||
res["fmob"] = None
|
||||
res['pam'] = None
|
||||
|
||||
if fmobs.exists():
|
||||
fmob_dict = model_to_dict(fmobs[0])
|
||||
res["fmob"] = fmob_dict
|
||||
|
||||
res["fe"] = None
|
||||
fe = list(FormationEmploi.objects.filter(fe_code=administre.formation_emploi_id).values(
|
||||
*('fe_code', 'fe_code_postal', 'fe_garnison_lieu', 'fe_libelle')))
|
||||
# if fe.exists():
|
||||
# fe = fe[0]
|
||||
# garnison_dict = model_to_dict()
|
||||
# res["garnison"] = garnison_dict
|
||||
if len(fe):
|
||||
res["fe"] = fe[0]
|
||||
res["conjoint"] = None
|
||||
conjoint = Administre.objects.filter(a_id_sap=administre.a_sap_conjoint)
|
||||
if conjoint.exists():
|
||||
self.logger.debug('has conjoint')
|
||||
conjoint_dict = model_to_dict(conjoint[0])
|
||||
conjoint_dict['pam'] = None
|
||||
conjoint_dict["fe"] = None
|
||||
fe_conjoint = list(FormationEmploi.objects.filter(fe_code=conjoint_dict['formation_emploi']).values(
|
||||
*('fe_code', 'fe_code_postal', 'fe_garnison_lieu', 'fe_libelle')))
|
||||
if len(fe):
|
||||
conjoint_dict["fe"] = fe_conjoint[0]
|
||||
|
||||
# Verifier si le conjoint est formobé
|
||||
conjoint_dict["fmob_O_N"] = "Oui" if FMOB.objects.filter(administre_id=str(conjoint_dict['a_id_sap']) + annee_pam).exists() else "Non"
|
||||
res["conjoint"] = conjoint_dict
|
||||
|
||||
adm_affect = list(administre.adm_affec.values())
|
||||
adm_affect_sorted = sorted(adm_affect, key=lambda d: d['affect_date'], reverse=True)
|
||||
for i in range(len(adm_affect_sorted)):
|
||||
res['a_affectation{}'.format(i + 1)] = adm_affect_sorted[i]['affect_libelle']
|
||||
res['a_date_affectation{}'.format(i + 1)] = adm_affect_sorted[i]['affect_date']
|
||||
|
||||
adm_dip = list(administre.adm_dip.values())
|
||||
adm_dip_sorted = sorted(adm_dip, key=lambda d: d['diplome_date'], reverse=True)
|
||||
for i in range(len(adm_dip)):
|
||||
res['a_diplome_{}'.format(i + 1)] = adm_dip_sorted[i]['diplome_libelle']
|
||||
res['a_diplome_{}_date'.format(i + 1)] = adm_dip_sorted[i]['diplome_date']
|
||||
res['a_diplome_{}_note'.format(i + 1)] = adm_dip_sorted[i]['diplome_note']
|
||||
|
||||
adm_fud = list(administre.adm_fud.values())
|
||||
adm_fud_sorted = sorted(adm_fud, key=lambda d: d['fud_date_debut'], reverse=True)
|
||||
for i in range(len(adm_fud)):
|
||||
res['a_fud_{}_dd'.format(i + 1)] = adm_fud_sorted[i]['fud_date_debut']
|
||||
res['a_fud_{}_df'.format(i + 1)] = adm_fud_sorted[i]['fud_date_fin']
|
||||
res['a_fud_{}_l'.format(i + 1)] = adm_fud_sorted[i]['fud_libelle']
|
||||
|
||||
adm_not = list(administre.adm_not.values())
|
||||
adm_not_sorted = sorted(adm_not, key=lambda d: d['no_age_annees'], reverse=False)
|
||||
for i in range(len(adm_not_sorted)):
|
||||
res['no_annne_de_notation_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_annne_de_notation']
|
||||
res['no_nr_ou_iris_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_nr_ou_iris']
|
||||
res['no_rac_ou_iris_cumule_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_rac_ou_iris_cumule']
|
||||
res['no_rf_qsr_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_rf_qsr']
|
||||
res['no_aptitude_emploie_sup_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_aptitude_emploie_sup']
|
||||
res['no_potentiel_responsabilite_sup_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_potentiel_responsabilite_sup']
|
||||
res['no_age_annees_A_{}'.format(i + 1)] = adm_not_sorted[i]['no_age_annees']
|
||||
return Response(res)
|
||||
except (Http404, APIException):
|
||||
raise
|
||||
except:
|
||||
message = "impossible d'afficher la vue détaillée"
|
||||
self.logger.exception(message)
|
||||
raise APIException(message)
|
||||
Reference in New Issue
Block a user