Update opolka/ScoDoc from ScoDoc/ScoDoc #2

Merged
opolka merged 1272 commits from ScoDoc/ScoDoc:master into master 2024-05-27 09:11:04 +02:00
4 changed files with 73 additions and 31 deletions
Showing only changes of commit e25f7d4fc9 - Show all commits

View File

@ -419,18 +419,39 @@ def get_annee_diplome(etud: Identite) -> int:
Returns: Returns:
L'année prévue de sa diplômation L'année prévue de sa diplômation
NOTE: Pourrait être déplacé dans app.models.etudiants.Identite
""" """
formsemestres = etud.get_formsemestres() formsemestres_apc = get_semestres_apc(etud)
if formsemestres:
return max( if formsemestres_apc:
(pe_comp.get_annee_diplome_semestre(sem_base) or -1) dates_possibles_diplome = []
for sem_base in formsemestres """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 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: def arret_de_formation(etud: Identite, cosemestres: list[FormSemestre]) -> bool:
"""Détermine si un étudiant a arrêté sa formation. Il peut s'agir : """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. dans lequel il aurait pu s'inscrire mais ne l'a pas fait.
Args: 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 cosemestres: Les semestres donnant lieu à diplômation (sans redoublement) en date du jury
Returns: 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 TODO:: A reprendre si BUT avec semestres décalés
""" """
# Son dernier semestre en date # Les semestres APC de l'étudiant
semestres = {sem.semestre_id: sem for sem in etud.get_formsemestres()} semestres = get_semestres_apc(etud)
dernier_formsemestre = get_dernier_semestre_en_date(semestres) 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 numero_dernier_formsemestre = dernier_formsemestre.semestre_id
# Les numéro de semestres possible dans lesquels il pourrait s'incrire # Les numéro de semestres possible dans lesquels il pourrait s'incrire

View File

@ -267,13 +267,18 @@ class JuryPE(object):
cursus = self.etudiants.cursus[etudid] cursus = self.etudiants.cursus[etudid]
formsemestres = cursus["formsemestres"] formsemestres = cursus["formsemestres"]
if cursus["diplome"]:
diplome = cursus["diplome"]
else:
diplome = "indéterminé"
administratif[etudid] = { administratif[etudid] = {
"Nom": etudiant.nom, "Nom": etudiant.nom,
"Prenom": etudiant.prenom, "Prenom": etudiant.prenom,
"Civilite": etudiant.civilite_str, "Civilite": etudiant.civilite_str,
"Age": pe_comp.calcul_age(etudiant.date_naissance), "Age": pe_comp.calcul_age(etudiant.date_naissance),
"Date d'entree": cursus["entree"], "Date d'entree": cursus["entree"],
"Date de diplome": cursus["diplome"], "Date de diplome": diplome,
"Nbre de semestres": len(formsemestres), "Nbre de semestres": len(formsemestres),
} }
@ -450,10 +455,8 @@ def compute_trajectoires_tag(
pe_comp.pe_print(f" --> Fusion {nom}") pe_comp.pe_print(f" --> Fusion {nom}")
"""Création de la trajectoire_tagguee associée""" trajectoire_tagguee = TrajectoireTag(nom, trajectoire, semestres_taggues)
trajectoire_tagguee = TrajectoireTag( """Trajectoire_tagguee associée"""
nom, trajectoire, semestres_taggues, etudiants
)
"""Mémorise le résultat""" """Mémorise le résultat"""
trajectoires_tagguees[trajectoire_id] = trajectoire_tagguee trajectoires_tagguees[trajectoire_id] = trajectoire_tagguee

View File

@ -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.models import FormSemestre
from app.pe.pe_etudiant import EtudiantsJuryPE, get_dernier_semestre_en_date 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 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)""" """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] nom_semestre_terminal = noms_semestre_de_aggregat[-1]
for etudid in etudiants.cursus: for etudid in etudiants.cursus:
if etudid not in self.suivi: if etudid not in self.suivi:
self.suivi[etudid] = {aggregat: None 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 """Le formsemestre terminal (dernier en date) associé au
semestre marquant la fin de l'aggrégat semestre marquant la fin de l'aggrégat
@ -124,6 +124,21 @@ class TrajectoiresJuryPE:
# assert dernier_semestre_aggregat == formsemestre_terminal # 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): 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 """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'), 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 formsemestre_id_terminal: L'identifiant du formsemestre terminal de l'aggrégat, devant correspondre au
dernier semestre de l'aggrégat dernier semestre de l'aggrégat
""" """
noms_semestres_aggreges = pe_tools.PARCOURS[aggregat]["aggregat"] noms_semestres_aggreges = pe_comp.PARCOURS[aggregat]["aggregat"]
formsemestres = {} formsemestres = {}
for etudid in self.cursus: for etudid in self.cursus:

View File

@ -64,8 +64,7 @@ class TrajectoireTag(TableTag):
self, self,
nom: str, nom: str,
trajectoire: Trajectoire, trajectoire: Trajectoire,
semestres_taggues: dict[int, SemestreTag], semestres_taggues: dict[int, SemestreTag]
donnees_etudiants: EtudiantsJuryPE,
): ):
""" """ """ """
TableTag.__init__(self, nom=nom) TableTag.__init__(self, nom=nom)
@ -80,14 +79,13 @@ class TrajectoireTag(TableTag):
self.semestres_aggreges = trajectoire.semestres_aggreges self.semestres_aggreges = trajectoire.semestres_aggreges
self.semestres_tags_aggreges = {}
"""Les semestres tags associés aux semestres aggrégés""" """Les semestres tags associés aux semestres aggrégés"""
try: for frmsem_id in self.semestres_aggreges:
self.semestres_tags_aggreges = { try:
frmsem_id: semestres_taggues[frmsem_id] self.semestres_tags_aggreges[frmsem_id] = semestres_taggues[frmsem_id]
for frmsem_id in semestres_taggues except:
} raise ValueError("Semestres taggués manquants")
except:
raise ValueError("Semestres taggués manquants")
"""Les étudiants (état civil + cursus connu)""" """Les étudiants (état civil + cursus connu)"""
self.etuds = nt.etuds self.etuds = nt.etuds