forked from ScoDoc/ScoDoc
58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
|
|
||
|
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 += " <vide>"
|
||
|
return title
|