forked from ScoDoc/ScoDoc
132 lines
3.8 KiB
Python
132 lines
3.8 KiB
Python
##############################################################################
|
|
# Module "Avis de poursuite d'étude"
|
|
# conçu et développé par Cléo Baras (IUT de Grenoble)
|
|
##############################################################################
|
|
|
|
"""
|
|
Created on 01-2024
|
|
|
|
@author: barasc
|
|
"""
|
|
|
|
from app.models import FormSemestre
|
|
|
|
TYPES_RCS = {
|
|
"S1": {
|
|
"aggregat": ["S1"],
|
|
"descr": "Semestre 1 (S1)",
|
|
},
|
|
"S2": {
|
|
"aggregat": ["S2"],
|
|
"descr": "Semestre 2 (S2)",
|
|
},
|
|
"1A": {
|
|
"aggregat": ["S1", "S2"],
|
|
"descr": "BUT1 (S1+S2)",
|
|
},
|
|
"S3": {
|
|
"aggregat": ["S3"],
|
|
"descr": "Semestre 3 (S3)",
|
|
},
|
|
"S4": {
|
|
"aggregat": ["S4"],
|
|
"descr": "Semestre 4 (S4)",
|
|
},
|
|
"2A": {
|
|
"aggregat": ["S3", "S4"],
|
|
"descr": "BUT2 (S3+S4)",
|
|
},
|
|
"3S": {
|
|
"aggregat": ["S1", "S2", "S3"],
|
|
"descr": "Moyenne du S1 au S3 (S1+S2+S3)",
|
|
},
|
|
"4S": {
|
|
"aggregat": ["S1", "S2", "S3", "S4"],
|
|
"descr": "Moyenne du S1 au S4 (S1+S2+S3+S4)",
|
|
},
|
|
"S5": {
|
|
"aggregat": ["S5"],
|
|
"descr": "Semestre 5 (S5)",
|
|
},
|
|
"S6": {
|
|
"aggregat": ["S6"],
|
|
"descr": "Semestre 6 (S6)",
|
|
},
|
|
"3A": {
|
|
"aggregat": ["S5", "S6"],
|
|
"descr": "BUT3 (S5+S6)",
|
|
},
|
|
"5S": {
|
|
"aggregat": ["S1", "S2", "S3", "S4", "S5"],
|
|
"descr": "Moyenne du S1 au S5 (S1+S2+S3+S4+S5)",
|
|
},
|
|
"6S": {
|
|
"aggregat": ["S1", "S2", "S3", "S4", "S5", "S6"],
|
|
"descr": "Moyenne globale (S1+S2+S3+S4+S5+S6)",
|
|
},
|
|
}
|
|
"""Dictionnaire détaillant les différents regroupements cohérents
|
|
de semestres (RCS), en leur attribuant un nom et en détaillant
|
|
le nom des semestres qu'ils regroupent et l'affichage qui en sera fait
|
|
dans les tableurs de synthèse.
|
|
"""
|
|
|
|
TOUS_LES_RCS_AVEC_PLUSIEURS_SEM = [cle for cle in TYPES_RCS if not cle.startswith("S")]
|
|
TOUS_LES_RCS = list(TYPES_RCS.keys())
|
|
TOUS_LES_SEMESTRES = [cle for cle in TYPES_RCS if cle.startswith("S")]
|
|
|
|
|
|
def get_descr_rcs(nom_rcs: str) -> str:
|
|
"""Renvoie la description pour les tableurs de synthèse
|
|
Excel d'un nom de RCS"""
|
|
return TYPES_RCS[nom_rcs]["descr"]
|
|
|
|
|
|
class RCS:
|
|
"""Modélise un regroupement cohérent de semestres,
|
|
tous se terminant par un (form)semestre final.
|
|
"""
|
|
|
|
def __init__(self, nom: str, semestre_final: FormSemestre):
|
|
self.nom: str = nom
|
|
"""Nom du RCS"""
|
|
assert self.nom in TOUS_LES_RCS, "Le nom d'un RCS doit être un aggrégat"
|
|
|
|
self.aggregat: list[str] = TYPES_RCS[nom]["aggregat"]
|
|
"""Aggrégat (liste des nom des semestres aggrégés)"""
|
|
|
|
self.formsemestre_final: FormSemestre = semestre_final
|
|
"""(Form)Semestre final du RCS"""
|
|
|
|
self.rang_final = self.formsemestre_final.semestre_id
|
|
"""Rang du formsemestre final"""
|
|
|
|
self.rcs_id: (str, int) = (nom, semestre_final.formsemestre_id)
|
|
"""Identifiant du RCS sous forme (nom_rcs, id du semestre_terminal)"""
|
|
|
|
self.fid_final: int = self.formsemestre_final.formsemestre_id
|
|
"""Identifiant du (Form)Semestre final"""
|
|
|
|
def get_formsemestre_id_final(self) -> int:
|
|
"""Renvoie l'identifiant du formsemestre final du RCS
|
|
|
|
Returns:
|
|
L'id du formsemestre final (marquant la fin) du RCS
|
|
"""
|
|
return self.formsemestre_final.formsemestre_id
|
|
|
|
def __str__(self):
|
|
"""Représentation textuelle d'un RCS"""
|
|
return f"{self.nom}[#{self.formsemestre_final.formsemestre_id}✟{self.formsemestre_final.date_fin.year}]"
|
|
|
|
def get_repr(self, verbose=True):
|
|
"""Représentation textuelle d'un RCS"""
|
|
return self.__str__()
|
|
|
|
def __eq__(self, other):
|
|
"""Egalité de RCS"""
|
|
return (
|
|
self.nom == other.nom
|
|
and self.formsemestre_final == other.formsemestre_final
|
|
)
|