Restreint les analyses aux semestres d'une formation APC (cf. bug lyonnais)

This commit is contained in:
Cléo Baras 2024-01-26 09:42:41 +01:00
parent 02bccb58aa
commit 769f6c0ea0
1 changed files with 43 additions and 22 deletions

View File

@ -190,7 +190,7 @@ class EtudiantsJuryPE:
"""
identite = Identite.get_etud(etudid)
"""Le cursus global de l'étudiant (restreint aux semestres APC)"""
# Le cursus global de l'étudiant (restreint aux semestres APC)
formsemestres = identite.get_formsemestres()
semestres_etudiant = {
@ -212,7 +212,7 @@ class EtudiantsJuryPE:
"abandon": False, # va être traité en dessous
}
""" Est-il réorienté / démissionnaire ou a-t-il arrêté volontairement sa formation ?"""
# Est-il réorienté / démissionnaire ou a-t-il arrêté volontairement sa formation ?
self.cursus[etudid]["abandon"] = arret_de_formation(identite, cosemestres)
def get_semestres_significatifs(self, etudid: int):
@ -409,8 +409,9 @@ def get_etudiants_dans_semestres(semestres: dict[int, FormSemestre]) -> set:
def annee_diplome(identite: Identite) -> int:
"""L'année de diplôme prévue d'un étudiant en fonction de ses semestres
d'inscription (pour un BUT).
"""L'année de diplôme prévue d'un étudiant en fonction de ses semestres d'inscription (pour un BUT).
Les semestres utilisés pour le calcul sont limités à ceux d'une formation apc.
Args:
identite: L'identité d'un étudiant
@ -418,23 +419,39 @@ def annee_diplome(identite: Identite) -> int:
Returns:
L'année prévue de sa diplômation
"""
formsemestres = identite.get_formsemestres()
formsemestres_apc = get_semestres_apc(identite)
if formsemestres:
dates_possibles_diplome = []
for sem_base in formsemestres:
if formsemestres_apc:
dates_possibles_diplome: int = []
"""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(annee)
dates_possibles_diplome.append(annee)
if dates_possibles_diplome:
return max(dates_possibles_diplome)
else:
None
else:
return None
return None
def arret_de_formation(identite: Identite, cosemestres: list[FormSemestre]) -> bool:
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(identite: Identite, cosemestres: dict[int, FormSemestre]) -> bool:
"""Détermine si un étudiant a arrêté sa formation. Il peut s'agir :
* d'une réorientation à l'initiative du jury de semestre ou d'une démission (on pourrait
@ -472,20 +489,24 @@ def arret_de_formation(identite: Identite, cosemestres: list[FormSemestre]) -> b
TODO:: A reprendre pour le cas des étudiants à l'étranger
TODO:: A reprendre si BUT avec semestres décalés
"""
etudid = identite.etudid
"""Son dernier semestre en date"""
semestres = {sem.semestre_id: sem for sem in identite.get_formsemestres()}
dernier_formsemestre = get_dernier_semestre_en_date(semestres)
# Les semestres APC de l'étudiant
semestres = get_semestres_apc(identite)
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"""
# semestre impair => passage de droit en semestre pair suivant (effet de l'annualisation)
# Les numéro de semestres possible dans lesquels il pourrait s'incrire
## semestre impair => passage de droit en semestre pair suivant (effet de l'annualisation)
if numero_dernier_formsemestre % 2 == 1:
numeros_possibles = list(
range(numero_dernier_formsemestre + 1, pe_comp.NBRE_SEMESTRES_DIPLOMANT)
)
# semestre pair => passage en année supérieure ou redoublement
## semestre pair => passage en année supérieure ou redoublement
else: #
numeros_possibles = list(
range(
@ -494,7 +515,7 @@ def arret_de_formation(identite: Identite, cosemestres: list[FormSemestre]) -> b
)
)
"""Y-a-t-il des cosemestres dans lesquels il aurait pu s'incrire ?"""
# Y-a-t-il des cosemestres dans lesquels il aurait pu s'incrire ?
formsestres_superieurs_possibles = []
for fid, sem in cosemestres.items(): # Les semestres ayant des inscrits
if (