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 = []
|
||||
"RCUEs de l'année"
|
||||
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:
|
||||
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.decisions_ues = {
|
||||
ue.id: DecisionsProposeesUE(
|
||||
etud, formsemestre_impair, ue, self.inscription_etat
|
||||
etud, formsemestre_impair, ue, self.inscription_etat_impair
|
||||
)
|
||||
for ue in self.ues_impair
|
||||
}
|
||||
@ -270,7 +281,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
self.decisions_ues.update(
|
||||
{
|
||||
ue.id: DecisionsProposeesUE(
|
||||
etud, formsemestre_pair, ue, self.inscription_etat
|
||||
etud, formsemestre_pair, ue, self.inscription_etat_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.
|
||||
Ramène [ listes des UE du semestre impair, liste des UE du semestre pair ].
|
||||
"""
|
||||
etudid = self.etud.id
|
||||
ues_sems = []
|
||||
for (formsemestre, res) in (
|
||||
(self.formsemestre_impair, self.res_impair),
|
||||
@ -607,7 +617,10 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
def record(self, code: str, no_overwrite=False):
|
||||
"""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 l'étudiant est DEM ou DEF, ne fait rien.
|
||||
"""
|
||||
if self.inscription_etat != scu.INSCRIT:
|
||||
return
|
||||
if code and not code in self.codes:
|
||||
raise ScoValueError(
|
||||
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)
|
||||
|
||||
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 = (
|
||||
list(self.decisions_ues.values())
|
||||
+ list(self.decisions_rcue_by_niveau.values())
|
||||
@ -681,6 +696,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
"""Efface les décisions de jury de cet étudiant
|
||||
pour cette année: décisions d'UE, de RCUE, d'année,
|
||||
et autorisations d'inscription émises.
|
||||
Efface même si étudiant DEM ou DEF.
|
||||
"""
|
||||
if only_one_sem:
|
||||
# N'efface que les autorisations venant de ce semestre,
|
||||
@ -831,6 +847,10 @@ class DecisionsProposeesRCUE(DecisionsProposees):
|
||||
|
||||
def record(self, code: str, no_overwrite=False):
|
||||
"""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:
|
||||
raise ScoValueError(
|
||||
f"code UE invalide pour ue_id={self.ue.id}: {html.escape(code)}"
|
||||
@ -845,6 +865,9 @@ class DecisionsProposeesRCUE(DecisionsProposees):
|
||||
if code is None:
|
||||
self.validation = None
|
||||
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(
|
||||
etudid=self.etud.id,
|
||||
formsemestre_id=self.rcue.formsemestre_2.id,
|
||||
@ -940,7 +963,7 @@ class DecisionsProposeesUE(DecisionsProposees):
|
||||
self.rcue: RegroupementCoherentUE = None
|
||||
"Le rcue auquel est rattaché cette UE, ou None"
|
||||
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:
|
||||
self.explanation = "UE bonus, pas de décision de jury"
|
||||
self.codes = [] # aucun code proposé
|
||||
|
@ -82,7 +82,8 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
|
||||
H.append(
|
||||
_gen_but_niveau_ue(
|
||||
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],
|
||||
disabled=read_only,
|
||||
)
|
||||
@ -91,7 +92,8 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
|
||||
H.append(
|
||||
_gen_but_niveau_ue(
|
||||
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],
|
||||
disabled=read_only,
|
||||
)
|
||||
|
@ -81,6 +81,12 @@ NOTES_ATTENTE = -1002.0 # note "en attente" (se calcule comme une note neutrali
|
||||
INSCRIT = "I"
|
||||
DEMISSION = "D"
|
||||
DEF = "DEF"
|
||||
ETATS_INSCRIPTION = {
|
||||
INSCRIT: "Inscrit",
|
||||
DEMISSION: "Démission",
|
||||
DEF: "Défaillant",
|
||||
}
|
||||
|
||||
|
||||
# Types de modules
|
||||
class ModuleType(IntEnum):
|
||||
|
@ -2370,6 +2370,12 @@ def formsemestre_validation_but(
|
||||
niveaux mais {len(deca.decisions_rcue_by_niveau)} regroupements RCUE.</div>"""
|
||||
if deca.parcour is None:
|
||||
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(
|
||||
f"""
|
||||
<div>
|
||||
@ -2409,7 +2415,7 @@ def formsemestre_validation_but(
|
||||
vos codes d'UE/RCUE/Année !</em>
|
||||
</input>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="but_buttons">
|
||||
<input type="submit" value="Enregistrer ces décisions">
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user