##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""Jury BUT: affichage/formulaire
"""
import re
import numpy as np
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,
DecisionsProposeesRCUE,
DecisionsProposeesUE,
)
from app.comp import res_sem
from app.comp.res_but import ResultatsSemestreBUT
from app.models import (
ApcNiveau,
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}
"""
)
div_explanation = f"""
{deca.explanation}
"""
else:
H.append("""
Pas de décision annuelle (sem. impair).
""")
div_explanation = ""
H.append("""
""")
formsemestre_1 = deca.formsemestre_impair
formsemestre_2 = deca.formsemestre_pair
# Ordonne selon les dates des 2 semestres considérés (pour les redoublants à cheval):
reverse_semestre = (
deca.formsemestre_pair
and deca.formsemestre_impair
and deca.formsemestre_pair.date_debut < deca.formsemestre_impair.date_debut
)
if reverse_semestre:
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}
{div_explanation}
{"S" +str(formsemestre_1.semestre_id)
if formsemestre_1 else "-"}
{formsemestre_1.annee_scolaire_str()
if formsemestre_1 else ""}
{"S"+str(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 reverse_semestre:
ues_ro[0], ues_ro[1] = ues_ro[1], ues_ro[0]
# Colonnes d'UE:
for ue, ue_read_only in ues_ro:
if ue:
H.append(
_gen_but_niveau_ue(
ue,
deca.decisions_ues[ue.id],
disabled=read_only or ue_read_only,
annee_prec=ue_read_only,
)
)
else:
H.append("""""")
# Colonne RCUE
H.append(_gen_but_rcue(dec_rcue, niveau))
H.append("
") # 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"""