diff --git a/app/pe/pe_etudiant.py b/app/pe/pe_etudiant.py index 740a04008..605f85cbb 100644 --- a/app/pe/pe_etudiant.py +++ b/app/pe/pe_etudiant.py @@ -419,18 +419,39 @@ def get_annee_diplome(etud: Identite) -> int: Returns: L'année prévue de sa diplômation - - NOTE: Pourrait être déplacé dans app.models.etudiants.Identite """ - formsemestres = etud.get_formsemestres() - if formsemestres: - return max( - (pe_comp.get_annee_diplome_semestre(sem_base) or -1) - for sem_base in formsemestres - ) + formsemestres_apc = get_semestres_apc(etud) + + if formsemestres_apc: + dates_possibles_diplome = [] + """Années de diplômation prédites en fonction des semestres (d'une formation APC) d'un étudiant""" + for sem_base in formsemestres_apc: + annee = pe_comp.get_annee_diplome_semestre(sem_base) + if annee: + dates_possibles_diplome.append(annee) + if dates_possibles_diplome: + return max(dates_possibles_diplome) + return None +def get_semestres_apc(identite: Identite) -> list: + """Liste des semestres d'un étudiant qui corresponde à une formation APC. + + Args: + identite: L'identité d'un étudiant + + Returns: + Liste de ``FormSemestre`` correspondant à une formation APC + """ + semestres = identite.get_formsemestres() + semestres_apc = [] + for sem in semestres: + if sem.formation.is_apc(): + semestres_apc.append(sem) + return semestres_apc + + def arret_de_formation(etud: Identite, cosemestres: list[FormSemestre]) -> bool: """Détermine si un étudiant a arrêté sa formation. Il peut s'agir : @@ -460,7 +481,7 @@ def arret_de_formation(etud: Identite, cosemestres: list[FormSemestre]) -> bool: dans lequel il aurait pu s'inscrire mais ne l'a pas fait. Args: - identite: L'identité d'un étudiant + etud: L'identité d'un étudiant cosemestres: Les semestres donnant lieu à diplômation (sans redoublement) en date du jury Returns: @@ -470,9 +491,14 @@ def arret_de_formation(etud: Identite, cosemestres: list[FormSemestre]) -> bool: TODO:: A reprendre si BUT avec semestres décalés """ - # Son dernier semestre en date - semestres = {sem.semestre_id: sem for sem in etud.get_formsemestres()} - dernier_formsemestre = get_dernier_semestre_en_date(semestres) + # Les semestres APC de l'étudiant + semestres = get_semestres_apc(etud) + semestres_apc = {sem.semestre_id: sem for sem in semestres} + if not semestres_apc: + return True + + # Son dernier semestre APC en date + dernier_formsemestre = get_dernier_semestre_en_date(semestres_apc) numero_dernier_formsemestre = dernier_formsemestre.semestre_id # Les numéro de semestres possible dans lesquels il pourrait s'incrire diff --git a/app/pe/pe_jury.py b/app/pe/pe_jury.py index 38fdf6d5d..3d5f116c8 100644 --- a/app/pe/pe_jury.py +++ b/app/pe/pe_jury.py @@ -267,13 +267,18 @@ class JuryPE(object): cursus = self.etudiants.cursus[etudid] formsemestres = cursus["formsemestres"] + if cursus["diplome"]: + diplome = cursus["diplome"] + else: + diplome = "indéterminé" + administratif[etudid] = { "Nom": etudiant.nom, "Prenom": etudiant.prenom, "Civilite": etudiant.civilite_str, "Age": pe_comp.calcul_age(etudiant.date_naissance), "Date d'entree": cursus["entree"], - "Date de diplome": cursus["diplome"], + "Date de diplome": diplome, "Nbre de semestres": len(formsemestres), } @@ -450,10 +455,8 @@ def compute_trajectoires_tag( pe_comp.pe_print(f" --> Fusion {nom}") - """Création de la trajectoire_tagguee associée""" - trajectoire_tagguee = TrajectoireTag( - nom, trajectoire, semestres_taggues, etudiants - ) + trajectoire_tagguee = TrajectoireTag(nom, trajectoire, semestres_taggues) + """Trajectoire_tagguee associée""" """Mémorise le résultat""" trajectoires_tagguees[trajectoire_id] = trajectoire_tagguee diff --git a/app/pe/pe_trajectoire.py b/app/pe/pe_trajectoire.py index d527de3cd..d4fa6c9d6 100644 --- a/app/pe/pe_trajectoire.py +++ b/app/pe/pe_trajectoire.py @@ -1,4 +1,4 @@ -import app.pe.pe_comp as pe_tools +import app.pe.pe_comp as pe_comp from app.models import FormSemestre from app.pe.pe_etudiant import EtudiantsJuryPE, get_dernier_semestre_en_date @@ -83,16 +83,16 @@ class TrajectoiresJuryPE: analysés + les mémorise dans les données de l'étudiant """ - for nom_aggregat in pe_tools.TOUS_LES_SEMESTRES + pe_tools.TOUS_LES_AGGREGATS: + for nom_aggregat in pe_comp.TOUS_LES_SEMESTRES + pe_comp.TOUS_LES_AGGREGATS: """L'aggrégat considéré (par ex: 3S=S1+S2+S3), son nom de son semestre terminal (par ex: S3) et son numéro (par ex: 3)""" - noms_semestre_de_aggregat = pe_tools.PARCOURS[nom_aggregat]["aggregat"] + noms_semestre_de_aggregat = pe_comp.PARCOURS[nom_aggregat]["aggregat"] nom_semestre_terminal = noms_semestre_de_aggregat[-1] for etudid in etudiants.cursus: if etudid not in self.suivi: self.suivi[etudid] = {aggregat: None - for aggregat in pe_tools.TOUS_LES_SEMESTRES + pe_tools.TOUS_LES_AGGREGATS} + for aggregat in pe_comp.TOUS_LES_SEMESTRES + pe_comp.TOUS_LES_AGGREGATS} """Le formsemestre terminal (dernier en date) associé au semestre marquant la fin de l'aggrégat @@ -124,6 +124,21 @@ class TrajectoiresJuryPE: # assert dernier_semestre_aggregat == formsemestre_terminal +def get_trajectoires_etudid(trajectoires, etudid): + """Fonction pour débuggage: renvoie la liste des trajectoires_id des + trajectoires suivies par un étudiant + """ + if etudid not in trajectoires.suivi: + pe_comp.pe_print(f"{etudid} fait-il bien partie du jury ?") + + liste = [] + for aggregat in pe_comp.TOUS_LES_PARCOURS: + trajet = trajectoires.suivi[etudid][aggregat] + if trajet: + liste.append(trajet.trajectoire_id) + return liste + + def get_semestres_a_aggreger(self, aggregat: str, formsemestre_id_terminal: int): """Pour un nom d'aggrégat donné (par ex: 'S3') et un semestre terminal cible identifié par son formsemestre_id (par ex: 'S3 2022-2023'), @@ -138,7 +153,7 @@ def get_semestres_a_aggreger(self, aggregat: str, formsemestre_id_terminal: int) formsemestre_id_terminal: L'identifiant du formsemestre terminal de l'aggrégat, devant correspondre au dernier semestre de l'aggrégat """ - noms_semestres_aggreges = pe_tools.PARCOURS[aggregat]["aggregat"] + noms_semestres_aggreges = pe_comp.PARCOURS[aggregat]["aggregat"] formsemestres = {} for etudid in self.cursus: diff --git a/app/pe/pe_trajectoiretag.py b/app/pe/pe_trajectoiretag.py index 71b665dca..07b742ca1 100644 --- a/app/pe/pe_trajectoiretag.py +++ b/app/pe/pe_trajectoiretag.py @@ -64,8 +64,7 @@ class TrajectoireTag(TableTag): self, nom: str, trajectoire: Trajectoire, - semestres_taggues: dict[int, SemestreTag], - donnees_etudiants: EtudiantsJuryPE, + semestres_taggues: dict[int, SemestreTag] ): """ """ TableTag.__init__(self, nom=nom) @@ -80,14 +79,13 @@ class TrajectoireTag(TableTag): self.semestres_aggreges = trajectoire.semestres_aggreges + self.semestres_tags_aggreges = {} """Les semestres tags associés aux semestres aggrégés""" - try: - self.semestres_tags_aggreges = { - frmsem_id: semestres_taggues[frmsem_id] - for frmsem_id in semestres_taggues - } - except: - raise ValueError("Semestres taggués manquants") + for frmsem_id in self.semestres_aggreges: + try: + self.semestres_tags_aggreges[frmsem_id] = semestres_taggues[frmsem_id] + except: + raise ValueError("Semestres taggués manquants") """Les étudiants (état civil + cursus connu)""" self.etuds = nt.etuds