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 # Affichage dans le tableur pe en cas d'absence de notes SANS_NOTE = "-" 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