Skip to content
Snippets Groups Projects
Commit cc4fd761 authored by Emmanuel Viennet's avatar Emmanuel Viennet
Browse files

Tableau recap. codes jury BUT

parent d776bdca
Branches master
No related tags found
No related merge requests found
...@@ -34,12 +34,17 @@ from app.scodoc.sco_exceptions import ScoValueError ...@@ -34,12 +34,17 @@ from app.scodoc.sco_exceptions import ScoValueError
def formsemestre_saisie_jury_but( def formsemestre_saisie_jury_but(
formsemestre2: FormSemestre, readonly: bool = False, selected_etudid: int = None formsemestre2: FormSemestre,
readonly: bool = False,
selected_etudid: int = None,
mode="jury",
) -> str: ) -> str:
"""formsemestre est un semestre PAIR """formsemestre est un semestre PAIR
Si readonly, ne montre pas le lien "saisir la décision" Si readonly, ne montre pas le lien "saisir la décision"
=> page html complète => page html complète
Si mode == "recap", table recap des codes, sans liens de saisie.
""" """
# Quick & Dirty # Quick & Dirty
# pour chaque etud de res2 trié # pour chaque etud de res2 trié
...@@ -55,7 +60,9 @@ def formsemestre_saisie_jury_but( ...@@ -55,7 +60,9 @@ def formsemestre_saisie_jury_but(
if formsemestre2.semestre_id % 2 != 0: if formsemestre2.semestre_id % 2 != 0:
raise ScoValueError("Cette page ne fonctionne que sur les semestres pairs") raise ScoValueError("Cette page ne fonctionne que sur les semestres pairs")
rows, titles, column_ids = get_table_jury_but(formsemestre2, readonly=readonly) rows, titles, column_ids = get_table_jury_but(
formsemestre2, readonly=readonly, mode=mode
)
if not rows: if not rows:
return ( return (
'<div class="table_recap"><div class="message">aucun étudiant !</div></div>' '<div class="table_recap"><div class="message">aucun étudiant !</div></div>'
...@@ -63,8 +70,9 @@ def formsemestre_saisie_jury_but( ...@@ -63,8 +70,9 @@ def formsemestre_saisie_jury_but(
filename = scu.sanitize_filename( filename = scu.sanitize_filename(
f"""jury-but-{formsemestre2.titre_num()}-{time.strftime("%Y-%m-%d")}""" f"""jury-but-{formsemestre2.titre_num()}-{time.strftime("%Y-%m-%d")}"""
) )
klass = "table_jury_but_bilan" if mode == "recap" else ""
table_html = build_table_jury_but_html( table_html = build_table_jury_but_html(
filename, rows, titles, column_ids, selected_etudid=selected_etudid filename, rows, titles, column_ids, selected_etudid=selected_etudid, klass=klass
) )
H = [ H = [
html_sco_header.sco_header( html_sco_header.sco_header(
...@@ -77,16 +85,45 @@ def formsemestre_saisie_jury_but( ...@@ -77,16 +85,45 @@ def formsemestre_saisie_jury_but(
formsemestre_id=formsemestre2.id formsemestre_id=formsemestre2.id
), ),
] ]
if mode == "recap":
H.append(
"""<h3>Décisions de jury enregistrées pour les étudiants de ce semestre</h3>"""
)
H.append( H.append(
f""" f"""
{table_html} {table_html}
<div class="table_jury_but_links"> <div class="table_jury_but_links">
<p><a class="sdtlink" href="{url_for( """
)
if (mode == "recap") and not readonly:
H.append(
f"""
<p><a class="stdlink" href="{url_for(
"notes.formsemestre_saisie_jury",
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre2.id)
}">Saisie des décisions du jury</a>
</p>"""
)
else:
H.append(
f"""
<p><a class="stdlink" href="{url_for(
"notes.formsemestre_validation_auto_but", "notes.formsemestre_validation_auto_but",
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre2.id) scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre2.id)
}">Calcul automatique des décisions du jury</a></p> }">Calcul automatique des décisions du jury</a>
</p>
<p><a class="stdlink" href="{url_for(
"notes.formsemestre_jury_but_recap",
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre2.id)
}">Tableau récapitulatif des décisions du jury</a>
</p>
"""
)
H.append(
f"""
</div> </div>
{html_sco_header.sco_footer()} {html_sco_header.sco_footer()}
...@@ -96,12 +133,12 @@ def formsemestre_saisie_jury_but( ...@@ -96,12 +133,12 @@ def formsemestre_saisie_jury_but(
def build_table_jury_but_html( def build_table_jury_but_html(
filename: str, rows, titles, column_ids, selected_etudid: int = None filename: str, rows, titles, column_ids, selected_etudid: int = None, klass=""
) -> str: ) -> str:
"""assemble la table html""" """assemble la table html"""
footer_rows = [] # inutile pour l'instant, à voir XXX footer_rows = [] # inutilisé pour l'instant
H = [ H = [
f"""<div class="table_recap"><table class="table_recap apc jury table_jury_but" f"""<div class="table_recap"><table class="table_recap apc jury table_jury_but {klass}"
data-filename="{filename}">""" data-filename="{filename}">"""
] ]
# header # header
...@@ -274,7 +311,7 @@ class RowCollector: ...@@ -274,7 +311,7 @@ class RowCollector:
def get_table_jury_but( def get_table_jury_but(
formsemestre2: FormSemestre, readonly: bool = False formsemestre2: FormSemestre, readonly: bool = False, mode="jury"
) -> tuple[list[dict], list[str], list[str]]: ) -> tuple[list[dict], list[str], list[str]]:
"""Construit la table des résultats annuels pour le jury BUT""" """Construit la table des résultats annuels pour le jury BUT"""
res2: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre2) res2: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre2)
...@@ -302,7 +339,7 @@ def get_table_jury_but( ...@@ -302,7 +339,7 @@ def get_table_jury_but(
"col_code_annee", "col_code_annee",
) )
# --- Le lien de saisie # --- Le lien de saisie
if not readonly: if not readonly and not mode == "recap":
row.add_cell( row.add_cell(
"lien_saisie", "lien_saisie",
"", "",
...@@ -316,6 +353,7 @@ def get_table_jury_but( ...@@ -316,6 +353,7 @@ def get_table_jury_but(
{"modif." if deca.code_valide else "saisie"} {"modif." if deca.code_valide else "saisie"}
décision</a> décision</a>
""", """,
"col_lien_saisie_but",
) )
rows.append(row.row) rows.append(row.row)
if len(rows) > 0: if len(rows) > 0:
......
// Tableau recap notes // Tableau recap notes
$(function () { $(function () {
$(function () { $(function () {
let hidden_colums = ["codes", "identite_detail", "partition_aux", "partition_rangs", "admission", "col_empty"];
let mode_jury_but_bilan = $('table.table_recap').hasClass("table_jury_but_bilan");
if (mode_jury_but_bilan) {
// table bilan décisions: cache les notes
hidden_colums = hidden_colums.concat(["col_ue", "col_rcue", "col_lien_saisie_but"]);
} else {
hidden_colums = hidden_colums.concat(["recorded_code"]);
}
// Les boutons dépendent du mode BUT ou classique: // Les boutons dépendent du mode BUT ou classique:
let buttons = [ let buttons = [
{ {
...@@ -125,7 +133,7 @@ $(function () { ...@@ -125,7 +133,7 @@ $(function () {
"columnDefs": [ "columnDefs": [
{ {
// cache les codes, le détail de l'identité, les groupes, les colonnes admission et les vides // cache les codes, le détail de l'identité, les groupes, les colonnes admission et les vides
targets: ["codes", "identite_detail", "partition_aux", "partition_rangs", "admission", "col_empty", "recorded_code"], targets: hidden_colums,
visible: false, visible: false,
}, },
{ {
...@@ -175,10 +183,13 @@ $(function () { ...@@ -175,10 +183,13 @@ $(function () {
$(this).addClass('selected'); $(this).addClass('selected');
} }
}); });
// Pour montrer et highlihter l'étudiant sélectionné: // Pour montrer et surligner l'étudiant sélectionné:
$(function () { $(function () {
document.querySelector("#row_selected").scrollIntoView(); let row_selected = document.querySelector("#row_selected");
if (row_selected) {
row_selected.scrollIntoView();
window.scrollBy(0, -50); window.scrollBy(0, -50);
document.querySelector("#row_selected").classList.add("selected"); row_selected.classList.add("selected");
}
}); });
}); });
...@@ -2613,6 +2613,23 @@ def formsemestre_saisie_jury(formsemestre_id: int, selected_etudid: int = None): ...@@ -2613,6 +2613,23 @@ def formsemestre_saisie_jury(formsemestre_id: int, selected_etudid: int = None):
) )
@bp.route("/formsemestre_jury_but_recap")
@scodoc
@permission_required(Permission.ScoView)
@scodoc7func
def formsemestre_jury_but_recap(formsemestre_id: int, selected_etudid: int = None):
"""Tableau affichage des codes"""
readonly = not sco_permissions_check.can_validate_sem(formsemestre_id)
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
if not (formsemestre.formation.is_apc() and formsemestre.semestre_id % 2 == 0):
raise ScoValueError(
"formsemestre_jury_but_recap: réservé aux semestres pairs de BUT"
)
return jury_but_recap.formsemestre_saisie_jury_but(
formsemestre, readonly=readonly, selected_etudid=selected_etudid, mode="recap"
)
sco_publish( sco_publish(
"/formsemestre_lettres_individuelles", "/formsemestre_lettres_individuelles",
sco_pvjury.formsemestre_lettres_individuelles, sco_pvjury.formsemestre_lettres_individuelles,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment