forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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,12 +79,11 @@ class TrajectoireTag(TableTag):
|
||||
|
||||
self.semestres_aggreges = trajectoire.semestres_aggreges
|
||||
|
||||
self.semestres_tags_aggreges = {}
|
||||
"""Les semestres tags associés aux semestres aggrégés"""
|
||||
for frmsem_id in self.semestres_aggreges:
|
||||
try:
|
||||
self.semestres_tags_aggreges = {
|
||||
frmsem_id: semestres_taggues[frmsem_id]
|
||||
for frmsem_id in semestres_taggues
|
||||
}
|
||||
self.semestres_tags_aggreges[frmsem_id] = semestres_taggues[frmsem_id]
|
||||
except:
|
||||
raise ValueError("Semestres taggués manquants")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user