forked from ScoDoc/ScoDoc
Merge branch 'pe-BUT-v2' of https://scodoc.org/git/cleo/ScoDoc-PE
This commit is contained in:
commit
e25f7d4fc9
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user