forked from ScoDoc/ScoDoc
Modifie le calcul de l'ensemble des UE si aucun parcours BUT n'est coché: prend toutes.
This commit is contained in:
parent
0d9338dc0a
commit
e59fce5f6b
@ -257,10 +257,14 @@ class FormSemestre(db.Model):
|
|||||||
if self.formation.get_parcours().APC_SAE:
|
if self.formation.get_parcours().APC_SAE:
|
||||||
sem_ues = UniteEns.query.filter_by(
|
sem_ues = UniteEns.query.filter_by(
|
||||||
formation=self.formation, semestre_idx=self.semestre_id
|
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:
|
else:
|
||||||
sem_ues = db.session.query(UniteEns).filter(
|
sem_ues = db.session.query(UniteEns).filter(
|
||||||
ModuleImpl.formsemestre_id == self.id,
|
ModuleImpl.formsemestre_id == self.id,
|
||||||
|
@ -553,7 +553,10 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
|
|||||||
str(parcour.id) for parcour in ref_comp.parcours
|
str(parcour.id) for parcour in ref_comp.parcours
|
||||||
],
|
],
|
||||||
"explanation": """Parcours proposés dans ce semestre.
|
"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.
|
||||||
|
""",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -40,7 +40,7 @@ from app import log
|
|||||||
from app.comp import res_sem
|
from app.comp import res_sem
|
||||||
from app.comp.res_common import ResultatsSemestre
|
from app.comp.res_common import ResultatsSemestre
|
||||||
from app.comp.res_compat import NotesTableCompat
|
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.etudiants import Identite
|
||||||
from app.models.formsemestre import FormSemestre
|
from app.models.formsemestre import FormSemestre
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
@ -963,12 +963,12 @@ def html_expr_diagnostic(diagnostics):
|
|||||||
return "".join(H)
|
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" """
|
"""En-tête HTML des pages "semestre" """
|
||||||
sem = FormSemestre.query.get(formsemestre_id)
|
sem: FormSemestre = FormSemestre.query.get(formsemestre_id)
|
||||||
if not sem:
|
if not sem:
|
||||||
raise ScoValueError("Semestre inexistant (il a peut être été supprimé ?)")
|
raise ScoValueError("Semestre inexistant (il a peut être été supprimé ?)")
|
||||||
formation = sem.formation
|
formation: Formation = sem.formation
|
||||||
parcours = formation.get_parcours()
|
parcours = formation.get_parcours()
|
||||||
|
|
||||||
page_title = page_title or "Modules de "
|
page_title = page_title or "Modules de "
|
||||||
@ -996,11 +996,16 @@ def formsemestre_status_head(formsemestre_id=None, page_title=None):
|
|||||||
}</tt></b>)"""
|
}</tt></b>)"""
|
||||||
)
|
)
|
||||||
H.append("</td></tr>")
|
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(
|
H.append(
|
||||||
f"""
|
f"""
|
||||||
<tr><td class="fichetitre2">Parcours: </td>
|
<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>
|
</tr>
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
@ -130,22 +130,29 @@ FormSemestres:
|
|||||||
|
|
||||||
Etudiants:
|
Etudiants:
|
||||||
Aaaaa:
|
Aaaaa:
|
||||||
prenom: Étudiant
|
prenom: Étudiant_SEE
|
||||||
civilite: M
|
civilite: M
|
||||||
formsemestres:
|
formsemestres:
|
||||||
S1_SEE:
|
S1_SEE:
|
||||||
parcours: SEE
|
parcours: SEE
|
||||||
notes_modules:
|
notes_modules: # on joue avec les SAE seulement car elles sont "diagonales"
|
||||||
R1.01: 12
|
"SAÉ 1.01": 8 # UE11 ratée
|
||||||
R1.SEE.11: 15
|
"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:
|
deca:
|
||||||
codes_min: [ ]
|
codes_min: [ ]
|
||||||
S2_SEE:
|
S2_SEE:
|
||||||
parcours: 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:
|
S3:
|
||||||
parcours: SEE
|
parcours: SEE
|
||||||
Bbbbb:
|
Bbbbb:
|
||||||
prenom: Étudiante
|
prenom: Étudiante_BMB
|
||||||
civilite: F
|
civilite: F
|
||||||
formsemestres:
|
formsemestres:
|
||||||
S1_BMB:
|
S1_BMB:
|
||||||
|
@ -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.formsemestre_pair is None # jury de S1, pas de S2
|
||||||
assert deca.rcues_annee == [] # S1, pas de RCUEs
|
assert deca.rcues_annee == [] # S1, pas de RCUEs
|
||||||
assert deca.inscription_etat == scu.INSCRIT
|
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 deca.parcour == formsemestre.parcours[0] # un seul parcours dans ce sem.
|
||||||
assert formsemestre.query_ues().all() == deca.ues_impair
|
assert formsemestre.query_ues().all() == deca.ues_impair
|
||||||
nb_ues = formsemestre.query_ues().count()
|
nb_ues = formsemestre.query_ues().count()
|
||||||
@ -48,7 +48,9 @@ def test_but_jury_S3(test_client):
|
|||||||
app.set_sco_dept(DEPT)
|
app.set_sco_dept(DEPT)
|
||||||
doc = sty.setup_from_yaml("tests/unit/cursus_but_gb.yaml")
|
doc = sty.setup_from_yaml("tests/unit/cursus_but_gb.yaml")
|
||||||
formsemestre: FormSemestre = FormSemestre.query.filter_by(titre="S3").first()
|
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
|
assert etud
|
||||||
deca = DecisionsProposeesAnnee(etud, formsemestre)
|
deca = DecisionsProposeesAnnee(etud, formsemestre)
|
||||||
assert len(deca.niveaux_competences) == 5 # 5 compétences dans ce parcours
|
assert len(deca.niveaux_competences) == 5 # 5 compétences dans ce parcours
|
||||||
|
Loading…
Reference in New Issue
Block a user