############################################################################## # ScoDoc # Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved. # See LICENSE ############################################################################## """Jury BUT: affichage/formulaire """ from flask import g, url_for from app.models.etudiants import Identite from app.scodoc import sco_utils as scu from app.but.jury_but import DecisionsProposeesAnnee, DecisionsProposeesUE from app.models import FormSemestre, FormSemestreInscription, UniteEns from app.scodoc.sco_exceptions import ScoValueError def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str: """Affichage des décisions annuelles BUT Si pas read_only, menus sélection codes jury. """ H = [] if deca.code_valide and not read_only: erase_span = f"""<a href="{ url_for("notes.formsemestre_jury_but_erase", scodoc_dept=g.scodoc_dept, formsemestre_id=deca.formsemestre_id, etudid=deca.etud.id)}" class="stdlink">effacer décisions</a>""" else: erase_span = "" H.append( f"""<div class="but_section_annee"> <div> <b>Décision de jury pour l'année :</b> { _gen_but_select("code_annee", deca.codes, deca.code_valide, disabled=True, klass="manual") } <span>({'non ' if deca.code_valide is None else ''}enregistrée)</span> <span>{erase_span}</span> </div> <div class="but_explanation">{deca.explanation}</div> </div>""" ) H.append( f""" <div><b>Niveaux de compétences et unités d'enseignement :</b></div> <div class="but_annee"> <div class="titre"></div> <div class="titre">S{1}</div> <div class="titre">S{2}</div> <div class="titre">RCUE</div> """ ) for niveau in deca.niveaux_competences: H.append( f"""<div class="but_niveau_titre"> <div title="{niveau.competence.titre_long}">{niveau.competence.titre}</div> </div>""" ) dec_rcue = deca.decisions_rcue_by_niveau.get(niveau.id) if dec_rcue is None: break # Semestre impair 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], disabled=read_only, ) ) # Semestre pair 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], disabled=read_only, ) ) # RCUE H.append( f"""<div class="but_niveau_rcue {'recorded' if dec_rcue.code_valide is not None else ''} "> <div class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_rcue)}</div> <div class="but_code">{ _gen_but_select("code_rcue_"+str(niveau.id), dec_rcue.codes, dec_rcue.code_valide, disabled=True, klass="manual" ) }</div> </div>""" ) H.append("</div>") # but_annee return "\n".join(H) def _gen_but_select( name: str, codes: list[str], code_valide: str, disabled: bool = False, klass: str = "", ) -> str: "Le menu html select avec les codes" h = "\n".join( [ f"""<option value="{code}" {'selected' if code == code_valide else ''} class="{'recorded' if code == code_valide else ''}" >{code}</option>""" for code in codes ] ) return f"""<select required name="{name}" class="but_code {klass}" onchange="change_menu_code(this);" {"disabled" if disabled else ""} >{h}</select> """ def _gen_but_niveau_ue( ue: UniteEns, moy_ue: float, dec_ue: DecisionsProposeesUE, disabled=False ): return f"""<div class="but_niveau_ue { 'recorded' if dec_ue.code_valide is not None else ''} "> <div title="{ue.titre}">{ue.acronyme}</div> <div class="but_note">{scu.fmt_note(moy_ue)}</div> <div class="but_code">{ _gen_but_select("code_ue_"+str(ue.id), dec_ue.codes, dec_ue.code_valide, disabled=disabled ) }</div> </div>""" # def infos_fiche_etud_html(etudid: int) -> str: """Section html pour fiche etudiant provisoire pour BUT 2022 """ etud: Identite = Identite.query.get_or_404(etudid) inscriptions = ( FormSemestreInscription.query.join(FormSemestreInscription.formsemestre) .filter( FormSemestreInscription.etudid == etud.id, ) .order_by(FormSemestre.date_debut) ) formsemestres_but = [ i.formsemestre for i in inscriptions if i.formsemestre.formation.is_apc() ] if len(formsemestres_but) == 0: return "" # temporaire quick & dirty: affiche le dernier try: deca = DecisionsProposeesAnnee(etud, formsemestres_but[-1]) if len(deca.rcues_annee) > 0: return f"""<div class="infos_but"> {show_etud(deca, read_only=True)} </div> """ except ScoValueError: pass return ""