init
This commit is contained in:
146
backend-django/backend/views/notation.py
Normal file
146
backend-django/backend/views/notation.py
Normal file
@@ -0,0 +1,146 @@
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.db.models import Q
|
||||
from numpy import True_
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
|
||||
from ..models import Decision, DecisionChoices, Notation, Poste
|
||||
from ..paginations import HeavyDataPagination
|
||||
from ..serializers.notation import NotationSerializer
|
||||
from .commun import (GestionnairePermission, execution_time_viewset,
|
||||
query_count_viewset)
|
||||
|
||||
|
||||
@execution_time_viewset
|
||||
@query_count_viewset
|
||||
class NotationView(ModelViewSet):
|
||||
"""
|
||||
Cette classe est dédiée au vue des notations.
|
||||
"""
|
||||
permission_classes = [IsAuthenticated, GestionnairePermission]
|
||||
serializer_class = NotationSerializer
|
||||
queryset = Notation.objects.all()
|
||||
pagination_class = HeavyDataPagination
|
||||
|
||||
def list(self, request: Request, pk=None) -> Response:
|
||||
"""La fonction list envoie le classement des postes pour un administré particulier et inversement.
|
||||
|
||||
:type request: rest_framework.request.Request
|
||||
:param request: Request contenant l'administre ou le poste.
|
||||
|
||||
:return: - **JsonResponse** (*JsonResponse*): Json contenant le classement.
|
||||
"""
|
||||
notations_list = []
|
||||
counter = 10
|
||||
if 'administre_id' in request.query_params:
|
||||
q = 'poste_pam'
|
||||
q1 = 'poste'
|
||||
administre_id = request.query_params['administre_id']
|
||||
administres_keys = (
|
||||
'poste_pam__id',
|
||||
'poste_pam__poste__p_id',
|
||||
'poste_pam__poste__p_nf',
|
||||
'poste_pam__poste__p_domaine',
|
||||
'poste_pam__poste__p_filiere',
|
||||
'poste_pam__poste__p_eip',
|
||||
'poste_pam__poste__formation_emploi__fe_code',
|
||||
'poste_pam__poste__p_notes_gestionnaire',
|
||||
'poste_pam__poste__p_liste_id_marques',
|
||||
'poste_pam__poste__p_code_fonction',
|
||||
'poste_pam__p_avis_pam',
|
||||
'poste_pam__poste__p_dep',
|
||||
'poste_pam__poste__formation_emploi__fe_libelle',
|
||||
'poste_pam__poste__p_fonction',
|
||||
'poste_pam__poste__formation_emploi__fe_garnison_lieu',
|
||||
'poste_pam__poste__formation_emploi__fe_code_postal',
|
||||
'no_score_administre',
|
||||
'no_flag_cple_ideal')
|
||||
|
||||
notation_qs = (Notation.objects.filter(Q(administre_pam_id=administre_id) & Q(poste_pam__decisions__isnull=True))
|
||||
.order_by('-no_score_administre')
|
||||
.select_related('poste_pams'))
|
||||
|
||||
notation_qs_matching_parfait = (Notation.objects.filter(administre_pam_id=administre_id,
|
||||
no_flag_cple_ideal=True,
|
||||
poste_pam__decisions__isnull=True)
|
||||
.select_related('poste_pams'))
|
||||
|
||||
notation_qs.union(notation_qs_matching_parfait)
|
||||
notation_qs = notation_qs | notation_qs_matching_parfait
|
||||
notations_list = list(notation_qs.values(*administres_keys))
|
||||
|
||||
for notation in notations_list:
|
||||
poste_id = notation['poste_pam__id']
|
||||
topCounter = 0
|
||||
allNotationsInvolved = Notation.objects.filter(poste_pam_id=poste_id)
|
||||
for note in allNotationsInvolved:
|
||||
topList = list(
|
||||
Notation.objects.filter(no_id=note.no_id).order_by('-no_score_administre').values('poste_pam_id'))
|
||||
topPostes = [poste['poste_pam_id'] for poste in topList]
|
||||
if poste_id in topPostes:
|
||||
topCounter += 1
|
||||
|
||||
notation['poste__nb_top'] = topCounter
|
||||
|
||||
if 'poste_id' in request.query_params:
|
||||
q = "administre_pam"
|
||||
q1 = 'administre'
|
||||
poste_id = request.query_params['poste_id']
|
||||
postes_keys = (
|
||||
'administre_pam__id',
|
||||
'administre_pam__administre__a_id_sap',
|
||||
'administre_pam__administre__a_nom',
|
||||
'administre_pam__administre__a_prenom',
|
||||
'administre_pam__a_statut_pam_annee',
|
||||
'administre_pam__administre__grade_id',
|
||||
'administre_pam__administre__a_liste_id_marques',
|
||||
'administre_pam__decision__de_decision',
|
||||
'administre_pam__decision__de_date_decision',
|
||||
'no_score_administre',
|
||||
'no_flag_cple_ideal',
|
||||
'administre_pam__notes_pam',
|
||||
'administre_pam__administre__a_notes_gestionnaire',
|
||||
'administre_pam__administre__a_fonction',
|
||||
'administre_pam__administre__a_code_fonction',
|
||||
'administre_pam__administre__a_liste_id_marques',
|
||||
'administre_pam__decision__poste_id')
|
||||
|
||||
notation_qs = (Notation.objects.filter(Q(poste_pam_id=poste_id) & Q(administre_pam__decision__isnull=True))
|
||||
.order_by('-no_score_administre')
|
||||
.select_related('administre_pam'))
|
||||
notation_qs_matching_parfait = (Notation.objects.filter(poste_pam_id=poste_id,
|
||||
no_flag_cple_ideal=True,
|
||||
administre_pam__decision__isnull=True)
|
||||
.select_related('administre_pam'))
|
||||
notation_qs.union(notation_qs_matching_parfait)
|
||||
notations_list = list(
|
||||
notation_qs.values(*postes_keys))
|
||||
|
||||
for notation in notations_list:
|
||||
administre_id = notation['administre_pam__id']
|
||||
topCounter = 0
|
||||
allNotationsInvolved = Notation.objects.filter(administre_pam_id=administre_id)
|
||||
for note in allNotationsInvolved:
|
||||
topList = list(Notation.objects.filter(no_id=note.no_id)
|
||||
.order_by('-no_score_administre')
|
||||
.values('administre_pam_id'))
|
||||
topAdministres = [administre['administre_pam_id'] for administre in topList]
|
||||
if administre_id in topAdministres:
|
||||
topCounter += 1
|
||||
|
||||
notation['administre__nb_top'] = topCounter
|
||||
|
||||
result = []
|
||||
for notation in notations_list:
|
||||
res_notation = {q1: {}}
|
||||
for key in notation:
|
||||
if (q + "__") in key:
|
||||
res_notation[q1][key.replace(q + '__', '').replace(q1 + '__', '')] = notation[key]
|
||||
else:
|
||||
res_notation[key] = notation[key]
|
||||
result.append(res_notation)
|
||||
|
||||
|
||||
return Response(result)
|
||||
Reference in New Issue
Block a user