Jury BUT: décisions lorsque démission sur un semestre
This commit is contained in:
parent
678959c76a
commit
75c5256ba9
@ -233,6 +233,17 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
self.rcues_annee = []
|
self.rcues_annee = []
|
||||||
"RCUEs de l'année"
|
"RCUEs de l'année"
|
||||||
self.inscription_etat = etud.inscription_etat(formsemestre_last.id)
|
self.inscription_etat = etud.inscription_etat(formsemestre_last.id)
|
||||||
|
"état de l'inscription dans le semestre le plus avancé (pair si année complète)"
|
||||||
|
self.inscription_etat_pair = (
|
||||||
|
etud.inscription_etat(formsemestre_pair.id)
|
||||||
|
if formsemestre_pair is not None
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
self.inscription_etat_impair = (
|
||||||
|
etud.inscription_etat(formsemestre_impair.id)
|
||||||
|
if formsemestre_impair is not None
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
|
||||||
if self.formsemestre_impair is not None:
|
if self.formsemestre_impair is not None:
|
||||||
self.validation = ApcValidationAnnee.query.filter_by(
|
self.validation = ApcValidationAnnee.query.filter_by(
|
||||||
@ -262,7 +273,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
self.ues_impair, self.ues_pair = self.compute_ues_annee() # pylint: disable=all
|
self.ues_impair, self.ues_pair = self.compute_ues_annee() # pylint: disable=all
|
||||||
self.decisions_ues = {
|
self.decisions_ues = {
|
||||||
ue.id: DecisionsProposeesUE(
|
ue.id: DecisionsProposeesUE(
|
||||||
etud, formsemestre_impair, ue, self.inscription_etat
|
etud, formsemestre_impair, ue, self.inscription_etat_impair
|
||||||
)
|
)
|
||||||
for ue in self.ues_impair
|
for ue in self.ues_impair
|
||||||
}
|
}
|
||||||
@ -270,7 +281,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
self.decisions_ues.update(
|
self.decisions_ues.update(
|
||||||
{
|
{
|
||||||
ue.id: DecisionsProposeesUE(
|
ue.id: DecisionsProposeesUE(
|
||||||
etud, formsemestre_pair, ue, self.inscription_etat
|
etud, formsemestre_pair, ue, self.inscription_etat_pair
|
||||||
)
|
)
|
||||||
for ue in self.ues_pair
|
for ue in self.ues_pair
|
||||||
}
|
}
|
||||||
@ -453,7 +464,6 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
"""UEs à valider cette année pour cet étudiant, selon son parcours.
|
"""UEs à valider cette année pour cet étudiant, selon son parcours.
|
||||||
Ramène [ listes des UE du semestre impair, liste des UE du semestre pair ].
|
Ramène [ listes des UE du semestre impair, liste des UE du semestre pair ].
|
||||||
"""
|
"""
|
||||||
etudid = self.etud.id
|
|
||||||
ues_sems = []
|
ues_sems = []
|
||||||
for (formsemestre, res) in (
|
for (formsemestre, res) in (
|
||||||
(self.formsemestre_impair, self.res_impair),
|
(self.formsemestre_impair, self.res_impair),
|
||||||
@ -607,7 +617,10 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
def record(self, code: str, no_overwrite=False):
|
def record(self, code: str, no_overwrite=False):
|
||||||
"""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 no_overwrite, ne fait rien si un code est déjà enregistré.
|
Si no_overwrite, ne fait rien si un code est déjà enregistré.
|
||||||
|
Si l'étudiant est DEM ou DEF, ne fait rien.
|
||||||
"""
|
"""
|
||||||
|
if self.inscription_etat != scu.INSCRIT:
|
||||||
|
return
|
||||||
if code and not code in self.codes:
|
if code and not code in self.codes:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
f"code annee <tt>{html.escape(code)}</tt> invalide pour formsemestre {html.escape(self.formsemestre)}"
|
f"code annee <tt>{html.escape(code)}</tt> invalide pour formsemestre {html.escape(self.formsemestre)}"
|
||||||
@ -664,7 +677,9 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
sco_cache.invalidate_formsemestre(formsemestre_id=self.formsemestre_pair.id)
|
sco_cache.invalidate_formsemestre(formsemestre_id=self.formsemestre_pair.id)
|
||||||
|
|
||||||
def record_all(self):
|
def record_all(self):
|
||||||
"""Enregistre les codes qui n'ont pas été spécifiés par le formulaire, et sont donc en mode "automatique" """
|
"""Enregistre les codes qui n'ont pas été spécifiés par le formulaire,
|
||||||
|
et sont donc en mode "automatique"
|
||||||
|
"""
|
||||||
decisions = (
|
decisions = (
|
||||||
list(self.decisions_ues.values())
|
list(self.decisions_ues.values())
|
||||||
+ list(self.decisions_rcue_by_niveau.values())
|
+ list(self.decisions_rcue_by_niveau.values())
|
||||||
@ -681,6 +696,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
"""Efface les décisions de jury de cet étudiant
|
"""Efface les décisions de jury de cet étudiant
|
||||||
pour cette année: décisions d'UE, de RCUE, d'année,
|
pour cette année: décisions d'UE, de RCUE, d'année,
|
||||||
et autorisations d'inscription émises.
|
et autorisations d'inscription émises.
|
||||||
|
Efface même si étudiant DEM ou DEF.
|
||||||
"""
|
"""
|
||||||
if only_one_sem:
|
if only_one_sem:
|
||||||
# N'efface que les autorisations venant de ce semestre,
|
# N'efface que les autorisations venant de ce semestre,
|
||||||
@ -831,6 +847,10 @@ class DecisionsProposeesRCUE(DecisionsProposees):
|
|||||||
|
|
||||||
def record(self, code: str, no_overwrite=False):
|
def record(self, code: str, no_overwrite=False):
|
||||||
"""Enregistre le code"""
|
"""Enregistre le code"""
|
||||||
|
if self.rcue is None:
|
||||||
|
return # pas de RCUE a enregistrer
|
||||||
|
if self.inscription_etat != scu.INSCRIT:
|
||||||
|
return
|
||||||
if code and not code in self.codes:
|
if code and not code in self.codes:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
f"code UE invalide pour ue_id={self.ue.id}: {html.escape(code)}"
|
f"code UE invalide pour ue_id={self.ue.id}: {html.escape(code)}"
|
||||||
@ -845,6 +865,9 @@ class DecisionsProposeesRCUE(DecisionsProposees):
|
|||||||
if code is None:
|
if code is None:
|
||||||
self.validation = None
|
self.validation = None
|
||||||
else:
|
else:
|
||||||
|
# log(
|
||||||
|
# f"RCUE.record(etudid={self.etud.id}, ue1_id={self.rcue.ue_1.id}, ue2_id={self.rcue.ue_2.id}, code={code} )"
|
||||||
|
# )
|
||||||
self.validation = ApcValidationRCUE(
|
self.validation = ApcValidationRCUE(
|
||||||
etudid=self.etud.id,
|
etudid=self.etud.id,
|
||||||
formsemestre_id=self.rcue.formsemestre_2.id,
|
formsemestre_id=self.rcue.formsemestre_2.id,
|
||||||
@ -940,7 +963,7 @@ class DecisionsProposeesUE(DecisionsProposees):
|
|||||||
self.rcue: RegroupementCoherentUE = None
|
self.rcue: RegroupementCoherentUE = None
|
||||||
"Le rcue auquel est rattaché cette UE, ou None"
|
"Le rcue auquel est rattaché cette UE, ou None"
|
||||||
self.inscription_etat = inscription_etat
|
self.inscription_etat = inscription_etat
|
||||||
"inscription: I, DEM, DEF"
|
"inscription: I, DEM, DEF dans le semestre de cette UE"
|
||||||
if ue.type == sco_codes.UE_SPORT:
|
if ue.type == sco_codes.UE_SPORT:
|
||||||
self.explanation = "UE bonus, pas de décision de jury"
|
self.explanation = "UE bonus, pas de décision de jury"
|
||||||
self.codes = [] # aucun code proposé
|
self.codes = [] # aucun code proposé
|
||||||
|
@ -82,7 +82,8 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
|
|||||||
H.append(
|
H.append(
|
||||||
_gen_but_niveau_ue(
|
_gen_but_niveau_ue(
|
||||||
dec_rcue.rcue.ue_1,
|
dec_rcue.rcue.ue_1,
|
||||||
dec_rcue.rcue.moy_ue_1,
|
deca.decisions_ues[dec_rcue.rcue.ue_1.id].moy_ue,
|
||||||
|
# dec_rcue.rcue.moy_ue_1,
|
||||||
deca.decisions_ues[dec_rcue.rcue.ue_1.id],
|
deca.decisions_ues[dec_rcue.rcue.ue_1.id],
|
||||||
disabled=read_only,
|
disabled=read_only,
|
||||||
)
|
)
|
||||||
@ -91,7 +92,8 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
|
|||||||
H.append(
|
H.append(
|
||||||
_gen_but_niveau_ue(
|
_gen_but_niveau_ue(
|
||||||
dec_rcue.rcue.ue_2,
|
dec_rcue.rcue.ue_2,
|
||||||
dec_rcue.rcue.moy_ue_2,
|
deca.decisions_ues[dec_rcue.rcue.ue_2.id].moy_ue,
|
||||||
|
# dec_rcue.rcue.moy_ue_2,
|
||||||
deca.decisions_ues[dec_rcue.rcue.ue_2.id],
|
deca.decisions_ues[dec_rcue.rcue.ue_2.id],
|
||||||
disabled=read_only,
|
disabled=read_only,
|
||||||
)
|
)
|
||||||
|
@ -81,6 +81,12 @@ NOTES_ATTENTE = -1002.0 # note "en attente" (se calcule comme une note neutrali
|
|||||||
INSCRIT = "I"
|
INSCRIT = "I"
|
||||||
DEMISSION = "D"
|
DEMISSION = "D"
|
||||||
DEF = "DEF"
|
DEF = "DEF"
|
||||||
|
ETATS_INSCRIPTION = {
|
||||||
|
INSCRIT: "Inscrit",
|
||||||
|
DEMISSION: "Démission",
|
||||||
|
DEF: "Défaillant",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Types de modules
|
# Types de modules
|
||||||
class ModuleType(IntEnum):
|
class ModuleType(IntEnum):
|
||||||
|
@ -2370,6 +2370,12 @@ def formsemestre_validation_but(
|
|||||||
niveaux mais {len(deca.decisions_rcue_by_niveau)} regroupements RCUE.</div>"""
|
niveaux mais {len(deca.decisions_rcue_by_niveau)} regroupements RCUE.</div>"""
|
||||||
if deca.parcour is None:
|
if deca.parcour is None:
|
||||||
warning += """<div class="warning">L'étudiant n'est pas inscrit à un parcours.</div>"""
|
warning += """<div class="warning">L'étudiant n'est pas inscrit à un parcours.</div>"""
|
||||||
|
if deca.formsemestre_impair and deca.inscription_etat_impair != scu.INSCRIT:
|
||||||
|
etat_ins = scu.ETATS_INSCRIPTION.get(deca.inscription_etat_impair, "inconnu?")
|
||||||
|
warning += f"""<div class="warning">{etat_ins} en S{deca.formsemestre_impair.semestre_id}"""
|
||||||
|
if deca.formsemestre_pair and deca.inscription_etat_pair != scu.INSCRIT:
|
||||||
|
etat_ins = scu.ETATS_INSCRIPTION.get(deca.inscription_etat_pair, "inconnu?")
|
||||||
|
warning += f"""<div class="warning">{etat_ins} en S{deca.formsemestre_pair.semestre_id}"""
|
||||||
H.append(
|
H.append(
|
||||||
f"""
|
f"""
|
||||||
<div>
|
<div>
|
||||||
|
Loading…
Reference in New Issue
Block a user