diff --git a/app/api/etudiants.py b/app/api/etudiants.py index 76dd2347..e53056f1 100644 --- a/app/api/etudiants.py +++ b/app/api/etudiants.py @@ -14,6 +14,7 @@ import app from app.api import bp from app.api.errors import error_response from app.api.auth import token_auth, token_permission_required +from app.api.tools import get_last_instance_etud_from_etudid_or_nip_or_ine from app.models import Departement, FormSemestreInscription, FormSemestre, Identite from app.scodoc import sco_bulletins from app.scodoc import sco_groups @@ -104,27 +105,7 @@ def etudiant(etudid: int = None, nip: str = None, ine: str = None): "description": "" } """ - 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() + etud = get_last_instance_etud_from_etudid_or_nip_or_ine(etudid, nip, ine) if etud is None: return error_response( diff --git a/app/api/tools.py b/app/api/tools.py index 72e98a3c..462a5cbf 100644 --- a/app/api/tools.py +++ b/app/api/tools.py @@ -1,11 +1,14 @@ from app import models -### TODO Faire en sorte de renvoyer l'étudiant qui a son inscription la plus récente -def get_etud_from_etudid_or_nip_or_ine( +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: """ - etudiant en fonction de l'etudid, code nip et code ine rentré en paramètres + 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 @@ -13,12 +16,27 @@ def get_etud_from_etudid_or_nip_or_ine( Return None si étudiant inexistant. """ - if etudid is None: - if nip is None: # si ine - etud = models.Identite.query.filter_by(code_ine=str(ine)).first() - else: # si nip - etud = models.Identite.query.filter_by(code_nip=str(nip)).first() - else: # si etudid - etud = models.Identite.query.filter_by(id=etudid).first() + 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 +