80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
from app.models import Formation, FormSemestre
|
|
from app.scodoc import codes_cursus
|
|
from app import log
|
|
|
|
PE_DEBUG = 0
|
|
|
|
if not PE_DEBUG:
|
|
# log to notes.log
|
|
def pe_print(*a, **kw):
|
|
# kw is ignored. log always add a newline
|
|
log(" ".join(a))
|
|
else:
|
|
pe_print = print # print function
|
|
|
|
|
|
def nom_semestre_etape(semestre: FormSemestre, avec_fid=False) -> str:
|
|
"""Nom d'un semestre à afficher dans le descriptif des étapes de la scolarité
|
|
d'un étudiant.
|
|
|
|
Par ex: Pour un S2, affiche ``"Semestre 2 FI S014-2015 (129)"`` avec :
|
|
|
|
* 2 le numéro du semestre,
|
|
* FI la modalité,
|
|
* 2014-2015 les dates
|
|
|
|
Args:
|
|
semestre: Un ``FormSemestre``
|
|
avec_fid: Ajoute le n° du semestre à la description
|
|
|
|
Returns:
|
|
La chaine de caractères décrivant succintement le semestre
|
|
"""
|
|
formation: Formation = semestre.formation
|
|
parcours = codes_cursus.get_cursus_from_code(formation.type_parcours)
|
|
|
|
description = [
|
|
parcours.SESSION_NAME.capitalize(),
|
|
str(semestre.semestre_id),
|
|
semestre.modalite, # eg FI ou FC
|
|
f"{semestre.date_debut.year}-{semestre.date_fin.year}",
|
|
]
|
|
if avec_fid:
|
|
description.append(f"({semestre.formsemestre_id})")
|
|
|
|
return " ".join(description)
|
|
|
|
|
|
def etapes_du_cursus(semestres: dict[int, FormSemestre], nbre_etapes_max: int) -> list[str]:
|
|
"""Partant d'un dictionnaire de semestres (qui retrace
|
|
la scolarité d'un étudiant), liste les noms des
|
|
semestres (en version abbrégée)
|
|
qu'un étudiant a suivi au cours de sa scolarité à l'IUT.
|
|
Les noms des semestres sont renvoyés dans un dictionnaire
|
|
``{"etape i": nom_semestre_a_etape_i}``
|
|
avec i variant jusqu'à nbre_semestres_max. (S'il n'y a pas de semestre à l'étape i,
|
|
le nom affiché est vide.
|
|
|
|
La fonction suppose la liste des semestres triées par ordre
|
|
décroissant de date.
|
|
|
|
Args:
|
|
semestres: une liste de ``FormSemestre``
|
|
nbre_etapes_max: le nombre d'étapes max prise en compte
|
|
|
|
Returns:
|
|
Une liste de nom de semestre (dans le même ordre que les ``semestres``)
|
|
|
|
See also:
|
|
app.pe.pe_affichage.nom_semestre_etape
|
|
"""
|
|
assert len(semestres) <= nbre_etapes_max
|
|
|
|
noms = [nom_semestre_etape(sem, avec_fid=False) for (fid, sem) in semestres.items()]
|
|
noms = noms[::-1] # trie par ordre croissant
|
|
|
|
dico = {f"Etape {i+1}": "" for i in range(nbre_etapes_max)}
|
|
for (i, nom) in enumerate(noms): # Charge les noms de semestres
|
|
dico[f"Etape {i+1}"] = nom
|
|
return dico
|