Recap BUT: ajoute groupe + fix sort rang

This commit is contained in:
Emmanuel Viennet 2022-03-27 10:05:12 +02:00
parent 13f55d5190
commit 5a71c406fb
9 changed files with 56 additions and 24 deletions

View File

@ -18,7 +18,9 @@ from app.models import ScoDocSiteConfig
from app.models.etudiants import Identite
from app.models.moduleimpls import ModuleImpl
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.sco_codes_parcours import UE_SPORT
import app.scodoc.sco_utils as scu
@ -233,6 +235,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
add_cell(row, "nom_disp", "Nom", etud.nom_disp(), "identite_detail")
add_cell(row, "prenom", "Prénom", etud.prenom, "identite_detail")
add_cell(row, "nom_short", "Nom", etud.nom_short, "identite_court")
self._recap_etud_groups_infos(etudid, row, titles)
# --- Moyenne générale
moy_gen = self.etud_moy_gen.get(etudid, False)
note_class = ""
@ -303,7 +306,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
rows.sort(key=lambda e: e["_rang_order"])
# INFOS POUR FOOTER
bottom_infos = self._bottom_infos(
bottom_infos = self._recap_bottom_infos(
[ue for ue in ues if ue.type != UE_SPORT], modimpl_ids, fmt_note
)
@ -315,7 +318,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
row["moy_gen"] = row.get("moy_gen", "")
row["_moy_gen_class"] = "col_moy_gen"
# titre de la ligne:
row["nom_disp"] = row["nom_short"] = bottom_line.capitalize()
row["prenom"] = row["nom_short"] = bottom_line.capitalize()
row["_tr_class"] = bottom_line.lower()
footer_rows.append(row)
return (
@ -325,7 +328,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
[title for title in titles if not title.startswith("_")],
)
def _bottom_infos(self, ues, modimpl_ids: set, fmt_note) -> dict:
def _recap_bottom_infos(self, ues, modimpl_ids: set, fmt_note) -> dict:
"""Les informations à mettre en bas de la table: min, max, moy, ECTS"""
bottom_infos = { # { key : row } avec key = min, max, moy, coef
"min": {},
@ -376,3 +379,28 @@ class ResultatsSemestreBUT(NotesTableCompat):
bottom_infos["max"] = row_max
bottom_infos["moy"] = row_moy
return bottom_infos
def _recap_etud_groups_infos(self, etudid: int, row: dict, titles: dict):
"""Ajoute à row les colonnes sur les groupes pour etud"""
# XXX à remonter dans res_common
# dec = self.get_etud_decision_sem(etudid)
# if dec:
# codes_nb[dec["code"]] += 1
row_class = ""
etud_etat = self.get_etud_etat(etudid)
if etud_etat == sco_codes_parcours.DEM:
gr_name = "Dém."
row_class = "dem"
elif etud_etat == sco_codes_parcours.DEF:
gr_name = "Déf."
row_class = "def"
else:
# XXX probablement à revoir pour utiliser données cachées,
# via get_etud_groups_in_partition ou autre
group = sco_groups.get_etud_main_group(etudid, self.formsemestre.id)
gr_name = group["group_name"] or ""
row["group"] = gr_name
row["_group_class"] = "group"
if row_class:
row["_tr_class"] = " ".join([row.get("_tr_class", ""), row_class])
titles["group"] = "Gr"

View File

@ -343,7 +343,7 @@ def get_group_other_partitions(group):
return other_partitions
def get_etud_groups(etudid, sem, exclude_default=False):
def get_etud_groups(etudid: int, formsemestre_id: int, exclude_default=False):
"""Infos sur groupes de l'etudiant dans ce semestre
[ group + partition_name ]
"""
@ -358,18 +358,18 @@ def get_etud_groups(etudid, sem, exclude_default=False):
req += " and p.partition_name is not NULL"
groups = ndb.SimpleDictFetch(
req + " ORDER BY p.numero",
{"etudid": etudid, "formsemestre_id": sem["formsemestre_id"]},
{"etudid": etudid, "formsemestre_id": formsemestre_id},
)
return _sortgroups(groups)
def get_etud_main_group(etudid, sem):
def get_etud_main_group(etudid: int, formsemestre_id: int):
"""Return main group (the first one) for etud, or default one if no groups"""
groups = get_etud_groups(etudid, sem, exclude_default=True)
groups = get_etud_groups(etudid, formsemestre_id, exclude_default=True)
if groups:
return groups[0]
else:
return get_group(get_default_group(sem["formsemestre_id"]))
return get_group(get_default_group(formsemestre_id))
def formsemestre_get_main_partition(formsemestre_id):

View File

@ -323,7 +323,7 @@ def _make_table_notes(
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
if etat == "I": # si inscrit, indique groupe
groups = sco_groups.get_etud_groups(etudid, sem)
groups = sco_groups.get_etud_groups(etudid, modimpl_o["formsemestre_id"])
grc = sco_groups.listgroups_abbrev(groups)
else:
if etat == "D":

View File

@ -192,7 +192,7 @@ def moduleimpl_inscriptions_edit(moduleimpl_id, etuds=[], submitted=False):
)
H.append("""</input></td>""")
groups = sco_groups.get_etud_groups(etud["etudid"], sem)
groups = sco_groups.get_etud_groups(etud["etudid"], formsemestre_id)
for partition in partitions:
if partition["partition_name"]:
gr_name = ""
@ -303,12 +303,9 @@ def moduleimpl_inscriptions_stats(formsemestre_id):
)
for mod in options:
if can_change:
c_link = (
'<a class="discretelink" href="moduleimpl_inscriptions_edit?moduleimpl_id=%s">%s</a>'
% (
mod["moduleimpl_id"],
mod["descri"] or "<i>(inscrire des étudiants)</i>",
)
c_link = '<a class="discretelink" href="moduleimpl_inscriptions_edit?moduleimpl_id=%s">%s</a>' % (
mod["moduleimpl_id"],
mod["descri"] or "<i>(inscrire des étudiants)</i>",
)
else:
c_link = mod["descri"]

View File

@ -235,7 +235,7 @@ def ficheEtud(etudid=None):
)
grlink = '<span class="fontred">%s</span>' % descr["situation"]
else:
group = sco_groups.get_etud_main_group(etudid, sem)
group = sco_groups.get_etud_main_group(etudid, sem["formsemestre_id"])
if group["partition_name"]:
gr_name = group["group_name"]
else:
@ -584,7 +584,7 @@ def etud_info_html(etudid, with_photo="1", debug=False):
elif etud["cursem"]: # le semestre "en cours" pour l'étudiant
sem = etud["cursem"]
if sem:
groups = sco_groups.get_etud_groups(etudid, sem)
groups = sco_groups.get_etud_groups(etudid, formsemestre_id)
grc = sco_groups.listgroups_abbrev(groups)
H += '<div class="eid_info">En <b>S%d</b>: %s</div>' % (sem["semestre_id"], grc)
H += "</div>" # fin partie gauche (eid_left)

View File

@ -414,7 +414,7 @@ def make_formsemestre_recapcomplet(
gr_name = "Déf."
is_dem[etudid] = False
else:
group = sco_groups.get_etud_main_group(etudid, sem)
group = sco_groups.get_etud_main_group(etudid, formsemestre_id)
gr_name = group["group_name"] or ""
is_dem[etudid] = False
if rank_partition_id:
@ -1020,7 +1020,7 @@ def _gen_cell(key: str, row: dict, elt="td"):
"html table cell"
klass = row.get(f"_{key}_class")
attrs = f'class="{klass}"' if klass else ""
order = row.get("_{key}_order")
order = row.get(f"_{key}_order")
if order:
attrs += f' data-order="{order}"'
return f'<{elt} {attrs}>{row.get(key, "")}</{elt}>'

View File

@ -847,7 +847,7 @@ def feuille_saisie_notes(evaluation_id, group_ids=[]):
etuds = _get_sorted_etuds(E, etudids, formsemestre_id)
for e in etuds:
etudid = e["etudid"]
groups = sco_groups.get_etud_groups(etudid, sem)
groups = sco_groups.get_etud_groups(etudid, formsemestre_id)
grc = sco_groups.listgroups_abbrev(groups)
L.append(
@ -1020,7 +1020,7 @@ def _get_sorted_etuds(E, etudids, formsemestre_id):
{"etudid": etudid, "formsemestre_id": formsemestre_id}
)[0]
# Groupes auxquels appartient cet étudiant:
e["groups"] = sco_groups.get_etud_groups(etudid, sem)
e["groups"] = sco_groups.get_etud_groups(etudid, formsemestre_id)
# Information sur absence (tenant compte de la demi-journée)
jour_iso = ndb.DateDMYtoISO(E["jour"])

View File

@ -180,7 +180,9 @@ def pdf_trombino_tours(
n = 1
for m in members:
img = sco_trombino._get_etud_platypus_image(m, image_width=PHOTOWIDTH)
etud_main_group = sco_groups.get_etud_main_group(m["etudid"], sem)
etud_main_group = sco_groups.get_etud_main_group(
m["etudid"], sem["formsemestre_id"]
)
if group_id != etud_main_group["group_id"]:
text_group = " (" + etud_main_group["group_name"] + ")"
else:

View File

@ -3229,6 +3229,7 @@ span.ext_sem_moy {
}
/* DataTables */
table.dataTable tr.odd td {
background-color: #ecf5f4;
}
@ -3250,9 +3251,13 @@ table.table_recap .rang {
white-space:nowrap;
text-align: right;
}
table.table_recap .col_ue, table.table_recap .col_moy_gen {
table.table_recap .col_ue, table.table_recap .col_moy_gen, table.table_recap .group {
border-left: 1px solid blue;
}
table.table_recap .group {
border-left: 1px dashed rgb(160, 160, 160);
}
table.table_recap tfoot th, table.table_recap thead th {
text-align: left;
padding-left: 10px !important;