forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -380,14 +380,24 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
sco_codes.ADJ,
|
||||
] + self.codes
|
||||
explanation += f" et {self.nb_rcues_under_8} < 8"
|
||||
else:
|
||||
self.codes = [
|
||||
sco_codes.RED,
|
||||
sco_codes.NAR,
|
||||
sco_codes.PAS1NCI,
|
||||
sco_codes.ADJ,
|
||||
sco_codes.PASD, # voir #488 (discutable, conventions locales)
|
||||
] + self.codes
|
||||
else: # autres cas: non admis, non passage, non dem, pas la moitié des rcue:
|
||||
if formsemestre.semestre_id % 2 and self.formsemestre_pair is None:
|
||||
# Si jury sur un seul semestre impair, ne propose pas redoublement
|
||||
# et efface décision éventuellement existante
|
||||
codes = [None]
|
||||
else:
|
||||
codes = []
|
||||
self.codes = (
|
||||
codes
|
||||
+ [
|
||||
sco_codes.RED,
|
||||
sco_codes.NAR,
|
||||
sco_codes.PAS1NCI,
|
||||
sco_codes.ADJ,
|
||||
sco_codes.PASD, # voir #488 (discutable, conventions locales)
|
||||
]
|
||||
+ self.codes
|
||||
)
|
||||
explanation += f""" et {self.nb_rcues_under_8
|
||||
} niveau{'x' if self.nb_rcues_under_8 > 1 else ''} < 8"""
|
||||
|
||||
@ -514,7 +524,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
"""Les deux formsemestres auquel est inscrit l'étudiant (ni DEM ni DEF)
|
||||
du niveau auquel appartient formsemestre.
|
||||
|
||||
-> S_impair, S_pair
|
||||
-> S_impair, S_pair (de la même année scolaire)
|
||||
|
||||
Si l'origine est impair, S_impair est l'origine et S_pair est None
|
||||
Si l'origine est paire, S_pair est l'origine, et S_impair l'antérieur
|
||||
@ -524,9 +534,9 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
return None, None
|
||||
|
||||
if formsemestre.semestre_id % 2:
|
||||
idx_autre = formsemestre.semestre_id + 1
|
||||
idx_autre = formsemestre.semestre_id + 1 # impair, autre = suivant
|
||||
else:
|
||||
idx_autre = formsemestre.semestre_id - 1
|
||||
idx_autre = formsemestre.semestre_id - 1 # pair: autre = précédent
|
||||
|
||||
# Cherche l'autre semestre de la même année scolaire:
|
||||
autre_formsemestre = None
|
||||
@ -610,6 +620,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
def next_semestre_ids(self, code: str) -> set[int]:
|
||||
"""Les indices des semestres dans lequels l'étudiant est autorisé
|
||||
à poursuivre après le semestre courant.
|
||||
code: code jury sur année BUT
|
||||
"""
|
||||
# La poursuite d'études dans un semestre pair d'une même année
|
||||
# est de droit pour tout étudiant.
|
||||
@ -653,6 +664,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
|
||||
Si les code_rcue et le code_annee ne sont pas fournis,
|
||||
et qu'il n'y en a pas déjà, enregistre ceux par défaut.
|
||||
|
||||
Si le code_annee est None, efface le code déjà enregistré.
|
||||
"""
|
||||
log("jury_but.DecisionsProposeesAnnee.record_form")
|
||||
code_annee = self.codes[0] # si pas dans le form, valeur par defaut
|
||||
@ -697,6 +710,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
def record(self, code: str, mark_recorded: bool = True) -> bool:
|
||||
"""Enregistre le code de l'année, et au besoin l'autorisation d'inscription.
|
||||
Si l'étudiant est DEM ou DEF, ne fait rien.
|
||||
Si le code est None, efface le code déjà enregistré.
|
||||
Si mark_recorded est vrai, positionne self.recorded
|
||||
"""
|
||||
if self.inscription_etat != scu.INSCRIT:
|
||||
@ -746,7 +760,9 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
return True
|
||||
|
||||
def record_autorisation_inscription(self, code: str):
|
||||
"""Autorisation d'inscription dans semestre suivant"""
|
||||
"""Autorisation d'inscription dans semestre suivant.
|
||||
code: code jury sur année BUT
|
||||
"""
|
||||
if self.autorisations_recorded:
|
||||
return
|
||||
if self.inscription_etat != scu.INSCRIT:
|
||||
|
@ -1,7 +1,7 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "9.6.83"
|
||||
SCOVERSION = "9.6.84"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Essais avec un BUT GEII, 2 UE en BUT1 / 4 UE en BUT2-BUT3 et 3 parcours
|
||||
# Contrib Pascal B.
|
||||
# Voir tests/unit/test_but_jury.py
|
||||
# pytest --pdb -m lyon tests/unit/test_but_jury.py
|
||||
# pytest -x --pdb -m lyon tests/unit/test_but_jury.py
|
||||
|
||||
|
||||
ReferentielCompetences:
|
||||
@ -1407,3 +1407,25 @@ Etudiants:
|
||||
notes_modules: # combinaison pour avoir ADM ADM ADM AJ
|
||||
"PF4": 12
|
||||
"SAE4AII": 8
|
||||
# Test code annuel après un seul semestre
|
||||
geiiS10:
|
||||
prenom: "etugeiiS100 un semestre"
|
||||
civilite: M
|
||||
formsemestres:
|
||||
S1:
|
||||
notes_modules: # on joue avec les SAE seulement car elles sont "diagonales"
|
||||
"S1.1": 18.0000
|
||||
"S1.2": 19.0000
|
||||
attendu: # les codes jury que l'on doit vérifier
|
||||
deca:
|
||||
passage_de_droit: False
|
||||
code_valide: "" # le code "annuel" BUT proposé en auto: aucun
|
||||
nb_competences: 2
|
||||
nb_rcue_annee: 0
|
||||
decisions_ues:
|
||||
"UE11":
|
||||
code_valide: ADM
|
||||
moy_ue: 18.0000
|
||||
"UE12":
|
||||
code_valide: ADM
|
||||
moy_ue: 19.0000
|
||||
|
@ -242,7 +242,9 @@ def but_compare_decisions_annee(deca: DecisionsProposeesAnnee, deca_att: dict):
|
||||
|
||||
for attr in ("passage_de_droit", "code_valide", "nb_competences"):
|
||||
if attr in deca_att:
|
||||
assert getattr(deca, attr) == deca_att[attr]
|
||||
assert getattr(deca, attr) == (
|
||||
deca_att[attr] if deca_att[attr] != "" else None
|
||||
)
|
||||
|
||||
if "decisions_ues" in deca_att:
|
||||
but_check_decisions_ues(deca.decisions_ues, deca_att["decisions_ues"])
|
||||
|
Loading…
Reference in New Issue
Block a user