from app.models import FormSemestre import app.pe.rcss.pe_rcs as pe_rcs class RCF(pe_rcs.RCS): """Modélise un ensemble de (form)semestres d'étudiants associé à un type de regroupement cohérent de semestres donné (par ex: 'S2', '3S', '2A'). Si le RCF est un semestre de type Si, stocke les formsemestres de numéro i qu'ont suivi l'étudiant pour atteindre le Si (en général 1 si personnes n'a redoublé, mais 2 s'il y a des redoublants) Pour le RCF de type iS ou iA (par ex, 3A=S1+S2+S3), identifie les semestres que les étudiants ont suivis pour les amener jusqu'au semestre terminal du RCS (par ex: ici un S3). Ces semestres peuvent être : * des S1+S2+S1+S2+S3 si redoublement de la 1ère année * des S1+S2+(année de césure)+S3 si césure, ... Args: nom_rcs: Un nom du RCS (par ex: '5S') semestre_final: Le formsemestre final du RCS """ def __init__(self, nom_rcs: str, semestre_final: FormSemestre): pe_rcs.RCS.__init__(self, nom_rcs, semestre_final) self.semestres_aggreges: dict[int:FormSemestre] = {} """Formsemestres regroupés dans le RCS""" def add_semestres_a_aggreger(self, semestres: dict[int:FormSemestre]): """Ajout de semestres aux semestres à regrouper Args: semestres: Dictionnaire ``{fid: Formsemestre)`` """ self.semestres_aggreges = self.semestres_aggreges | semestres def get_repr(self, verbose=True) -> str: """Représentation textuelle d'un RCS basé sur ses semestres aggrégés""" title = f"""{self.__class__.__name__} {pe_rcs.RCS.__str__(self)}""" if verbose: noms = [] for fid in self.semestres_aggreges: semestre = self.semestres_aggreges[fid] noms.append(f"S{semestre.semestre_id}(#{fid})") noms = sorted(noms) if noms: title += " <" + "+".join(noms) + ">" else: title += " " return title