Modifie le calcul de l'ensemble des UE si aucun parcours BUT n'est coché: prend toutes.

This commit is contained in:
Emmanuel Viennet 2022-12-17 09:18:10 -03:00 committed by iziram
parent 0d9338dc0a
commit e59fce5f6b
5 changed files with 38 additions and 17 deletions

View File

@ -257,10 +257,14 @@ class FormSemestre(db.Model):
if self.formation.get_parcours().APC_SAE:
sem_ues = UniteEns.query.filter_by(
formation=self.formation, semestre_idx=self.semestre_id
).filter(
(UniteEns.parcour == None)
| (UniteEns.parcour_id.in_([p.id for p in self.parcours]))
)
if self.parcours:
# Prend toutes les UE de l'un des parcours du sem., ou déclarées sans parcours
sem_ues = sem_ues.filter(
(UniteEns.parcour == None)
| (UniteEns.parcour_id.in_([p.id for p in self.parcours]))
)
# si le sem. ne coche aucun parcours, prend toutes les UE
else:
sem_ues = db.session.query(UniteEns).filter(
ModuleImpl.formsemestre_id == self.id,

View File

@ -553,7 +553,10 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
str(parcour.id) for parcour in ref_comp.parcours
],
"explanation": """Parcours proposés dans ce semestre.
S'il s'agit d'un semestre de "tronc commun", ne pas indiquer de parcours.""",
S'il s'agit d'un semestre de "tronc commun", ne pas indiquer de parcours.
Attention, si aucun parcours n'est coché, toutes les UEs du
programme seront considérées, quel que soit leur parcours.
""",
},
)
]

View File

@ -40,7 +40,7 @@ from app import log
from app.comp import res_sem
from app.comp.res_common import ResultatsSemestre
from app.comp.res_compat import NotesTableCompat
from app.models import Evaluation, Module, ModuleImpl, NotesNotes
from app.models import Evaluation, Formation, Module, ModuleImpl, NotesNotes
from app.models.etudiants import Identite
from app.models.formsemestre import FormSemestre
import app.scodoc.sco_utils as scu
@ -963,12 +963,12 @@ def html_expr_diagnostic(diagnostics):
return "".join(H)
def formsemestre_status_head(formsemestre_id=None, page_title=None):
def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None):
"""En-tête HTML des pages "semestre" """
sem = FormSemestre.query.get(formsemestre_id)
sem: FormSemestre = FormSemestre.query.get(formsemestre_id)
if not sem:
raise ScoValueError("Semestre inexistant (il a peut être été supprimé ?)")
formation = sem.formation
formation: Formation = sem.formation
parcours = formation.get_parcours()
page_title = page_title or "Modules de "
@ -996,11 +996,16 @@ def formsemestre_status_head(formsemestre_id=None, page_title=None):
}</tt></b>)"""
)
H.append("</td></tr>")
if sem.parcours:
if formation.is_apc():
# Affiche les parcours BUT cochés. Si aucun, tous ceux du référentiel.
sem_parcours = sem.parcours or (
formation.referentiel_competence
and formation.referentiel_competence.parcours
)
H.append(
f"""
<tr><td class="fichetitre2">Parcours: </td>
<td style="color: blue;">{', '.join(parcours.code for parcours in sem.parcours)}</td>
<td style="color: blue;">{', '.join(parcours.code for parcours in sem_parcours)}</td>
</tr>
"""
)

View File

@ -130,22 +130,29 @@ FormSemestres:
Etudiants:
Aaaaa:
prenom: Étudiant
prenom: Étudiant_SEE
civilite: M
formsemestres:
S1_SEE:
parcours: SEE
notes_modules:
R1.01: 12
R1.SEE.11: 15
notes_modules: # on joue avec les SAE seulement car elles sont "diagonales"
"SAÉ 1.01": 8 # UE11 ratée
"SAÉ 1.02": 9 # UE12 ratée
"SAÉ 1.SEE.03": 18 # UE13 => sera capitalisée
"SAÉ 1.SEE.04": 7 # UE14 ratée
deca:
codes_min: [ ]
S2_SEE:
parcours: SEE
notes_modules: # on joue avec les SAE seulement
"SAE 21": 9 # UE21 ratée, pas le niveau de comp.
"SAE22": 12 # UE22 ok, emporte le niveau par compensation
"SAE23.SEE": 19 # UE23 ok
"SAE24.SEE": 12 # UE24 ok, mais ne compense pas
S3:
parcours: SEE
Bbbbb:
prenom: Étudiante
prenom: Étudiante_BMB
civilite: F
formsemestres:
S1_BMB:

View File

@ -33,7 +33,7 @@ def test_but_jury_S1(test_client):
assert deca.formsemestre_pair is None # jury de S1, pas de S2
assert deca.rcues_annee == [] # S1, pas de RCUEs
assert deca.inscription_etat == scu.INSCRIT
assert deca.inscription_etat_impair is None
assert deca.inscription_etat_impair == scu.INSCRIT
assert deca.parcour == formsemestre.parcours[0] # un seul parcours dans ce sem.
assert formsemestre.query_ues().all() == deca.ues_impair
nb_ues = formsemestre.query_ues().count()
@ -48,7 +48,9 @@ def test_but_jury_S3(test_client):
app.set_sco_dept(DEPT)
doc = sty.setup_from_yaml("tests/unit/cursus_but_gb.yaml")
formsemestre: FormSemestre = FormSemestre.query.filter_by(titre="S3").first()
etud: Identite = formsemestre.etuds.filter_by(nom="See1").first() # du parcours SEE
etud: Identite = formsemestre.etuds.filter_by(
prenom="Étudiant_SEE"
).first() # du parcours SEE
assert etud
deca = DecisionsProposeesAnnee(etud, formsemestre)
assert len(deca.niveaux_competences) == 5 # 5 compétences dans ce parcours