forked from ScoDoc/ScoDoc
PE: ajout coloness etudid, INE, NIP + some code cleaning
This commit is contained in:
parent
1f6f3620a2
commit
5446ac0ed2
@ -38,27 +38,24 @@ Created on 17/01/2024
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from app.models import FormSemestre, Identite
|
from app.models import FormSemestre, Identite
|
||||||
import app.pe.pe_affichage as pe_affichage
|
|
||||||
import app.pe.pe_comp as pe_comp
|
|
||||||
from app.pe import pe_comp, pe_affichage
|
from app.pe import pe_comp, pe_affichage
|
||||||
|
|
||||||
|
|
||||||
class EtudiantsJuryPE:
|
class EtudiantsJuryPE:
|
||||||
|
"""Classe centralisant la gestion des étudiants à prendre en compte dans un jury de PE"""
|
||||||
|
|
||||||
def __init__(self, annee_diplome: int):
|
def __init__(self, annee_diplome: int):
|
||||||
"""
|
"""
|
||||||
Classe centralisant la gestion des étudiants à prendre en compte dans un jury de PE
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
annee_diplome: L'année de diplomation
|
annee_diplome: L'année de diplomation
|
||||||
"""
|
"""
|
||||||
self.annee_diplome = annee_diplome
|
self.annee_diplome = annee_diplome
|
||||||
"""L'année du diplôme"""
|
"""L'année du diplôme"""
|
||||||
|
|
||||||
self.identites = {} # ex. ETUDINFO_DICT
|
self.identites: dict[int, Identite] = {} # ex. ETUDINFO_DICT
|
||||||
"Les identités des étudiants traités pour le jury"
|
"Les identités des étudiants traités pour le jury"
|
||||||
|
|
||||||
self.cursus = {}
|
self.cursus: dict[int, dict] = {}
|
||||||
"Les cursus (semestres suivis, abandons) des étudiants"
|
"Les cursus (semestres suivis, abandons) des étudiants"
|
||||||
|
|
||||||
self.trajectoires = {}
|
self.trajectoires = {}
|
||||||
@ -67,15 +64,17 @@ class EtudiantsJuryPE:
|
|||||||
(par ex: 3S=S1+S2+S3 à prendre en compte avec d'éventuels redoublements)"""
|
(par ex: 3S=S1+S2+S3 à prendre en compte avec d'éventuels redoublements)"""
|
||||||
|
|
||||||
self.etudiants_diplomes = {}
|
self.etudiants_diplomes = {}
|
||||||
"""Les identités des étudiants à considérer au jury (ceux qui seront effectivement diplômés)"""
|
"""Les identités des étudiants à considérer au jury (ceux qui seront effectivement
|
||||||
|
diplômés)"""
|
||||||
|
|
||||||
self.diplomes_ids = {}
|
self.diplomes_ids = {}
|
||||||
"""Les etudids des étudiants diplômés"""
|
"""Les etudids des étudiants diplômés"""
|
||||||
|
|
||||||
self.etudiants_ids = {}
|
self.etudiants_ids = {}
|
||||||
"""Les etudids des étudiants dont il faut calculer les moyennes/classements (même si d'éventuels abandons).
|
"""Les etudids des étudiants dont il faut calculer les moyennes/classements
|
||||||
Il s'agit des étudiants inscrits dans les co-semestres (ceux du jury mais aussi d'autres ayant
|
(même si d'éventuels abandons).
|
||||||
été réorientés ou ayant abandonnés)"""
|
Il s'agit des étudiants inscrits dans les co-semestres (ceux du jury mais aussi
|
||||||
|
d'autres ayant été réorientés ou ayant abandonnés)"""
|
||||||
|
|
||||||
self.cosemestres: dict[int, FormSemestre] = None
|
self.cosemestres: dict[int, FormSemestre] = None
|
||||||
"Les cosemestres donnant lieu à même année de diplome"
|
"Les cosemestres donnant lieu à même année de diplome"
|
||||||
@ -107,18 +106,15 @@ class EtudiantsJuryPE:
|
|||||||
pe_affichage.pe_print("2) Liste des étudiants dans les différents co-semestres")
|
pe_affichage.pe_print("2) Liste des étudiants dans les différents co-semestres")
|
||||||
self.etudiants_ids = get_etudiants_dans_semestres(cosemestres)
|
self.etudiants_ids = get_etudiants_dans_semestres(cosemestres)
|
||||||
pe_affichage.pe_print(
|
pe_affichage.pe_print(
|
||||||
" => %d étudiants trouvés dans les cosemestres" % len(self.etudiants_ids)
|
f" => {len(self.etudiants_ids)} étudiants trouvés dans les cosemestres"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Analyse des parcours étudiants pour déterminer leur année effective de diplome
|
# Analyse des parcours étudiants pour déterminer leur année effective de diplome
|
||||||
# avec prise en compte des redoublements, des abandons, ....
|
# avec prise en compte des redoublements, des abandons, ....
|
||||||
pe_affichage.pe_print("3) Analyse des parcours individuels des étudiants")
|
pe_affichage.pe_print("3) Analyse des parcours individuels des étudiants")
|
||||||
|
|
||||||
no_etud = 0
|
for etudid in self.etudiants_ids:
|
||||||
for no_etud, etudid in enumerate(self.etudiants_ids):
|
self.identites[etudid] = Identite.get_etud(etudid)
|
||||||
identite = Identite.get_etud(etudid)
|
|
||||||
self.identites[etudid] = identite
|
|
||||||
"""identités des étudiants"""
|
|
||||||
|
|
||||||
# Analyse son cursus
|
# Analyse son cursus
|
||||||
self.analyse_etat_etudiant(etudid, cosemestres)
|
self.analyse_etat_etudiant(etudid, cosemestres)
|
||||||
@ -131,7 +127,6 @@ class EtudiantsJuryPE:
|
|||||||
self.diplomes_ids = set(self.etudiants_diplomes.keys())
|
self.diplomes_ids = set(self.etudiants_diplomes.keys())
|
||||||
|
|
||||||
self.etudiants_ids = set(self.identites.keys())
|
self.etudiants_ids = set(self.identites.keys())
|
||||||
"""Les étudiants dont il faut calculer les moyennes"""
|
|
||||||
|
|
||||||
self.formsemestres_jury_ids = self.get_formsemestres()
|
self.formsemestres_jury_ids = self.get_formsemestres()
|
||||||
"""Les formsemestres (des étudiants) dont il faut calculer les moyennes"""
|
"""Les formsemestres (des étudiants) dont il faut calculer les moyennes"""
|
||||||
@ -162,8 +157,6 @@ class EtudiantsJuryPE:
|
|||||||
# + ", ".join([str(fid) for fid in list(self.formsemestres_jury_ids)])
|
# + ", ".join([str(fid) for fid in list(self.formsemestres_jury_ids)])
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_etudiants_diplomes(self) -> dict[int, Identite]:
|
def get_etudiants_diplomes(self) -> dict[int, Identite]:
|
||||||
"""Identités des étudiants (sous forme d'un dictionnaire `{etudid: Identite(etudid)}`
|
"""Identités des étudiants (sous forme d'un dictionnaire `{etudid: Identite(etudid)}`
|
||||||
qui vont être à traiter au jury PE pour
|
qui vont être à traiter au jury PE pour
|
||||||
@ -175,9 +168,9 @@ class EtudiantsJuryPE:
|
|||||||
"""
|
"""
|
||||||
etudids = [
|
etudids = [
|
||||||
etudid
|
etudid
|
||||||
for etudid in self.cursus
|
for etudid, cursus_etud in self.cursus.items()
|
||||||
if self.cursus[etudid]["diplome"] == self.annee_diplome
|
if cursus_etud["diplome"] == self.annee_diplome
|
||||||
and self.cursus[etudid]["abandon"] is False
|
and cursus_etud["abandon"] is False
|
||||||
]
|
]
|
||||||
etudiants = {etudid: self.identites[etudid] for etudid in etudids}
|
etudiants = {etudid: self.identites[etudid] for etudid in etudids}
|
||||||
return etudiants
|
return etudiants
|
||||||
@ -192,9 +185,9 @@ class EtudiantsJuryPE:
|
|||||||
"""
|
"""
|
||||||
etudids = [
|
etudids = [
|
||||||
etudid
|
etudid
|
||||||
for etudid in self.cursus
|
for etudid, cursus_etud in self.cursus.items()
|
||||||
if self.cursus[etudid]["diplome"] != self.annee_diplome
|
if cursus_etud["diplome"] != self.annee_diplome
|
||||||
or self.cursus[etudid]["abandon"] is True
|
or cursus_etud["abandon"] is True
|
||||||
]
|
]
|
||||||
etudiants = {etudid: self.identites[etudid] for etudid in etudids}
|
etudiants = {etudid: self.identites[etudid] for etudid in etudids}
|
||||||
return etudiants
|
return etudiants
|
||||||
@ -224,9 +217,9 @@ class EtudiantsJuryPE:
|
|||||||
formsemestres = identite.get_formsemestres()
|
formsemestres = identite.get_formsemestres()
|
||||||
|
|
||||||
semestres_etudiant = {
|
semestres_etudiant = {
|
||||||
frmsem.formsemestre_id: frmsem
|
formsemestre.formsemestre_id: formsemestre
|
||||||
for frmsem in formsemestres
|
for formsemestre in formsemestres
|
||||||
if frmsem.formation.is_apc()
|
if formsemestre.formation.is_apc()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.cursus[etudid] = {
|
self.cursus[etudid] = {
|
||||||
@ -282,11 +275,12 @@ class EtudiantsJuryPE:
|
|||||||
# Tri des semestres par numéro de semestre
|
# Tri des semestres par numéro de semestre
|
||||||
for nom_sem in pe_comp.TOUS_LES_SEMESTRES:
|
for nom_sem in pe_comp.TOUS_LES_SEMESTRES:
|
||||||
i = int(nom_sem[1]) # le n° du semestre
|
i = int(nom_sem[1]) # le n° du semestre
|
||||||
|
# les semestres de n°i de l'étudiant:
|
||||||
semestres_i = {
|
semestres_i = {
|
||||||
fid: semestres_significatifs[fid]
|
fid: sem_sig
|
||||||
for fid in semestres_significatifs
|
for fid, sem_sig in semestres_significatifs.items()
|
||||||
if semestres_significatifs[fid].semestre_id == i
|
if sem_sig.semestre_id == i
|
||||||
} # les semestres de n°i de l'étudiant
|
}
|
||||||
self.cursus[etudid][nom_sem] = semestres_i
|
self.cursus[etudid][nom_sem] = semestres_i
|
||||||
|
|
||||||
def get_trajectoire(
|
def get_trajectoire(
|
||||||
@ -323,7 +317,7 @@ class EtudiantsJuryPE:
|
|||||||
int(sem[-1]) for sem in pe_comp.PARCOURS[nom_aggregat]["aggregat"]
|
int(sem[-1]) for sem in pe_comp.PARCOURS[nom_aggregat]["aggregat"]
|
||||||
]
|
]
|
||||||
assert numero_semestre_terminal in numero_semestres_possibles
|
assert numero_semestre_terminal in numero_semestres_possibles
|
||||||
else: # les xS = tous les semestres jusqu'à Sx (pax ex: des S1, S2, S3 pour un S3 terminal)
|
else: # les xS = tous les semestres jusqu'à Sx (eg S1, S2, S3 pour un S3 terminal)
|
||||||
numero_semestres_possibles = list(range(1, numero_semestre_terminal + 1))
|
numero_semestres_possibles = list(range(1, numero_semestre_terminal + 1))
|
||||||
|
|
||||||
semestres_aggreges = {}
|
semestres_aggreges = {}
|
||||||
@ -380,23 +374,23 @@ class EtudiantsJuryPE:
|
|||||||
* '3S', '4S' : pour obtenir les combinaisons de semestres définies par les aggrégats
|
* '3S', '4S' : pour obtenir les combinaisons de semestres définies par les aggrégats
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Un dictionnaire de la forme ``{fid: FormSemestre(fid)}``
|
Un dictionnaire de la forme `{fid: FormSemestre(fid)}`
|
||||||
|
|
||||||
Remarque:
|
Remarque:
|
||||||
Une liste de la forme ``[ 'Si', 'iA' , ... ]`` (combinant les formats précédents) est possible.
|
Une liste de la forme `[ 'Si', 'iA' , ... ]` (combinant les formats précédents) est possible.
|
||||||
"""
|
"""
|
||||||
if semestres_recherches is None:
|
if semestres_recherches is None:
|
||||||
# Appel récursif pour obtenir tous les semestres (validants)
|
# Appel récursif pour obtenir tous les semestres (validants)
|
||||||
semestres = self.get_formsemestres(pe_comp.AGGREGAT_DIPLOMANT)
|
semestres = self.get_formsemestres(pe_comp.AGGREGAT_DIPLOMANT)
|
||||||
return semestres
|
return semestres
|
||||||
elif isinstance(semestres_recherches, list):
|
if isinstance(semestres_recherches, list):
|
||||||
# Appel récursif sur tous les éléments de la liste
|
# Appel récursif sur tous les éléments de la liste
|
||||||
semestres = {}
|
semestres = {}
|
||||||
for elmt in semestres_recherches:
|
for elmt in semestres_recherches:
|
||||||
semestres_elmt = self.get_formsemestres(elmt)
|
semestres_elmt = self.get_formsemestres(elmt)
|
||||||
semestres = semestres | semestres_elmt
|
semestres = semestres | semestres_elmt
|
||||||
return semestres
|
return semestres
|
||||||
elif (
|
if (
|
||||||
isinstance(semestres_recherches, str)
|
isinstance(semestres_recherches, str)
|
||||||
and semestres_recherches in pe_comp.TOUS_LES_AGGREGATS
|
and semestres_recherches in pe_comp.TOUS_LES_AGGREGATS
|
||||||
):
|
):
|
||||||
@ -405,7 +399,7 @@ class EtudiantsJuryPE:
|
|||||||
pe_comp.PARCOURS[semestres_recherches]["aggregat"]
|
pe_comp.PARCOURS[semestres_recherches]["aggregat"]
|
||||||
)
|
)
|
||||||
return semestres
|
return semestres
|
||||||
elif (
|
if (
|
||||||
isinstance(semestres_recherches, str)
|
isinstance(semestres_recherches, str)
|
||||||
and semestres_recherches in pe_comp.TOUS_LES_SEMESTRES
|
and semestres_recherches in pe_comp.TOUS_LES_SEMESTRES
|
||||||
):
|
):
|
||||||
@ -418,8 +412,8 @@ class EtudiantsJuryPE:
|
|||||||
if self.cursus[etudid][nom_sem]:
|
if self.cursus[etudid][nom_sem]:
|
||||||
semestres = semestres | self.cursus[etudid][nom_sem]
|
semestres = semestres | self.cursus[etudid][nom_sem]
|
||||||
return semestres
|
return semestres
|
||||||
else:
|
|
||||||
raise ValueError("Probleme de paramètres d'appel dans get_formsemestreids")
|
raise ValueError("Probleme de paramètres d'appel dans get_formsemestreids")
|
||||||
|
|
||||||
def nbre_etapes_max_diplomes(self, etudids: list[int]) -> int:
|
def nbre_etapes_max_diplomes(self, etudids: list[int]) -> int:
|
||||||
"""Partant d'un ensemble d'étudiants,
|
"""Partant d'un ensemble d'étudiants,
|
||||||
@ -433,8 +427,7 @@ class EtudiantsJuryPE:
|
|||||||
nbres_semestres.append(self.cursus[etudid]["nb_semestres"])
|
nbres_semestres.append(self.cursus[etudid]["nb_semestres"])
|
||||||
if not nbres_semestres:
|
if not nbres_semestres:
|
||||||
return 0
|
return 0
|
||||||
else:
|
return max(nbres_semestres)
|
||||||
return max(nbres_semestres)
|
|
||||||
|
|
||||||
def df_administratif(self, etudids: list[int]) -> pd.DataFrame:
|
def df_administratif(self, etudids: list[int]) -> pd.DataFrame:
|
||||||
"""Synthétise toutes les données administratives d'un groupe
|
"""Synthétise toutes les données administratives d'un groupe
|
||||||
@ -461,13 +454,16 @@ class EtudiantsJuryPE:
|
|||||||
diplome = "indéterminé"
|
diplome = "indéterminé"
|
||||||
|
|
||||||
administratif[etudid] = {
|
administratif[etudid] = {
|
||||||
|
"etudid": etudiant.id,
|
||||||
|
"INE": etudiant.code_ine or "",
|
||||||
|
"NIP": etudiant.code_nip or "",
|
||||||
"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 entree": cursus["entree"],
|
||||||
"Date de diplome": diplome,
|
"Date diplome": diplome,
|
||||||
"Nbre de semestres": len(formsemestres),
|
"Nb semestres": len(formsemestres),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Ajout des noms de semestres parcourus
|
# Ajout des noms de semestres parcourus
|
||||||
|
Loading…
Reference in New Issue
Block a user