diff --git a/app/comp/res_but.py b/app/comp/res_but.py index b9efebab..a7af9565 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -230,7 +230,7 @@ class ResultatsSemestreBUT(NotesTableCompat): } self.etuds_parcour_id = etuds_parcour_id ue_ids = [ue.id for ue in self.ues if ue.type != UE_SPORT] - + ue_ids_set = set(ue_ids) if self.formsemestre.formation.referentiel_competence is None: return pd.DataFrame( 1.0, index=etuds_parcour_id.keys(), columns=ue_ids, dtype=float @@ -240,7 +240,10 @@ class ResultatsSemestreBUT(NotesTableCompat): np.nan, index=etuds_parcour_id.keys(), columns=ue_ids, dtype=float ) # Construit pour chaque parcours du référentiel l'ensemble de ses UE - # (considère aussi le cas des semestres sans parcours: None) + # - considère aussi le cas des semestres sans parcours (clé parcour None) + # - retire les UEs qui ont un parcours mais qui ne sont pas dans l'un des + # parcours du semestre + ue_by_parcours = {} # parcours_id : {ue_id:0|1} for ( parcour @@ -250,6 +253,7 @@ class ResultatsSemestreBUT(NotesTableCompat): for ue in self.formsemestre.formation.query_ues_parcour(parcour).filter( UniteEns.semestre_idx == self.formsemestre.semestre_id ) + if ue.id in ue_ids_set } # for etudid in etuds_parcour_id: diff --git a/app/models/formations.py b/app/models/formations.py index f2074c3f..e98d66f7 100644 --- a/app/models/formations.py +++ b/app/models/formations.py @@ -216,8 +216,8 @@ class Formation(db.Model): def query_ues_parcour( self, parcour: ApcParcours, with_sport: bool = False - ) -> flask_sqlalchemy.BaseQuery: - """Les UEs (non bonus) d'un parcours de la formation + ) -> Query: + """Les UEs (sans bonus, sauf si with_sport) d'un parcours de la formation (déclarée comme faisant partie du parcours ou du tronc commun, sans aucun parcours) Si parcour est None, les UE sans parcours. Exemple: pour avoir les UE du semestre 3, faire diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py index b061b248..26bb5ac4 100644 --- a/app/models/formsemestre.py +++ b/app/models/formsemestre.py @@ -15,10 +15,8 @@ from functools import cached_property from operator import attrgetter from flask_login import current_user -from flask_sqlalchemy.query import Query from flask import flash, g -from sqlalchemy import and_, or_ from sqlalchemy.sql import text import app.scodoc.sco_utils as scu @@ -26,10 +24,7 @@ from app import db, log from app.auth.models import User from app.models import APO_CODE_STR_LEN, CODE_STR_LEN, SHORT_STR_LEN from app.models.but_refcomp import ( - ApcAnneeParcours, - ApcNiveau, ApcParcours, - ApcParcoursNiveauCompetence, ApcReferentielCompetences, parcours_formsemestre, ) @@ -298,12 +293,14 @@ class FormSemestre(db.Model): """ formation: Formation = self.formation if formation.is_apc(): + # UEs de tronc commun (sans parcours indiqué) sem_ues = { ue.id: ue for ue in formation.query_ues_parcour( None, with_sport=with_sport ).filter(UniteEns.semestre_idx == self.semestre_id) } + # Ajoute les UE de parcours for parcour in self.parcours: sem_ues.update( {