forked from ScoDoc/ScoDoc
Ré-écriture de formation_list_table
This commit is contained in:
parent
246fa62920
commit
b924be56bb
@ -824,7 +824,8 @@ FORMATION_CURSUS_DESCRS = [p[1].__doc__ for p in _tp] # intitulés (eg pour men
|
||||
FORMATION_CURSUS_TYPES = [p[0] for p in _tp] # codes numeriques (TYPE_CURSUS)
|
||||
|
||||
|
||||
def get_cursus_from_code(code_cursus):
|
||||
def get_cursus_from_code(code_cursus: int) -> TypeCursus:
|
||||
"renvoie le cursus de code indiqué"
|
||||
cursus = SCO_CURSUS.get(code_cursus)
|
||||
if cursus is None:
|
||||
log(f"Warning: invalid code_cursus: {code_cursus}")
|
||||
|
@ -38,7 +38,7 @@ import app.scodoc.sco_utils as scu
|
||||
import app.scodoc.notesdb as ndb
|
||||
from app import db
|
||||
from app import log
|
||||
from app.models import Formation, Module, UniteEns
|
||||
from app.models import Formation, FormSemestre, Module, UniteEns
|
||||
from app.models import ScolarNews
|
||||
from app.models.but_refcomp import (
|
||||
ApcAppCritique,
|
||||
@ -431,13 +431,12 @@ def formation_import_xml(doc: str, import_tags=True, use_local_refcomp=False):
|
||||
return formation.id, modules_old2new, ues_old2new
|
||||
|
||||
|
||||
def formation_list_table(formation_id=None, args: dict = None):
|
||||
def formation_list_table() -> GenTable:
|
||||
"""List formation, grouped by titre and sorted by versions
|
||||
and listing associated semestres
|
||||
returns a table
|
||||
"""
|
||||
args = args or {}
|
||||
formations = formation_list(formation_id=formation_id, args=args)
|
||||
formations: list[Formation] = Formation.query.filter_by(dept_id=g.scodoc_dept_id)
|
||||
title = "Programmes pédagogiques"
|
||||
lockicon = scu.icontag(
|
||||
"lock32_img", title="Comporte des semestres verrouillés", border="0"
|
||||
@ -452,82 +451,89 @@ def formation_list_table(formation_id=None, args: dict = None):
|
||||
editable = current_user.has_permission(Permission.ScoChangeFormation)
|
||||
|
||||
# Traduit/ajoute des champs à afficher:
|
||||
for f in formations:
|
||||
try:
|
||||
f["parcours_name"] = codes_cursus.get_cursus_from_code(
|
||||
f["type_parcours"]
|
||||
).NAME
|
||||
except:
|
||||
f["parcours_name"] = ""
|
||||
f["_titre_target"] = url_for(
|
||||
rows = []
|
||||
for formation in formations:
|
||||
acronyme_no_spaces = formation.acronyme.lower().replace(" ", "-")
|
||||
row = {
|
||||
"acronyme": formation.acronyme,
|
||||
"parcours_name": codes_cursus.get_cursus_from_code(
|
||||
formation.type_parcours
|
||||
).NAME,
|
||||
"titre": formation.titre,
|
||||
"_titre_target": url_for(
|
||||
"notes.ue_table",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
formation_id=str(f["formation_id"]),
|
||||
)
|
||||
f["_titre_link_class"] = "stdlink"
|
||||
f["_titre_id"] = "titre-%s" % f["acronyme"].lower().replace(" ", "-")
|
||||
formation_id=formation.id,
|
||||
),
|
||||
"_titre_link_class": "stdlink",
|
||||
"_titre_id": f"""titre-{acronyme_no_spaces}""",
|
||||
"version": formation.version or 0,
|
||||
}
|
||||
# Ajoute les semestres associés à chaque formation:
|
||||
f["sems"] = sco_formsemestre.do_formsemestre_list(
|
||||
args={"formation_id": f["formation_id"]}
|
||||
row["formsemestres"] = formation.formsemestres.order_by(
|
||||
FormSemestre.date_debut
|
||||
).all()
|
||||
row["sems_list_txt"] = ", ".join(s.session_id() for s in row["formsemestres"])
|
||||
row["_sems_list_txt_html"] = (
|
||||
", ".join(
|
||||
f"""<a class="discretelink" href="{
|
||||
url_for("notes.formsemestre_status",
|
||||
scodoc_dept=g.scodoc_dept, formsemestre_id=s.id
|
||||
)}">{s.session_id()}</a>
|
||||
"""
|
||||
for s in row["formsemestres"]
|
||||
)
|
||||
f["sems_list_txt"] = ", ".join([s["session_id"] for s in f["sems"]])
|
||||
f["_sems_list_txt_html"] = ", ".join(
|
||||
[
|
||||
'<a class="discretelink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%('
|
||||
"session_id)s<a> " % s
|
||||
for s in f["sems"]
|
||||
]
|
||||
+ (
|
||||
[
|
||||
'<a class="stdlink" id="add-semestre-%s" '
|
||||
'href="formsemestre_createwithmodules?formation_id=%s&semestre_id=1">ajouter</a> '
|
||||
% (f["acronyme"].lower().replace(" ", "-"), f["formation_id"])
|
||||
]
|
||||
if current_user.has_permission(Permission.ScoImplement)
|
||||
else []
|
||||
+ f""", <a class="stdlink" id="add-semestre-{
|
||||
formation.acronyme.lower().replace(" ", "-")}"
|
||||
href={ url_for("notes.formsemestre_createwithmodules",
|
||||
scodoc_dept=g.scodoc_dept, formation_id=formation.id, semestre_id=1
|
||||
)
|
||||
}">ajouter</a>
|
||||
"""
|
||||
)
|
||||
if f["sems"]:
|
||||
f["date_fin_dernier_sem"] = max([s["date_fin_iso"] for s in f["sems"]])
|
||||
f["annee_dernier_sem"] = f["date_fin_dernier_sem"].split("-")[0]
|
||||
if row["formsemestres"]:
|
||||
row["date_fin_dernier_sem"] = (
|
||||
row["formsemestres"][-1].date_fin.isoformat(),
|
||||
)
|
||||
row["annee_dernier_sem"] = row["formsemestres"][-1].date_fin.year
|
||||
else:
|
||||
f["date_fin_dernier_sem"] = ""
|
||||
f["annee_dernier_sem"] = ""
|
||||
formation: Formation = Formation.query.get_or_404(f["formation_id"])
|
||||
locked = formation.has_locked_sems()
|
||||
row["date_fin_dernier_sem"] = ""
|
||||
row["annee_dernier_sem"] = 0
|
||||
#
|
||||
if locked:
|
||||
if formation.has_locked_sems():
|
||||
but_locked = lockicon
|
||||
but_suppr = '<span class="but_placeholder"></span>'
|
||||
else:
|
||||
but_locked = '<span class="but_placeholder"></span>'
|
||||
if editable and not locked:
|
||||
but_suppr = (
|
||||
'<a class="stdlink" href="formation_delete?formation_id=%s" id="delete-formation-%s">%s</a>'
|
||||
% (
|
||||
f["formation_id"],
|
||||
f["acronyme"].lower().replace(" ", "-"),
|
||||
suppricon,
|
||||
)
|
||||
)
|
||||
if editable:
|
||||
but_suppr = f"""<a class="stdlink" href="{
|
||||
url_for("notes.formation_delete",
|
||||
scodoc_dept=g.scodoc_dept, formation_id=formation.id
|
||||
)}" id="delete-formation-{acronyme_no_spaces}">{suppricon}</a>"""
|
||||
else:
|
||||
but_suppr = '<span class="but_placeholder"></span>'
|
||||
if editable:
|
||||
but_edit = (
|
||||
'<a class="stdlink" href="formation_edit?formation_id=%s" id="edit-formation-%s">%s</a>'
|
||||
% (f["formation_id"], f["acronyme"].lower().replace(" ", "-"), editicon)
|
||||
)
|
||||
but_edit = f"""<a class="stdlink" href="{
|
||||
url_for("notes.formation_edit", scodoc_dept=g.scodoc_dept, formation_id=formation.id)
|
||||
}" id="edit-formation-{acronyme_no_spaces}">{editicon}</a>"""
|
||||
else:
|
||||
but_edit = '<span class="but_placeholder"></span>'
|
||||
f["buttons"] = ""
|
||||
f["_buttons_html"] = but_locked + but_suppr + but_edit
|
||||
# Tri par annee_denier_sem, type, acronyme, titre, version décroissante
|
||||
formations.sort(key=itemgetter("version"), reverse=True)
|
||||
formations.sort(key=itemgetter("titre"))
|
||||
formations.sort(key=itemgetter("acronyme"))
|
||||
formations.sort(key=itemgetter("parcours_name"))
|
||||
formations.sort(
|
||||
key=itemgetter("annee_dernier_sem"), reverse=True
|
||||
) # plus recemments utilises en tete
|
||||
row["buttons"] = ""
|
||||
row["_buttons_html"] = but_locked + but_suppr + but_edit
|
||||
rows.append(row)
|
||||
# Tri par annee_dernier_sem, type, acronyme, titre, version décroissante
|
||||
# donc plus récemment utilsiée en tête
|
||||
rows.sort(
|
||||
key=lambda row: (
|
||||
-row["annee_dernier_sem"],
|
||||
row["parcours_name"],
|
||||
row["acronyme"],
|
||||
row["titre"],
|
||||
-row["version"],
|
||||
)
|
||||
)
|
||||
for i, row in enumerate(rows):
|
||||
row["_buttons_order"] = f"{i:05d}"
|
||||
|
||||
#
|
||||
columns_ids = (
|
||||
@ -550,18 +556,16 @@ def formation_list_table(formation_id=None, args: dict = None):
|
||||
}
|
||||
return GenTable(
|
||||
columns_ids=columns_ids,
|
||||
rows=formations,
|
||||
rows=rows,
|
||||
titles=titles,
|
||||
origin="Généré par %s le " % sco_version.SCONAME
|
||||
+ scu.timedate_human_repr()
|
||||
+ "",
|
||||
origin=f"Généré par {sco_version.SCONAME} le {scu.timedate_human_repr()}",
|
||||
caption=title,
|
||||
html_caption=title,
|
||||
table_id="formation_list_table",
|
||||
html_class="formation_list_table table_leftalign",
|
||||
html_with_td_classes=True,
|
||||
html_sortable=True,
|
||||
base_url="%s?formation_id=%s" % (request.base_url, formation_id),
|
||||
base_url="{request.base_url}?formation_id={formation_id}",
|
||||
page_title=title,
|
||||
pdf_title=title,
|
||||
preferences=sco_preferences.SemPreferences(),
|
||||
|
Loading…
Reference in New Issue
Block a user