S{deca.formsemestre_pair.semestre_id}
+
S{deca.formsemestre_impair.semestre_id
+ if deca.formsemestre_impair else "-"}
+
S{deca.formsemestre_pair.semestre_id
+ if deca.formsemestre_pair else "-"}
{avertissement_redoublement}
RCUE
"""
@@ -385,7 +390,7 @@ def infos_fiche_etud_html(etudid: int) -> str:
# temporaire quick & dirty: affiche le dernier
try:
deca = DecisionsProposeesAnnee(etud, formsemestres_but[-1])
- if len(deca.rcues_annee) > 0:
+ if True: # len(deca.rcues_annee) > 0:
return f"""
{show_etud(deca, read_only=True)}
diff --git a/app/comp/res_compat.py b/app/comp/res_compat.py
index fdf6aaada..1e4c80bc1 100644
--- a/app/comp/res_compat.py
+++ b/app/comp/res_compat.py
@@ -25,7 +25,7 @@ class NotesTableCompat(ResultatsSemestre):
"""Implementation partielle de NotesTable
Les méthodes définies dans cette classe sont là
- pour conserver la compatibilité abvec les codes anciens et
+ pour conserver la compatibilité avec les codes anciens et
il n'est pas recommandé de les utiliser dans de nouveaux
développements (API malcommode et peu efficace).
"""
@@ -103,10 +103,9 @@ class NotesTableCompat(ResultatsSemestre):
"""Stats (moy/min/max) sur la moyenne générale"""
return StatsMoyenne(self.etud_moy_gen)
- def get_ues_stat_dict(
- self, filter_sport=False, check_apc_ects=True
- ) -> list[dict]: # was get_ues()
- """Liste des UEs, ordonnée par numero.
+ def get_ues_stat_dict(self, filter_sport=False, check_apc_ects=True) -> list[dict]:
+ """Liste des UEs de toutes les UEs du semestre (tous parcours),
+ ordonnée par numero.
Si filter_sport, retire les UE de type SPORT.
Résultat: liste de dicts { champs UE U stats moyenne UE }
"""
diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py
index 183006e67..b94db9874 100644
--- a/app/scodoc/sco_formsemestre_validation.py
+++ b/app/scodoc/sco_formsemestre_validation.py
@@ -608,45 +608,46 @@ def formsemestre_recap_parcours_table(
if nt.is_apc:
H.append('
BUT | ')
elif decision_sem:
- H.append('
%s | ' % decision_sem["code"])
+ H.append(
+ f"""
{
+ decision_sem["code"]} | """
+ )
else:
H.append("
en cours | ")
- H.append('
%s | ' % ass) # abs
+ H.append(f"""
{ass} | """) # abs
# acronymes UEs auxquelles l'étudiant est inscrit (ou capitalisé)
- ues = nt.get_ues_stat_dict(filter_sport=True)
+ ues = list(nt.etud_ues(etudid))
cnx = ndb.GetDBConnexion()
- etud_ue_status = {
- ue["ue_id"]: nt.get_etud_ue_status(etudid, ue["ue_id"]) for ue in ues
- }
+ etud_ue_status = {ue.id: nt.get_etud_ue_status(etudid, ue.id) for ue in ues}
if not nt.is_apc:
# formations classiques: filtre UE sur inscriptions (et garde UE capitalisées)
ues = [
ue
for ue in ues
- if etud_est_inscrit_ue(cnx, etudid, sem["formsemestre_id"], ue["ue_id"])
- or etud_ue_status[ue["ue_id"]]["is_capitalized"]
+ if etud_est_inscrit_ue(cnx, etudid, sem["formsemestre_id"], ue.id)
+ or etud_ue_status[ue.id]["is_capitalized"]
]
for ue in ues:
- H.append('
%s | ' % ue["acronyme"])
+ H.append(f"""
{ue.acronyme} | """)
if len(ues) < Se.nb_max_ue:
- H.append('
| ' % (Se.nb_max_ue - len(ues)))
+ H.append(f"""
| """)
# indique le semestre compensé par celui ci:
if decision_sem and decision_sem["compense_formsemestre_id"]:
csem = sco_formsemestre.get_formsemestre(
decision_sem["compense_formsemestre_id"]
)
- H.append("
compense S%s | " % csem["semestre_id"])
+ H.append(f"""
compense S{csem["semestre_id"]} | """)
else:
H.append("
| ")
if with_links:
H.append("
| ")
H.append("")
# 2eme ligne: notes
- H.append('
' % (class_sem, sem["formsemestre_id"]))
+ H.append(f"""
""")
H.append(
- ' | '
- % (bgcolor)
+ f""" | """
)
if is_prev:
default_sem_info = '[sem. précédent]'
@@ -656,26 +657,26 @@ def formsemestre_recap_parcours_table(
lockicon = scu.icontag("lock32_img", title="verrouillé", border="0")
default_sem_info += lockicon
if sem["formation_code"] != Se.formation.formation_code:
- default_sem_info += "Autre formation: %s" % sem["formation_code"]
+ default_sem_info += f"""Autre formation: {sem["formation_code"]}"""
H.append(
'%s | %s | '
% (sem["mois_fin"], sem_info.get(sem["formsemestre_id"], default_sem_info))
)
# Moy Gen (sous le code decision)
H.append(
- '%s | ' % scu.fmt_note(nt.get_etud_moy_gen(etudid))
+ f"""{scu.fmt_note(nt.get_etud_moy_gen(etudid))} | """
)
# Absences (nb d'abs non just. dans ce semestre)
nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem)
- H.append('%d | ' % (nbabs - nbabsjust))
+ H.append(f"""{nbabs - nbabsjust} | """)
# UEs
for ue in ues:
- if decisions_ue and ue["ue_id"] in decisions_ue:
- code = decisions_ue[ue["ue_id"]]["code"]
+ if decisions_ue and ue.id in decisions_ue:
+ code = decisions_ue[ue.id]["code"]
else:
code = ""
- ue_status = etud_ue_status[ue["ue_id"]]
+ ue_status = etud_ue_status[ue.id]
moy_ue = ue_status["moy"] if ue_status else ""
explanation_ue = [] # list of strings
if code == ADM:
@@ -690,15 +691,16 @@ def formsemestre_recap_parcours_table(
if ue_status and ue_status["is_capitalized"]:
class_ue += " ue_capitalized"
explanation_ue.append(
- "Capitalisée le %s." % (ue_status["event_date"] or "?")
+ f"""Capitalisée le {ue_status["event_date"] or "?"}."""
)
H.append(
- '%s | '
- % (class_ue, " ".join(explanation_ue), scu.fmt_note(moy_ue))
+ f"""{scu.fmt_note(moy_ue)} | """
)
if len(ues) < Se.nb_max_ue:
- H.append(' | ' % (Se.nb_max_ue - len(ues)))
+ H.append(f""" | """)
H.append(" | ")
if with_links:
@@ -728,15 +730,16 @@ def formsemestre_recap_parcours_table(
)
# ECTS validables dans chaque UE
for ue in ues:
- ue_status = nt.get_etud_ue_status(etudid, ue["ue_id"])
+ ue_status = nt.get_etud_ue_status(etudid, ue.id)
if ue_status:
ects = ue_status["ects"]
ects_pot = ue_status["ects_pot"]
H.append(
- f"""{ects:2.2g} | """
+ f"""{ects:2.2g} | """
)
else:
- H.append(f""" | """)
+ H.append(""" | """)
H.append(" |
")
H.append("")