diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py index 34a3295eb9..6591592a94 100644 --- a/app/but/cursus_but.py +++ b/app/but/cursus_but.py @@ -364,6 +364,21 @@ class FormSemestreCursusBUT: "cache { competence_id : competence }" +def but_ects_valides(etud: Identite, referentiel_competence_id: int) -> float: + "Nombre d'ECTS validés par etud dans le BUT de référentiel indiqué" + # ne prend que les UE associées à des niveaux de compétences, et ne les compte qu'une fois + ects_dict = { + (v.ue.semestre_idx, v.ue.niveau_competence.id): v.ue.ects + for v in ScolarFormSemestreValidation.query.filter_by(etudid=etud.id) + .filter(ScolarFormSemestreValidation.ue_id != None) + .join(UniteEns) + .join(ApcNiveau) + .join(ApcCompetence) + .filter_by(referentiel_id=referentiel_competence_id) + } + return sum(ects_dict.values()) + + def etud_ues_de_but1_non_validees( etud: Identite, formation: Formation, parcour: ApcParcours ) -> list[UniteEns]: diff --git a/app/but/jury_but_pv.py b/app/but/jury_but_pv.py index 29630af045..d0933c7a6c 100644 --- a/app/but/jury_but_pv.py +++ b/app/but/jury_but_pv.py @@ -12,6 +12,7 @@ from openpyxl.styles import Font, Border, Side, Alignment, PatternFill from app import log from app.but import jury_but +from app.but.cursus_but import but_ects_valides from app.models.etudiants import Identite from app.models.formsemestre import FormSemestre from app.scodoc.gen_tables import GenTable @@ -109,6 +110,11 @@ def pvjury_table_but( """ # remplace pour le BUT la fonction sco_pv_forms.pvjury_table annee_but = (formsemestre.semestre_id + 1) // 2 + referentiel_competence_id = formsemestre.formation.referentiel_competence_id + if referentiel_competence_id is None: + raise ScoValueError( + "pas de référentiel de compétences associé à la formation de ce semestre !" + ) titles = { "nom": "Code" if anonymous else "Nom", "cursus": "Cursus", @@ -153,7 +159,7 @@ def pvjury_table_but( etudid=etud.id, ), "cursus": _descr_cursus_but(etud), - "ects": f"{deca.ects_annee():g}", + "ects": f"""{deca.ects_annee():g}

Tot. {but_ects_valides(etud, referentiel_competence_id ):g}""", "ues": deca.descr_ues_validation(line_sep=line_sep) if deca else "-", "niveaux": deca.descr_niveaux_validation(line_sep=line_sep) if deca