diff --git a/app/views/notes.py b/app/views/notes.py index 8696614821c3c7faf080ed4d5df6bf45167256e4..99cd224e6e9a1ab142b4b9b65eb803acabfc3735 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -2237,28 +2237,96 @@ def formsemestre_validation_but(formsemestre_id: int, etudid: int): page_title="Validation BUT", formsemestre_id=formsemestre_id, etudid=etudid ), f""" - <h2>XXX Experimental XXX</h2> + <h2>Jury BUT</h2> + <div class="jury_but"> """, ] formsemestre = FormSemestre.query.get_or_404(formsemestre_id) etud = Identite.query.get_or_404(etudid) res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre) - # ---- UEs + deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre) + + H.append( + f""" + <div class="titre_parcours">Parcours: {deca.parcour.libelle or "non spécifié"} + en BUT{deca.annee_but} + </div> + <p>Année: <em>{deca.explanation}</em><br>{ + _gen_but_select("code_annee", deca.codes, deca.code_valide) + }</p> + <h2>Niveaux de compétences</h2> + <div class="but_annee"> + """ + ) + + for niveau in deca.niveaux_competences: + H.append( + f"""<div class="but_niveau_titre"> + <span title="{niveau.competence.titre_long}">{niveau.competence.titre}</span> + </div>""" + ) + dec_rcue = deca.decisions_rcue_by_niveau[niveau.id] + # Semestre impair + ue = dec_rcue.rcue.ue_1 + H.append( + f"""<div class="but_niveau_ue"> + <span title="{ue.titre}">{ue.acronyme}</span> + <span class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_ue_1)}</span> + <span class="but_code">{ + _gen_but_select("code_ue_"+str(ue.id), + deca.decisions_ues[ue.id].codes, + deca.decisions_ues[ue.id].code_valide + ) + }</span> + </div>""" + ) + # Semestre pair + ue = dec_rcue.rcue.ue_2 + H.append( + f"""<div class="but_niveau_ue"> + <span title="{ue.titre}">{ue.acronyme}</span> + <span class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_ue_2)}</span> + <span class="but_code">{ + _gen_but_select("code_ue_"+str(ue.id), + deca.decisions_ues[ue.id].codes, + deca.decisions_ues[ue.id].code_valide + ) + }</span> + </div>""" + ) + # RCUE + H.append( + f"""<div class="but_niveau_rcue"> + <span class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_rcue)}</span> + <span class="but_code">{ + _gen_but_select("code_rcue_"+str(niveau.id), + dec_rcue.codes, + dec_rcue.code_valide + ) + }</span> + </div>""" + ) + H.append("</div>") # but_annee + + # ---- Toutes les UEs, pour infos H.append(f"<ul>") for ue in formsemestre.query_ues(): # volontairement toutes les UE dec_proposee = jury_but.DecisionsProposeesUE(etud, formsemestre, ue) H.append("<li>" + html.escape(f"""{ue} : {dec_proposee}""") + "</li>") H.append(f"</ul>") + H.append(f"</div>") + return "\n".join(H) + html_sco_header.sco_footer() - if formsemestre.semestre_id % 2 == 0: - # ---- RCUES - H.append(f"<ul>") - for ue in formsemestre.query_ues(): # volontairement toutes les UE - dec_proposee = jury_but.decisions_ue_proposees(etud, formsemestre, ue) - H.append("<li>" + html.escape(f"""{ue} : {dec_proposee}""") + "</li>") - H.append(f"</ul>") - return "\n".join(H) + html_sco_header.sco_footer() +def _gen_but_select(name: str, codes: list[str], code_valide: str) -> str: + "Le menu html select avec les codes" + h = "\n".join( + [ + f"""<option value="{code}" {'selected' if code == code_valide else ''}>{code}</option>""" + for code in codes + ] + ) + return f"""<select name="{name}">{h}</select>""" @bp.route("/formsemestre_validate_previous_ue", methods=["GET", "POST"])