##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""Jury BUT: affichage/formulaire
"""
import re
import flask
from flask import flash, url_for
from flask import g, request
from app import db
from app.but import jury_but
from app.but.jury_but import DecisionsProposeesAnnee, DecisionsProposeesUE
from app.comp import res_sem
from app.comp.res_but import ResultatsSemestreBUT
from app.models import (
FormSemestre,
FormSemestreInscription,
Identite,
UniteEns,
ScolarAutorisationInscription,
)
from app.scodoc import html_sco_header
from app.scodoc.sco_exceptions import ScoValueError
from app.scodoc import sco_utils as scu
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"""effacer décisions"""
else:
erase_span = ""
H.append("""
""")
if deca.jury_annuel:
H.append(
f"""
Décision de jury pour l'année : {
_gen_but_select("code_annee", deca.codes, deca.code_valide,
disabled=True, klass="manual")
}
({'non ' if deca.code_valide is None else ''}enregistrée){erase_span}
{deca.explanation}
"""
)
else:
H.append("""
Pas de décision annuelle (sem. impair)
""")
H.append("""
""")
if deca.formsemestre_pair is not None:
annee_sco_pair = deca.formsemestre_pair.annee_scolaire()
avertissement_redoublement = (
f"année {annee_sco_pair}-{annee_sco_pair+1}"
if annee_sco_pair != deca.annee_scolaire()
else ""
)
else:
avertissement_redoublement = ""
formsemestre_1 = deca.formsemestre_impair
formsemestre_2 = deca.formsemestre_pair
# Ordonne selon les dates des 2 semestres considérés (pour les redoublants à cheval):
if deca.formsemestre_pair.date_debut < deca.formsemestre_impair.date_debut:
formsemestre_1, formsemestre_2 = formsemestre_2, formsemestre_1
H.append(
f"""
Niveaux de compétences et unités d'enseignement du BUT{deca.annee_but}
S{formsemestre_1.semestre_id
if formsemestre_1 else "-"}
{formsemestre_1.annee_scolaire_str() if formsemestre_1 else ""}
S{formsemestre_2.semestre_id
if formsemestre_2 else "-"}
{formsemestre_2.annee_scolaire_str() if formsemestre_2 else ""}
RCUE
"""
)
for niveau in deca.niveaux_competences:
H.append(
f"""
{niveau.competence.titre}
"""
)
dec_rcue = deca.decisions_rcue_by_niveau.get(niveau.id) # peut être None
ues = [ue for ue in deca.ues_impair if ue.niveau_competence.id == niveau.id]
ue_impair = ues[0] if ues else None
ues = [ue for ue in deca.ues_pair if ue.niveau_competence.id == niveau.id]
ue_pair = ues[0] if ues else None
# Les UEs à afficher, toujours en readonly sur le formsemestre de l'année précédente du redoublant
ues_ro = [
(
ue_impair,
(deca.a_cheval and deca.formsemestre_id != deca.formsemestre_impair.id),
),
(
ue_pair,
deca.a_cheval and deca.formsemestre_id != deca.formsemestre_pair.id,
),
]
# Ordonne selon les dates des 2 semestres considérés:
if deca.formsemestre_pair.date_debut < deca.formsemestre_impair.date_debut:
ues_ro[0], ues_ro[1] = ues_ro[1], ues_ro[0]
# Colonnes d'UE:
for ue, ue_read_only in ues_ro:
H.append(
_gen_but_niveau_ue(
ue,
deca.decisions_ues[ue.id],
disabled=read_only or ue_read_only,
annee_prec=ue_read_only,
)
)
# RCUE
if dec_rcue is None:
H.append("""""")
else:
H.append(
f"""
") # 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"
# if disabled: # mauvaise idée car le disabled est traité en JS
# return f"""
{code_valide}
"""
h = "\n".join(
[
f""""""
for code in codes
]
)
return f"""
"""
def _gen_but_niveau_ue(
ue: UniteEns,
dec_ue: DecisionsProposeesUE,
disabled: bool = False,
annee_prec: bool = False,
):
if dec_ue.ue_status and dec_ue.ue_status["is_capitalized"]:
moy_ue_str = f"""{
scu.fmt_note(dec_ue.moy_ue_with_cap)}"""
scoplement = f"""
UE {ue.acronyme} capitalisée le
{dec_ue.ue_status["event_date"].strftime("%d/%m/%Y")}
UE en cours avec moyenne
{scu.fmt_note(dec_ue.moy_ue)}