forked from ScoDoc/ScoDoc
Recap BUT: titre footer (lien, bulle) + highlight selected row
This commit is contained in:
parent
2a429a82f0
commit
13d4da3fea
@ -20,10 +20,11 @@ from app.models import ScoDocSiteConfig
|
|||||||
from app.models.etudiants import Identite
|
from app.models.etudiants import Identite
|
||||||
from app.models.moduleimpls import ModuleImpl
|
from app.models.moduleimpls import ModuleImpl
|
||||||
from app.models.ues import UniteEns
|
from app.models.ues import UniteEns
|
||||||
from app.scodoc import sco_groups
|
|
||||||
from app.scodoc import sco_preferences
|
|
||||||
from app.scodoc import sco_codes_parcours
|
from app.scodoc import sco_codes_parcours
|
||||||
from app.scodoc.sco_codes_parcours import UE_SPORT
|
from app.scodoc.sco_codes_parcours import UE_SPORT
|
||||||
|
from app.scodoc import sco_groups
|
||||||
|
from app.scodoc import sco_preferences
|
||||||
|
from app.scodoc import sco_users
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
|
|
||||||
|
|
||||||
@ -210,6 +211,8 @@ class ResultatsSemestreBUT(NotesTableCompat):
|
|||||||
NO_NOTE = "-" # contenu des cellules sans notes
|
NO_NOTE = "-" # contenu des cellules sans notes
|
||||||
rows = []
|
rows = []
|
||||||
titles = {"rang": "Rg"} # column_id : title
|
titles = {"rang": "Rg"} # column_id : title
|
||||||
|
# les titres en footer: les mêmes, mais avec des bulles et liens:
|
||||||
|
titles_bot = {}
|
||||||
|
|
||||||
def add_cell(
|
def add_cell(
|
||||||
row: dict, col_id: str, title: str, content: str, classes: str = ""
|
row: dict, col_id: str, title: str, content: str, classes: str = ""
|
||||||
@ -243,7 +246,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
|
|||||||
formsemestre_id=self.formsemestre.id,
|
formsemestre_id=self.formsemestre.id,
|
||||||
etudid=etudid,
|
etudid=etudid,
|
||||||
)
|
)
|
||||||
row[f"_nom_short_target_attrs"] = f'class="etudinfo" id="{etudid}"'
|
row["_nom_short_target_attrs"] = f'class="etudinfo" id="{etudid}"'
|
||||||
row["_nom_disp_target"] = row["_nom_short_target"]
|
row["_nom_disp_target"] = row["_nom_short_target"]
|
||||||
row["_nom_disp_target_attrs"] = row["_nom_short_target_attrs"]
|
row["_nom_disp_target_attrs"] = row["_nom_short_target_attrs"]
|
||||||
self._recap_etud_groups_infos(etudid, row, titles)
|
self._recap_etud_groups_infos(etudid, row, titles)
|
||||||
@ -261,6 +264,9 @@ class ResultatsSemestreBUT(NotesTableCompat):
|
|||||||
fmt_note(moy_gen),
|
fmt_note(moy_gen),
|
||||||
"col_moy_gen" + note_class,
|
"col_moy_gen" + note_class,
|
||||||
)
|
)
|
||||||
|
titles_bot["_moy_gen_target_attrs"] = (
|
||||||
|
'title="moyenne indicative"' if self.is_apc else ""
|
||||||
|
)
|
||||||
# --- Moyenne d'UE
|
# --- Moyenne d'UE
|
||||||
for ue in [ue for ue in ues if ue.type != UE_SPORT]:
|
for ue in [ue for ue in ues if ue.type != UE_SPORT]:
|
||||||
ue_status = self.get_etud_ue_status(etudid, ue.id)
|
ue_status = self.get_etud_ue_status(etudid, ue.id)
|
||||||
@ -280,6 +286,9 @@ class ResultatsSemestreBUT(NotesTableCompat):
|
|||||||
fmt_note(val),
|
fmt_note(val),
|
||||||
"col_ue" + note_class,
|
"col_ue" + note_class,
|
||||||
)
|
)
|
||||||
|
titles_bot[
|
||||||
|
f"_{col_id}_target_attrs"
|
||||||
|
] = f"""title="{ue.titre} S{ue.semestre_idx or '?'}" """
|
||||||
# Les moyennes des ressources et SAÉs dans cette UE
|
# Les moyennes des ressources et SAÉs dans cette UE
|
||||||
for modimpl in self.modimpls_in_ue(ue.id, etudid, with_bonus=False):
|
for modimpl in self.modimpls_in_ue(ue.id, etudid, with_bonus=False):
|
||||||
if ue_status["is_capitalized"]:
|
if ue_status["is_capitalized"]:
|
||||||
@ -309,6 +318,16 @@ class ResultatsSemestreBUT(NotesTableCompat):
|
|||||||
# class col_res mod_ue_123
|
# class col_res mod_ue_123
|
||||||
f"col_{modimpl.module.type_abbrv()} mod_ue_{ue.id}",
|
f"col_{modimpl.module.type_abbrv()} mod_ue_{ue.id}",
|
||||||
)
|
)
|
||||||
|
titles_bot[f"_{col_id}_target"] = url_for(
|
||||||
|
"notes.moduleimpl_status",
|
||||||
|
scodoc_dept=g.scodoc_dept,
|
||||||
|
moduleimpl_id=modimpl.id,
|
||||||
|
)
|
||||||
|
titles_bot[
|
||||||
|
f"_{col_id}_target_attrs"
|
||||||
|
] = f"""
|
||||||
|
title="{modimpl.module.titre}
|
||||||
|
({sco_users.user_info(modimpl.responsable_id)['nomcomplet']})" """
|
||||||
modimpl_ids.add(modimpl.id)
|
modimpl_ids.add(modimpl.id)
|
||||||
|
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
@ -332,6 +351,8 @@ class ResultatsSemestreBUT(NotesTableCompat):
|
|||||||
row["prenom"] = row["nom_short"] = bottom_line.capitalize()
|
row["prenom"] = row["nom_short"] = bottom_line.capitalize()
|
||||||
row["_tr_class"] = bottom_line.lower()
|
row["_tr_class"] = bottom_line.lower()
|
||||||
footer_rows.append(row)
|
footer_rows.append(row)
|
||||||
|
titles_bot.update(titles)
|
||||||
|
footer_rows.append(titles_bot)
|
||||||
return (
|
return (
|
||||||
rows,
|
rows,
|
||||||
footer_rows,
|
footer_rows,
|
||||||
|
@ -1025,10 +1025,9 @@ def _gen_cell(key: str, row: dict, elt="td"):
|
|||||||
attrs += f' data-order="{order}"'
|
attrs += f' data-order="{order}"'
|
||||||
content = row.get(key, "")
|
content = row.get(key, "")
|
||||||
target = row.get(f"_{key}_target")
|
target = row.get(f"_{key}_target")
|
||||||
if content and target: # avec lien
|
if content or target: # avec lien
|
||||||
content = (
|
href = f'href="{target}"' if target else ""
|
||||||
f'<a href="{target}" {row.get(f"_{key}_target_attrs", "")}>{content}</a>'
|
content = f'<a {href} {row.get(f"_{key}_target_attrs", "")}>{content}</a>'
|
||||||
)
|
|
||||||
return f"<{elt} {attrs}>{content}</{elt}>"
|
return f"<{elt} {attrs}>{content}</{elt}>"
|
||||||
|
|
||||||
|
|
||||||
@ -1062,11 +1061,11 @@ def make_formsemestre_recapcomplet_apc(formsemestre: FormSemestre, format="html"
|
|||||||
H.append("</tbody>\n")
|
H.append("</tbody>\n")
|
||||||
# footer
|
# footer
|
||||||
H.append("<tfoot>")
|
H.append("<tfoot>")
|
||||||
for row in footer_rows:
|
idx_last = len(footer_rows) - 1
|
||||||
H.append(f"{_gen_row(column_ids, row)}\n")
|
for i, row in enumerate(footer_rows):
|
||||||
|
H.append(f'{_gen_row(column_ids, row, "th" if i == idx_last else "td")}\n')
|
||||||
H.append(
|
H.append(
|
||||||
f"""
|
"""
|
||||||
{_gen_row(column_ids, titles, "th")}
|
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3240,9 +3240,24 @@ table.dataTable td.etudinfo, table.dataTable td.group {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
/* Nouveau tableau recap */
|
/* Nouveau tableau recap */
|
||||||
|
div.table_recap {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
div.table_recap table.table_recap {
|
div.table_recap table.table_recap {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
table.table_recap tr.selected td {
|
||||||
|
border-bottom: 1px solid rgb(248, 0, 33);
|
||||||
|
border-top: 1px solid rgb(248, 0, 33);
|
||||||
|
background-color: rgb(253, 255, 155);
|
||||||
|
}
|
||||||
|
table.table_recap tr.selected td:first-child {
|
||||||
|
border-left: 1px solid rgb(248, 0, 33);
|
||||||
|
}
|
||||||
|
table.table_recap tr.selected td:last-child {
|
||||||
|
border-right: 1px solid rgb(248, 0, 33);
|
||||||
|
}
|
||||||
|
|
||||||
table.table_recap .identite_court {
|
table.table_recap .identite_court {
|
||||||
white-space:nowrap;
|
white-space:nowrap;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@ -3258,7 +3273,7 @@ table.table_recap .group {
|
|||||||
border-left: 1px dashed rgb(160, 160, 160);
|
border-left: 1px dashed rgb(160, 160, 160);
|
||||||
}
|
}
|
||||||
|
|
||||||
table.table_recap a:hover {
|
table.table_recap tbody tr td a:hover {
|
||||||
color: red;
|
color: red;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
@ -64,4 +64,13 @@ $(function () {
|
|||||||
);
|
);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
$('table.table_recap tbody').on('click', 'tr', function () {
|
||||||
|
if ($(this).hasClass('selected')) {
|
||||||
|
$(this).removeClass('selected');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$('table.table_recap tr.selected').removeClass('selected');
|
||||||
|
$(this).addClass('selected');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user