formsemestre_recap_parcours_table: UE du parcours. Closes #524
This commit is contained in:
parent
be3a7f900d
commit
c29e9fc5bc
@ -220,8 +220,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
||||
)
|
||||
)
|
||||
# Si on part d'un semestre IMPAIR, il n'y aura pas de décision année proposée
|
||||
# (mais on pourra évidemment valmider des UE et même des RCUE)
|
||||
self.jury_annuel: bool = formsemestre.semestre_id in (2, 3, 6)
|
||||
# (mais on pourra évidemment valider des UE et même des RCUE)
|
||||
self.jury_annuel: bool = formsemestre.semestre_id in (2, 4, 6)
|
||||
"vrai si jury de fin d'année scolaire (propose code annuel)"
|
||||
|
||||
self.formsemestre_impair = formsemestre_impair
|
||||
|
@ -62,20 +62,25 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
|
||||
H.append("""<div><em>Pas de décision annuelle (sem. impair)</em></div>""")
|
||||
H.append("""</div>""")
|
||||
|
||||
annee_sco_pair = deca.formsemestre_pair.annee_scolaire()
|
||||
avertissement_redoublement = (
|
||||
f"année {annee_sco_pair}-{annee_sco_pair+1}"
|
||||
if annee_sco_pair != deca.annee_scolaire()
|
||||
else ""
|
||||
)
|
||||
if deca.formsemestre_pair is not None:
|
||||
annee_sco_pair = deca.formsemestre_pair.annee_scolaire()
|
||||
avertissement_redoublement = (
|
||||
f"année {annee_sco_pair}-{annee_sco_pair+1}"
|
||||
if annee_sco_pair != deca.annee_scolaire()
|
||||
else ""
|
||||
)
|
||||
else:
|
||||
avertissement_redoublement = ""
|
||||
|
||||
H.append(
|
||||
f"""
|
||||
<div class="titre_niveaux"><b>Niveaux de compétences et unités d'enseignement</b></div>
|
||||
<div class="but_annee">
|
||||
<div class="titre"></div>
|
||||
<div class="titre">S{deca.formsemestre_impair.semestre_id}</div>
|
||||
<div class="titre">S{deca.formsemestre_pair.semestre_id}
|
||||
<div class="titre">S{deca.formsemestre_impair.semestre_id
|
||||
if deca.formsemestre_impair else "-"}</div>
|
||||
<div class="titre">S{deca.formsemestre_pair.semestre_id
|
||||
if deca.formsemestre_pair else "-"}
|
||||
<span class="avertissement_redoublement">{avertissement_redoublement}</span></div>
|
||||
<div class="titre">RCUE</div>
|
||||
"""
|
||||
@ -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"""<div class="infos_but">
|
||||
{show_etud(deca, read_only=True)}
|
||||
</div>
|
||||
|
@ -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 }
|
||||
"""
|
||||
|
@ -608,45 +608,46 @@ def formsemestre_recap_parcours_table(
|
||||
if nt.is_apc:
|
||||
H.append('<td class="rcp_but">BUT</td>')
|
||||
elif decision_sem:
|
||||
H.append('<td class="rcp_dec">%s</td>' % decision_sem["code"])
|
||||
H.append(
|
||||
f"""<td class="rcp_dec">{
|
||||
decision_sem["code"]}</td>"""
|
||||
)
|
||||
else:
|
||||
H.append("<td><em>en cours</em></td>")
|
||||
H.append('<td class="rcp_nonass">%s</td>' % ass) # abs
|
||||
H.append(f"""<td class="rcp_nonass">{ass}</td>""") # 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('<td class="ue_acro"><span>%s</span></td>' % ue["acronyme"])
|
||||
H.append(f"""<td class="ue_acro"><span>{ue.acronyme}</span></td>""")
|
||||
if len(ues) < Se.nb_max_ue:
|
||||
H.append('<td colspan="%d"></td>' % (Se.nb_max_ue - len(ues)))
|
||||
H.append(f"""<td colspan="{Se.nb_max_ue - len(ues)}"></td>""")
|
||||
# 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("<td><em>compense S%s</em></td>" % csem["semestre_id"])
|
||||
H.append(f"""<td><em>compense S{csem["semestre_id"]}</em></td>""")
|
||||
else:
|
||||
H.append("<td></td>")
|
||||
if with_links:
|
||||
H.append("<td></td>")
|
||||
H.append("</tr>")
|
||||
# 2eme ligne: notes
|
||||
H.append('<tr class="%s rcp_l2 sem_%s">' % (class_sem, sem["formsemestre_id"]))
|
||||
H.append(f"""<tr class="{class_sem} rcp_l2 sem_{sem["formsemestre_id"]}">""")
|
||||
H.append(
|
||||
'<td class="rcp_type_sem" style="background-color:%s;"> </td>'
|
||||
% (bgcolor)
|
||||
f"""<td class="rcp_type_sem"
|
||||
style="background-color:{bgcolor};"> </td>"""
|
||||
)
|
||||
if is_prev:
|
||||
default_sem_info = '<span class="fontred">[sem. précédent]</span>'
|
||||
@ -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(
|
||||
'<td class="datefin">%s</td><td class="sem_info">%s</td>'
|
||||
% (sem["mois_fin"], sem_info.get(sem["formsemestre_id"], default_sem_info))
|
||||
)
|
||||
# Moy Gen (sous le code decision)
|
||||
H.append(
|
||||
'<td class="rcp_moy">%s</td>' % scu.fmt_note(nt.get_etud_moy_gen(etudid))
|
||||
f"""<td class="rcp_moy">{scu.fmt_note(nt.get_etud_moy_gen(etudid))}</td>"""
|
||||
)
|
||||
# Absences (nb d'abs non just. dans ce semestre)
|
||||
nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem)
|
||||
H.append('<td class="rcp_abs">%d</td>' % (nbabs - nbabsjust))
|
||||
H.append(f"""<td class="rcp_abs">{nbabs - nbabsjust}</td>""")
|
||||
|
||||
# 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(
|
||||
'<td class="%s" title="%s">%s</td>'
|
||||
% (class_ue, " ".join(explanation_ue), scu.fmt_note(moy_ue))
|
||||
f"""<td class="{class_ue}" title="{
|
||||
" ".join(explanation_ue)
|
||||
}">{scu.fmt_note(moy_ue)}</td>"""
|
||||
)
|
||||
if len(ues) < Se.nb_max_ue:
|
||||
H.append('<td colspan="%d"></td>' % (Se.nb_max_ue - len(ues)))
|
||||
H.append(f"""<td colspan="{Se.nb_max_ue - len(ues)}"></td>""")
|
||||
|
||||
H.append("<td></td>")
|
||||
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"""<td class="ue" title="{ects:2.2g}/{ects_pot:2.2g} ECTS">{ects:2.2g}</td>"""
|
||||
f"""<td class="ue"
|
||||
title="{ects:2.2g}/{ects_pot:2.2g} ECTS">{ects:2.2g}</td>"""
|
||||
)
|
||||
else:
|
||||
H.append(f"""<td class="ue"></td>""")
|
||||
H.append("""<td class="ue"></td>""")
|
||||
H.append("<td></td></tr>")
|
||||
|
||||
H.append("</table>")
|
||||
|
Loading…
Reference in New Issue
Block a user