Fix: cas BUT semestre sans parcours mais UE avec parcours.

This commit is contained in:
Emmanuel Viennet 2023-05-15 11:05:51 +02:00 committed by iziram
parent 730f2e9cb7
commit af94a2a727
3 changed files with 10 additions and 9 deletions

View File

@ -230,7 +230,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
} }
self.etuds_parcour_id = etuds_parcour_id self.etuds_parcour_id = etuds_parcour_id
ue_ids = [ue.id for ue in self.ues if ue.type != UE_SPORT] 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: if self.formsemestre.formation.referentiel_competence is None:
return pd.DataFrame( return pd.DataFrame(
1.0, index=etuds_parcour_id.keys(), columns=ue_ids, dtype=float 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 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 # 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} ue_by_parcours = {} # parcours_id : {ue_id:0|1}
for ( for (
parcour parcour
@ -250,6 +253,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
for ue in self.formsemestre.formation.query_ues_parcour(parcour).filter( for ue in self.formsemestre.formation.query_ues_parcour(parcour).filter(
UniteEns.semestre_idx == self.formsemestre.semestre_id UniteEns.semestre_idx == self.formsemestre.semestre_id
) )
if ue.id in ue_ids_set
} }
# #
for etudid in etuds_parcour_id: for etudid in etuds_parcour_id:

View File

@ -216,8 +216,8 @@ class Formation(db.Model):
def query_ues_parcour( def query_ues_parcour(
self, parcour: ApcParcours, with_sport: bool = False self, parcour: ApcParcours, with_sport: bool = False
) -> flask_sqlalchemy.BaseQuery: ) -> Query:
"""Les UEs (non bonus) d'un parcours de la formation """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) (déclarée comme faisant partie du parcours ou du tronc commun, sans aucun parcours)
Si parcour est None, les UE sans parcours. Si parcour est None, les UE sans parcours.
Exemple: pour avoir les UE du semestre 3, faire Exemple: pour avoir les UE du semestre 3, faire

View File

@ -15,10 +15,8 @@ from functools import cached_property
from operator import attrgetter from operator import attrgetter
from flask_login import current_user from flask_login import current_user
from flask_sqlalchemy.query import Query
from flask import flash, g from flask import flash, g
from sqlalchemy import and_, or_
from sqlalchemy.sql import text from sqlalchemy.sql import text
import app.scodoc.sco_utils as scu import app.scodoc.sco_utils as scu
@ -26,10 +24,7 @@ from app import db, log
from app.auth.models import User from app.auth.models import User
from app.models import APO_CODE_STR_LEN, CODE_STR_LEN, SHORT_STR_LEN from app.models import APO_CODE_STR_LEN, CODE_STR_LEN, SHORT_STR_LEN
from app.models.but_refcomp import ( from app.models.but_refcomp import (
ApcAnneeParcours,
ApcNiveau,
ApcParcours, ApcParcours,
ApcParcoursNiveauCompetence,
ApcReferentielCompetences, ApcReferentielCompetences,
parcours_formsemestre, parcours_formsemestre,
) )
@ -298,12 +293,14 @@ class FormSemestre(db.Model):
""" """
formation: Formation = self.formation formation: Formation = self.formation
if formation.is_apc(): if formation.is_apc():
# UEs de tronc commun (sans parcours indiqué)
sem_ues = { sem_ues = {
ue.id: ue ue.id: ue
for ue in formation.query_ues_parcour( for ue in formation.query_ues_parcour(
None, with_sport=with_sport None, with_sport=with_sport
).filter(UniteEns.semestre_idx == self.semestre_id) ).filter(UniteEns.semestre_idx == self.semestre_id)
} }
# Ajoute les UE de parcours
for parcour in self.parcours: for parcour in self.parcours:
sem_ues.update( sem_ues.update(
{ {