From 75c5256ba9e06f6a6bfab2a6096216de20156e68 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 4 Oct 2022 21:56:10 +0200 Subject: [PATCH] =?UTF-8?q?Jury=20BUT:=20d=C3=A9cisions=20lorsque=20d?= =?UTF-8?q?=C3=A9mission=20sur=20un=20semestre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/but/jury_but.py | 33 ++++++++++++++++++++++++++++----- app/but/jury_but_view.py | 6 ++++-- app/scodoc/sco_utils.py | 6 ++++++ app/views/notes.py | 8 +++++++- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 401f8993c..15ae29d90 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -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 {html.escape(code)} 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é diff --git a/app/but/jury_but_view.py b/app/but/jury_but_view.py index 1aa72d1e9..6e5b85053 100644 --- a/app/but/jury_but_view.py +++ b/app/but/jury_but_view.py @@ -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, ) diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index ce36185ee..d00c49394 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -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): diff --git a/app/views/notes.py b/app/views/notes.py index f42fdf42f..5b4dd416b 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -2370,6 +2370,12 @@ def formsemestre_validation_but( niveaux mais {len(deca.decisions_rcue_by_niveau)} regroupements RCUE.""" if deca.parcour is None: warning += """
L'étudiant n'est pas inscrit à un parcours.
""" + if deca.formsemestre_impair and deca.inscription_etat_impair != scu.INSCRIT: + etat_ins = scu.ETATS_INSCRIPTION.get(deca.inscription_etat_impair, "inconnu?") + warning += f"""
{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"""
{etat_ins} en S{deca.formsemestre_pair.semestre_id}""" H.append( f"""
@@ -2409,7 +2415,7 @@ def formsemestre_validation_but( vos codes d'UE/RCUE/Année !
- +