From fa0f809ea2e30f97a8733fd7b64062e6921a45d4 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet <emmanuel.viennet@gmail.com> Date: Mon, 10 Mar 2025 13:06:38 +0100 Subject: [PATCH] =?UTF-8?q?Page=20saisie=20jury=20BUT:=20ajout=20explicati?= =?UTF-8?q?ons=20et=20am=C3=A9liore=20mise=20en=20forme.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/but/jury_but.py | 2 ++ app/but/jury_but_view.py | 16 ++++++++++++++++ app/static/css/jury_but.css | 34 +++++++++++++++++++++++++++++----- app/views/jury_validations.py | 17 ++++++++++++----- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 9d416568..5f72b3c1 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -227,6 +227,8 @@ class DecisionsProposeesAnnee(DecisionsProposees): self.annee_but = (formsemestre.semestre_id + 1) // 2 "le rang de l'année dans le BUT: 1, 2, 3" assert self.annee_but in (1, 2, 3) + self.explications: set[str] = set() + "set of strings, explications à afficher dans le formulaire" # ---- inscription et parcours inscription = formsemestre.etuds_inscriptions.get(etud.id) if inscription is None: diff --git a/app/but/jury_but_view.py b/app/but/jury_but_view.py index 2abbeb1d..160cc8cd 100644 --- a/app/but/jury_but_view.py +++ b/app/but/jury_but_view.py @@ -135,6 +135,7 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str: _gen_but_niveau_ue( ue, deca.decisions_ues[ue.id], + deca=deca, disabled=read_only or ue_read_only, annee_prec=ue_read_only, niveau_id=ue.niveau_competence.id, @@ -190,11 +191,13 @@ def _gen_but_select( def _gen_but_niveau_ue( ue: UniteEns, dec_ue: DecisionsProposeesUE, + deca: DecisionsProposeesAnnee, disabled: bool = False, annee_prec: bool = False, niveau_id: int = None, ue_dispense: bool = False, ) -> str: + "html snippet pour une UE. Ajoute éventuellement des explications dans le deca." if dec_ue.ue_status and dec_ue.ue_status["is_capitalized"]: moy_ue_str = f"""<span class="ue_cap">{ scu.fmt_note(dec_ue.moy_ue_with_cap)}</span>""" @@ -220,6 +223,12 @@ def _gen_but_niveau_ue( </div> </div> """ + deca.explications.add(f"UE {ue.acronyme} capitalisée, {etat_en_cours}") + deca.explications.add("Certaines UEs sont déjà capitalisées.") + deca.explications.add( + """<b>Le code jury à saisir sur les UEs porte toujours sur celles du semestre en cours. + Lorsque l'ancienne note est meilleure, elle est rappelée et soulignée.</b>""" + ) elif dec_ue.formsemestre is None: # Validation d'UE antérieure (semestre hors année scolaire courante) if dec_ue.validation: @@ -234,6 +243,9 @@ def _gen_but_niveau_ue( <div>Non reprise dans l'année en cours</div> </div> """ + deca.explications.add( + f"UE {ue.acronyme} antérieure validée non reprise dans ce semestre." + ) else: moy_ue_str = """<span>-</span>""" scoplement = """<div class="scoplement"> @@ -242,6 +254,7 @@ def _gen_but_niveau_ue( </div> </div> """ + deca.explications.add(f"Pas d'UE {ue.acronyme} en cours ou validée.") else: moy_ue_str = f"""<span>{scu.fmt_note(dec_ue.moy_ue)}</span>""" if dec_ue.code_valide: @@ -261,6 +274,9 @@ def _gen_but_niveau_ue( UE déjà capitalisée avec résultat moins favorable. </div> """ + deca.explications.add( + f"UE {ue.acronyme} déjà capitalisée avec résultat moins favorable." + ) else: scoplement = "" diff --git a/app/static/css/jury_but.css b/app/static/css/jury_but.css index 295e9496..b469f149 100644 --- a/app/static/css/jury_but.css +++ b/app/static/css/jury_but.css @@ -42,14 +42,17 @@ ul.modimpls_att { min-width: var(--sco-content-min-width); max-width: var(--sco-content-max-width); } + div.jury_but_warning { background-color: yellow; border-color: red; padding-bottom: 4px; } + div.jury_but_box_title { margin-bottom: 10px; } + .but_annee { margin-left: 32px; display: inline-grid; @@ -114,15 +117,22 @@ div.jury_but_box_title { .but_navigation { - padding-top: 16px; - margin-left: 50px; - margin-right: 50px; + margin-top: 16px; + padding-top: 8px; + border-top: 1px solid #999; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; } .but_navigation div { display: inline-block; - margin-left: 50px; - margin-right: 50px; + min-width: 100px; +} + +.but_navigation div.center { + margin: 0 auto; } div.but_section_annee { @@ -277,6 +287,10 @@ div.but_doc table tr td.amue { } .but_autorisations_passage.but_explanation { + color: var(--color-explanation); +} + +.but_explications { font-weight: normal; color: var(--color-explanation); } @@ -285,4 +299,14 @@ div.but_doc table tr td.amue { font-size: 110%; margin-bottom: 8px; margin-left: 16px; +} + +.but_submit { + margin-top: 12px; +} + +.btn.btn-default.but_submit_button { + font-weight: bold; + font-size: 18px; + padding: 16px 16px; } \ No newline at end of file diff --git a/app/views/jury_validations.py b/app/views/jury_validations.py index fe008e14..1a636e1a 100644 --- a/app/views/jury_validations.py +++ b/app/views/jury_validations.py @@ -233,7 +233,7 @@ def formsemestre_validation_but( <div class="prev"> {prev_lnk} </div> - <div class="back_list"> + <div class="back_list center"> <a href="{ url_for( "notes.formsemestre_recapcomplet", @@ -398,7 +398,13 @@ def formsemestre_validation_but( ) H.append(jury_but_view.show_etud(deca, read_only=read_only)) - + # Remarques / explications + if deca.explications: + explications = "</li><li>".join(sorted(deca.explications)) + H.append( + f"""<div class="but_explications"><ul><li>{explications}</li></ul></div>""" + ) + # Autorisations de passage autorisations_idx = deca.get_autorisations_passage() div_autorisations_passage = ( f""" @@ -409,7 +415,7 @@ def formsemestre_validation_but( """ if autorisations_idx else """<div class="but_autorisations_passage but_explanation"> - pas d'autorisations de passage enregistrées. + Pas d'autorisations de passage enregistrées. </div> """ ) @@ -457,13 +463,14 @@ def formsemestre_validation_but( <em>permettre la saisie manuelles des codes {"d'année et " if deca.jury_annuel else ""} de niveaux. - Dans ce cas, assurez-vous de la cohérence entre les codes d'UE/RCUE/Année ! + Assurez-vous alors de la cohérence entre les codes d'UE/RCUE/Année ! </em> </input> </div> + <div class="but_submit"><button type="submit" class="btn btn-default but_submit_button" + >Enregistrer ces décisions</button></div> <div class="but_buttons"> - <span><input type="submit" value="Enregistrer ces décisions"></span> <span>{erase_span}</span> </div> """ -- GitLab