55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
from app import models
|
|
|
|
from app.api.errors import error_response
|
|
from app.models import Identite
|
|
|
|
|
|
def get_last_instance_etud_from_etudid_or_nip_or_ine(
|
|
etudid=None, nip=None, ine=None
|
|
) -> models.Identite:
|
|
"""
|
|
Retourne l'instance de l'etudiant la plus récente en fonction de l'etudid, code nip et code ine rentré en paramètres
|
|
|
|
etudid : None ou un int etudid
|
|
nip : None ou un int code_nip
|
|
ine : None ou un int code_ine
|
|
|
|
Return None si étudiant inexistant.
|
|
"""
|
|
if etudid is not None:
|
|
etud = Identite.query.get(etudid)
|
|
else:
|
|
if nip is not None:
|
|
query = Identite.query.filter_by(code_nip=nip)
|
|
elif ine is not None:
|
|
query = Identite.query.filter_by(code_ine=ine)
|
|
else:
|
|
return error_response(
|
|
404,
|
|
message="parametre manquant",
|
|
)
|
|
if query.count() > 1: # cas rare d'un étudiant présent dans plusieurs depts
|
|
etuds = []
|
|
for e in query:
|
|
admission = e.admission.first()
|
|
etuds.append((((admission.annee or 0) if admission else 0), e))
|
|
etuds.sort()
|
|
etud = etuds[-1][1]
|
|
else:
|
|
etud = query.first()
|
|
|
|
return etud
|
|
|
|
|
|
def calculate_median_list_notes(list):
|
|
"""
|
|
Retourne la mediane d'une liste de notes
|
|
list : une liste préalablement sorted de préférence
|
|
"""
|
|
list_len = len(list)
|
|
if list_len < 1:
|
|
return None
|
|
|
|
# Ici si la longueur est paire on prend, on prend le +1 car un indice ne peux pas avoir de nombre floatant
|
|
return list[int((list_len) / 2)]
|