forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -380,14 +380,24 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
sco_codes.ADJ,
|
sco_codes.ADJ,
|
||||||
] + self.codes
|
] + self.codes
|
||||||
explanation += f" et {self.nb_rcues_under_8} < 8"
|
explanation += f" et {self.nb_rcues_under_8} < 8"
|
||||||
else:
|
else: # autres cas: non admis, non passage, non dem, pas la moitié des rcue:
|
||||||
self.codes = [
|
if formsemestre.semestre_id % 2 and self.formsemestre_pair is None:
|
||||||
sco_codes.RED,
|
# Si jury sur un seul semestre impair, ne propose pas redoublement
|
||||||
sco_codes.NAR,
|
# et efface décision éventuellement existante
|
||||||
sco_codes.PAS1NCI,
|
codes = [None]
|
||||||
sco_codes.ADJ,
|
else:
|
||||||
sco_codes.PASD, # voir #488 (discutable, conventions locales)
|
codes = []
|
||||||
] + self.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
|
explanation += f""" et {self.nb_rcues_under_8
|
||||||
} niveau{'x' if self.nb_rcues_under_8 > 1 else ''} < 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)
|
"""Les deux formsemestres auquel est inscrit l'étudiant (ni DEM ni DEF)
|
||||||
du niveau auquel appartient formsemestre.
|
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 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
|
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
|
return None, None
|
||||||
|
|
||||||
if formsemestre.semestre_id % 2:
|
if formsemestre.semestre_id % 2:
|
||||||
idx_autre = formsemestre.semestre_id + 1
|
idx_autre = formsemestre.semestre_id + 1 # impair, autre = suivant
|
||||||
else:
|
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:
|
# Cherche l'autre semestre de la même année scolaire:
|
||||||
autre_formsemestre = None
|
autre_formsemestre = None
|
||||||
@ -610,6 +620,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
def next_semestre_ids(self, code: str) -> set[int]:
|
def next_semestre_ids(self, code: str) -> set[int]:
|
||||||
"""Les indices des semestres dans lequels l'étudiant est autorisé
|
"""Les indices des semestres dans lequels l'étudiant est autorisé
|
||||||
à poursuivre après le semestre courant.
|
à 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
|
# La poursuite d'études dans un semestre pair d'une même année
|
||||||
# est de droit pour tout étudiant.
|
# 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,
|
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.
|
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")
|
log("jury_but.DecisionsProposeesAnnee.record_form")
|
||||||
code_annee = self.codes[0] # si pas dans le form, valeur par defaut
|
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:
|
def record(self, code: str, mark_recorded: bool = True) -> bool:
|
||||||
"""Enregistre le code de l'année, et au besoin l'autorisation d'inscription.
|
"""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 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
|
Si mark_recorded est vrai, positionne self.recorded
|
||||||
"""
|
"""
|
||||||
if self.inscription_etat != scu.INSCRIT:
|
if self.inscription_etat != scu.INSCRIT:
|
||||||
@ -746,7 +760,9 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def record_autorisation_inscription(self, code: str):
|
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:
|
if self.autorisations_recorded:
|
||||||
return
|
return
|
||||||
if self.inscription_etat != scu.INSCRIT:
|
if self.inscription_etat != scu.INSCRIT:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.6.83"
|
SCOVERSION = "9.6.84"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Essais avec un BUT GEII, 2 UE en BUT1 / 4 UE en BUT2-BUT3 et 3 parcours
|
# Essais avec un BUT GEII, 2 UE en BUT1 / 4 UE en BUT2-BUT3 et 3 parcours
|
||||||
# Contrib Pascal B.
|
# Contrib Pascal B.
|
||||||
# Voir tests/unit/test_but_jury.py
|
# 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:
|
ReferentielCompetences:
|
||||||
@ -1407,3 +1407,25 @@ Etudiants:
|
|||||||
notes_modules: # combinaison pour avoir ADM ADM ADM AJ
|
notes_modules: # combinaison pour avoir ADM ADM ADM AJ
|
||||||
"PF4": 12
|
"PF4": 12
|
||||||
"SAE4AII": 8
|
"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"):
|
for attr in ("passage_de_droit", "code_valide", "nb_competences"):
|
||||||
if attr in deca_att:
|
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:
|
if "decisions_ues" in deca_att:
|
||||||
but_check_decisions_ues(deca.decisions_ues, deca_att["decisions_ues"])
|
but_check_decisions_ues(deca.decisions_ues, deca_att["decisions_ues"])
|
||||||
|
Loading…
Reference in New Issue
Block a user