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

View File

@ -190,7 +190,7 @@ class EtudiantsJuryPE:
""" """
identite = Identite.get_etud(etudid) 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() formsemestres = identite.get_formsemestres()
semestres_etudiant = { semestres_etudiant = {
@ -212,7 +212,7 @@ class EtudiantsJuryPE:
"abandon": False, # va être traité en dessous "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) self.cursus[etudid]["abandon"] = arret_de_formation(identite, cosemestres)
def get_semestres_significatifs(self, etudid: int): 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: def annee_diplome(identite: Identite) -> int:
"""L'année de diplôme prévue d'un étudiant en fonction de ses semestres """L'année de diplôme prévue d'un étudiant en fonction de ses semestres d'inscription (pour un BUT).
d'inscription (pour un BUT).
Les semestres utilisés pour le calcul sont limités à ceux d'une formation apc.
Args: Args:
identite: L'identité d'un étudiant identite: L'identité d'un étudiant
@ -418,23 +419,39 @@ def annee_diplome(identite: Identite) -> int:
Returns: Returns:
L'année prévue de sa diplômation L'année prévue de sa diplômation
""" """
formsemestres = identite.get_formsemestres() formsemestres_apc = get_semestres_apc(identite)
if formsemestres: if formsemestres_apc:
dates_possibles_diplome = [] dates_possibles_diplome: int = []
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) annee = pe_comp.get_annee_diplome_semestre(sem_base)
if annee: if annee:
dates_possibles_diplome(annee) dates_possibles_diplome.append(annee)
if dates_possibles_diplome: if dates_possibles_diplome:
return max(dates_possibles_diplome) return max(dates_possibles_diplome)
else:
None return None
else:
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é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 * 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 pour le cas des étudiants à l'étranger
TODO:: A reprendre si BUT avec semestres décalés TODO:: A reprendre si BUT avec semestres décalés
""" """
etudid = identite.etudid
"""Son dernier semestre en date""" # Les semestres APC de l'étudiant
semestres = {sem.semestre_id: sem for sem in identite.get_formsemestres()} semestres = get_semestres_apc(identite)
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
# semestre impair => passage de droit en semestre pair suivant (effet de l'annualisation) ## semestre impair => passage de droit en semestre pair suivant (effet de l'annualisation)
if numero_dernier_formsemestre % 2 == 1: if numero_dernier_formsemestre % 2 == 1:
numeros_possibles = list( numeros_possibles = list(
range(numero_dernier_formsemestre + 1, pe_comp.NBRE_SEMESTRES_DIPLOMANT) 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: # else: #
numeros_possibles = list( numeros_possibles = list(
range( 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 = [] formsestres_superieurs_possibles = []
for fid, sem in cosemestres.items(): # Les semestres ayant des inscrits for fid, sem in cosemestres.items(): # Les semestres ayant des inscrits
if ( if (