From ad4e4e33ec71dddef78c74b5e63604f15d8b34ad Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 1 Jul 2023 08:21:40 +0200 Subject: [PATCH] Calcul ECTS dans le parcours BUT --- app/but/cursus_but.py | 24 ++++++++++++++++-------- sco_version.py | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py index 6591592a94..622cdbb002 100644 --- a/app/but/cursus_but.py +++ b/app/but/cursus_but.py @@ -43,7 +43,7 @@ from app.models.formsemestre import FormSemestre, FormSemestreInscription from app.models.ues import UniteEns from app.models.validations import ScolarFormSemestreValidation from app.scodoc import codes_cursus as sco_codes -from app.scodoc.codes_cursus import code_ue_validant, RED, UE_STANDARD +from app.scodoc.codes_cursus import code_ue_validant, CODES_UE_VALIDES from app.scodoc import sco_utils as scu from app.scodoc.sco_exceptions import ScoNoReferentielCompetences, ScoValueError @@ -365,18 +365,26 @@ class FormSemestreCursusBUT: 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) + """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 même en cas de redoublement avec re-validation. + """ + validations = ( + 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()) + ) + + ects_dict = {} + for v in validations: + key = (v.ue.semestre_idx, v.ue.niveau_competence.id) + if v.code in CODES_UE_VALIDES: + ects_dict[key] = v.ue.ects + + return sum(ects_dict.values()) if ects_dict else 0.0 def etud_ues_de_but1_non_validees( diff --git a/sco_version.py b/sco_version.py index aa68bec3df..5b9938cf98 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.4.94" +SCOVERSION = "9.4.95" SCONAME = "ScoDoc"