WIP: jury BUT: formulaire avec style (merci @sebL)
This commit is contained in:
parent
c1e279ed5c
commit
d4a8b74c0a
@ -266,6 +266,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
explanation: {self.explanation}
|
explanation: {self.explanation}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def annee_scolaire_sr(self)
|
||||||
|
|
||||||
def comp_formsemestres(
|
def comp_formsemestres(
|
||||||
self, formsemestre: FormSemestre
|
self, formsemestre: FormSemestre
|
||||||
) -> tuple[FormSemestre, FormSemestre]:
|
) -> tuple[FormSemestre, FormSemestre]:
|
||||||
|
68
app/static/css/jury_but.css
Normal file
68
app/static/css/jury_but.css
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* Saisie décision de jury BUT */
|
||||||
|
|
||||||
|
.jury_but {
|
||||||
|
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_annee {
|
||||||
|
display: inline-grid;
|
||||||
|
grid-template-columns: repeat(4, auto);
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_annee_caption {
|
||||||
|
grid-column: 4 / 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_annee_caption,
|
||||||
|
.but_niveau_titre {
|
||||||
|
background: #09c !important;
|
||||||
|
color: #FFF;
|
||||||
|
padding: 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_annee>* {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0px 16px;
|
||||||
|
background: #FFF;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_annee>div.titre {
|
||||||
|
background: rgb(242, 242, 238);
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
border-bottom: 1px solid gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_niveau_ue>div:nth-child(1),
|
||||||
|
.but_note {
|
||||||
|
border-right: 1px solid #aaa;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_annee select {
|
||||||
|
padding: 8px 8px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.but_niveau_rcue,
|
||||||
|
.but_niveau_rcue>* {
|
||||||
|
border-color: #09c;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.but_section_annee {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.but_settings {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.but_explanation {
|
||||||
|
color: blueviolet;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
6
app/static/js/jury_but.js
Normal file
6
app/static/js/jury_but.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
// active les menus des codes "manuels" (année, RCUEs)
|
||||||
|
function enable_manual_codes(elt) {
|
||||||
|
$(".jury_but select.manual").prop("disabled", !elt.checked);
|
||||||
|
}
|
@ -2234,10 +2234,13 @@ def formsemestre_validation_but(formsemestre_id: int, etudid: int):
|
|||||||
# XXX TODO Page expérimentale pour les devs
|
# XXX TODO Page expérimentale pour les devs
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(
|
html_sco_header.sco_header(
|
||||||
page_title="Validation BUT", formsemestre_id=formsemestre_id, etudid=etudid
|
page_title="Validation BUT",
|
||||||
|
formsemestre_id=formsemestre_id,
|
||||||
|
etudid=etudid,
|
||||||
|
cssstyles=("css/jury_but.css",),
|
||||||
|
javascripts=("js/jury_but.js",),
|
||||||
),
|
),
|
||||||
f"""
|
f"""
|
||||||
<h2>Jury BUT</h2>
|
|
||||||
<div class="jury_but">
|
<div class="jury_but">
|
||||||
""",
|
""",
|
||||||
]
|
]
|
||||||
@ -2248,21 +2251,30 @@ def formsemestre_validation_but(formsemestre_id: int, etudid: int):
|
|||||||
|
|
||||||
H.append(
|
H.append(
|
||||||
f"""
|
f"""
|
||||||
<div class="titre_parcours">Parcours: {deca.parcour.libelle or "non spécifié"}
|
<form method="POST">
|
||||||
en BUT{deca.annee_but}
|
<div class="titre_parcours"><h2>Jury BUT{deca.annee_but} - Parcours {deca.parcour.libelle or "non spécifié"}
|
||||||
|
- {deca.formsemestre_impair.annee_scolaire_str()}</h2>
|
||||||
</div>
|
</div>
|
||||||
<p>Année: <em>{deca.explanation}</em><br>{
|
<div class="but_section_annee">
|
||||||
_gen_but_select("code_annee", deca.codes, deca.code_valide)
|
<div>
|
||||||
}</p>
|
<b>Décision de jury pour l'année :</b> {
|
||||||
<h2>Niveaux de compétences</h2>
|
_gen_but_select("code_annee", deca.codes, deca.code_valide, disabled=True, klass="manual")
|
||||||
|
}</div>
|
||||||
|
<span class="but_explanation">{deca.explanation}</span>
|
||||||
|
</div>
|
||||||
|
<b>Niveaux de compétences et unités d'enseignement :</b>
|
||||||
<div class="but_annee">
|
<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:
|
for niveau in deca.niveaux_competences:
|
||||||
H.append(
|
H.append(
|
||||||
f"""<div class="but_niveau_titre">
|
f"""<div class="but_niveau_titre">
|
||||||
<span title="{niveau.competence.titre_long}">{niveau.competence.titre}</span>
|
<div title="{niveau.competence.titre_long}">{niveau.competence.titre}</div>
|
||||||
</div>"""
|
</div>"""
|
||||||
)
|
)
|
||||||
dec_rcue = deca.decisions_rcue_by_niveau[niveau.id]
|
dec_rcue = deca.decisions_rcue_by_niveau[niveau.id]
|
||||||
@ -2270,44 +2282,52 @@ def formsemestre_validation_but(formsemestre_id: int, etudid: int):
|
|||||||
ue = dec_rcue.rcue.ue_1
|
ue = dec_rcue.rcue.ue_1
|
||||||
H.append(
|
H.append(
|
||||||
f"""<div class="but_niveau_ue">
|
f"""<div class="but_niveau_ue">
|
||||||
<span title="{ue.titre}">{ue.acronyme}</span>
|
<div title="{ue.titre}">{ue.acronyme}</div>
|
||||||
<span class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_ue_1)}</span>
|
<div class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_ue_1)}</div>
|
||||||
<span class="but_code">{
|
<div class="but_code">{
|
||||||
_gen_but_select("code_ue_"+str(ue.id),
|
_gen_but_select("code_ue_"+str(ue.id),
|
||||||
deca.decisions_ues[ue.id].codes,
|
deca.decisions_ues[ue.id].codes,
|
||||||
deca.decisions_ues[ue.id].code_valide
|
deca.decisions_ues[ue.id].code_valide
|
||||||
)
|
)
|
||||||
}</span>
|
}</div>
|
||||||
</div>"""
|
</div>"""
|
||||||
)
|
)
|
||||||
# Semestre pair
|
# Semestre pair
|
||||||
ue = dec_rcue.rcue.ue_2
|
ue = dec_rcue.rcue.ue_2
|
||||||
H.append(
|
H.append(
|
||||||
f"""<div class="but_niveau_ue">
|
f"""<div class="but_niveau_ue">
|
||||||
<span title="{ue.titre}">{ue.acronyme}</span>
|
<div title="{ue.titre}">{ue.acronyme}</div>
|
||||||
<span class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_ue_2)}</span>
|
<div class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_ue_2)}</div>
|
||||||
<span class="but_code">{
|
<div class="but_code">{
|
||||||
_gen_but_select("code_ue_"+str(ue.id),
|
_gen_but_select("code_ue_"+str(ue.id),
|
||||||
deca.decisions_ues[ue.id].codes,
|
deca.decisions_ues[ue.id].codes,
|
||||||
deca.decisions_ues[ue.id].code_valide
|
deca.decisions_ues[ue.id].code_valide
|
||||||
)
|
)
|
||||||
}</span>
|
}</div>
|
||||||
</div>"""
|
</div>"""
|
||||||
)
|
)
|
||||||
# RCUE
|
# RCUE
|
||||||
H.append(
|
H.append(
|
||||||
f"""<div class="but_niveau_rcue">
|
f"""<div class="but_niveau_rcue">
|
||||||
<span class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_rcue)}</span>
|
<div class="but_note">{scu.fmt_note(dec_rcue.rcue.moy_rcue)}</div>
|
||||||
<span class="but_code">{
|
<div class="but_code">{
|
||||||
_gen_but_select("code_rcue_"+str(niveau.id),
|
_gen_but_select("code_rcue_"+str(niveau.id),
|
||||||
dec_rcue.codes,
|
dec_rcue.codes,
|
||||||
dec_rcue.code_valide
|
dec_rcue.code_valide,
|
||||||
|
disabled=True, klass="manual"
|
||||||
)
|
)
|
||||||
}</span>
|
}</div>
|
||||||
</div>"""
|
</div>"""
|
||||||
)
|
)
|
||||||
H.append("</div>") # but_annee
|
H.append("</div>") # but_annee
|
||||||
|
|
||||||
|
H.append(
|
||||||
|
"""<div class="but_settings"><input type="checkbox" onchange="enable_manual_codes(this)">
|
||||||
|
<em>permettre la saisie manuelles des codes d'année et de niveaux</em>
|
||||||
|
</input></div>"""
|
||||||
|
)
|
||||||
|
H.append("</form>") # but_annee
|
||||||
|
|
||||||
# ---- Toutes les UEs, pour infos
|
# ---- Toutes les UEs, pour infos
|
||||||
H.append(f"<ul>")
|
H.append(f"<ul>")
|
||||||
for ue in formsemestre.query_ues(): # volontairement toutes les UE
|
for ue in formsemestre.query_ues(): # volontairement toutes les UE
|
||||||
@ -2318,7 +2338,13 @@ def formsemestre_validation_but(formsemestre_id: int, etudid: int):
|
|||||||
return "\n".join(H) + html_sco_header.sco_footer()
|
return "\n".join(H) + html_sco_header.sco_footer()
|
||||||
|
|
||||||
|
|
||||||
def _gen_but_select(name: str, codes: list[str], code_valide: str) -> str:
|
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"
|
"Le menu html select avec les codes"
|
||||||
h = "\n".join(
|
h = "\n".join(
|
||||||
[
|
[
|
||||||
@ -2326,7 +2352,7 @@ def _gen_but_select(name: str, codes: list[str], code_valide: str) -> str:
|
|||||||
for code in codes
|
for code in codes
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
return f"""<select name="{name}">{h}</select>"""
|
return f"""<select name="{name}" class="{klass}" {"disabled" if disabled else ""}>{h}</select>"""
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/formsemestre_validate_previous_ue", methods=["GET", "POST"])
|
@bp.route("/formsemestre_validate_previous_ue", methods=["GET", "POST"])
|
||||||
|
Loading…
Reference in New Issue
Block a user