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
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:

View File

@ -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

View File

@ -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(
{