forked from ScoDoc/DocScoDoc
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
|
# 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)
|
# (mais on pourra évidemment valider des UE et même des RCUE)
|
||||||
self.jury_annuel: bool = formsemestre.semestre_id in (2, 3, 6)
|
self.jury_annuel: bool = formsemestre.semestre_id in (2, 4, 6)
|
||||||
"vrai si jury de fin d'année scolaire (propose code annuel)"
|
"vrai si jury de fin d'année scolaire (propose code annuel)"
|
||||||
|
|
||||||
self.formsemestre_impair = formsemestre_impair
|
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><em>Pas de décision annuelle (sem. impair)</em></div>""")
|
||||||
H.append("""</div>""")
|
H.append("""</div>""")
|
||||||
|
|
||||||
annee_sco_pair = deca.formsemestre_pair.annee_scolaire()
|
if deca.formsemestre_pair is not None:
|
||||||
avertissement_redoublement = (
|
annee_sco_pair = deca.formsemestre_pair.annee_scolaire()
|
||||||
f"année {annee_sco_pair}-{annee_sco_pair+1}"
|
avertissement_redoublement = (
|
||||||
if annee_sco_pair != deca.annee_scolaire()
|
f"année {annee_sco_pair}-{annee_sco_pair+1}"
|
||||||
else ""
|
if annee_sco_pair != deca.annee_scolaire()
|
||||||
)
|
else ""
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
avertissement_redoublement = ""
|
||||||
|
|
||||||
H.append(
|
H.append(
|
||||||
f"""
|
f"""
|
||||||
<div class="titre_niveaux"><b>Niveaux de compétences et unités d'enseignement</b></div>
|
<div class="titre_niveaux"><b>Niveaux de compétences et unités d'enseignement</b></div>
|
||||||
<div class="but_annee">
|
<div class="but_annee">
|
||||||
<div class="titre"></div>
|
<div class="titre"></div>
|
||||||
<div class="titre">S{deca.formsemestre_impair.semestre_id}</div>
|
<div class="titre">S{deca.formsemestre_impair.semestre_id
|
||||||
<div class="titre">S{deca.formsemestre_pair.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>
|
<span class="avertissement_redoublement">{avertissement_redoublement}</span></div>
|
||||||
<div class="titre">RCUE</div>
|
<div class="titre">RCUE</div>
|
||||||
"""
|
"""
|
||||||
@ -385,7 +390,7 @@ def infos_fiche_etud_html(etudid: int) -> str:
|
|||||||
# temporaire quick & dirty: affiche le dernier
|
# temporaire quick & dirty: affiche le dernier
|
||||||
try:
|
try:
|
||||||
deca = DecisionsProposeesAnnee(etud, formsemestres_but[-1])
|
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">
|
return f"""<div class="infos_but">
|
||||||
{show_etud(deca, read_only=True)}
|
{show_etud(deca, read_only=True)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -25,7 +25,7 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
"""Implementation partielle de NotesTable
|
"""Implementation partielle de NotesTable
|
||||||
|
|
||||||
Les méthodes définies dans cette classe sont là
|
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
|
il n'est pas recommandé de les utiliser dans de nouveaux
|
||||||
développements (API malcommode et peu efficace).
|
développements (API malcommode et peu efficace).
|
||||||
"""
|
"""
|
||||||
@ -103,10 +103,9 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
"""Stats (moy/min/max) sur la moyenne générale"""
|
"""Stats (moy/min/max) sur la moyenne générale"""
|
||||||
return StatsMoyenne(self.etud_moy_gen)
|
return StatsMoyenne(self.etud_moy_gen)
|
||||||
|
|
||||||
def get_ues_stat_dict(
|
def get_ues_stat_dict(self, filter_sport=False, check_apc_ects=True) -> list[dict]:
|
||||||
self, filter_sport=False, check_apc_ects=True
|
"""Liste des UEs de toutes les UEs du semestre (tous parcours),
|
||||||
) -> list[dict]: # was get_ues()
|
ordonnée par numero.
|
||||||
"""Liste des UEs, ordonnée par numero.
|
|
||||||
Si filter_sport, retire les UE de type SPORT.
|
Si filter_sport, retire les UE de type SPORT.
|
||||||
Résultat: liste de dicts { champs UE U stats moyenne UE }
|
Résultat: liste de dicts { champs UE U stats moyenne UE }
|
||||||
"""
|
"""
|
||||||
|
@ -608,45 +608,46 @@ def formsemestre_recap_parcours_table(
|
|||||||
if nt.is_apc:
|
if nt.is_apc:
|
||||||
H.append('<td class="rcp_but">BUT</td>')
|
H.append('<td class="rcp_but">BUT</td>')
|
||||||
elif decision_sem:
|
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:
|
else:
|
||||||
H.append("<td><em>en cours</em></td>")
|
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é)
|
# 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()
|
cnx = ndb.GetDBConnexion()
|
||||||
etud_ue_status = {
|
etud_ue_status = {ue.id: nt.get_etud_ue_status(etudid, ue.id) for ue in ues}
|
||||||
ue["ue_id"]: nt.get_etud_ue_status(etudid, ue["ue_id"]) for ue in ues
|
|
||||||
}
|
|
||||||
if not nt.is_apc:
|
if not nt.is_apc:
|
||||||
# formations classiques: filtre UE sur inscriptions (et garde UE capitalisées)
|
# formations classiques: filtre UE sur inscriptions (et garde UE capitalisées)
|
||||||
ues = [
|
ues = [
|
||||||
ue
|
ue
|
||||||
for ue in ues
|
for ue in ues
|
||||||
if etud_est_inscrit_ue(cnx, etudid, sem["formsemestre_id"], ue["ue_id"])
|
if etud_est_inscrit_ue(cnx, etudid, sem["formsemestre_id"], ue.id)
|
||||||
or etud_ue_status[ue["ue_id"]]["is_capitalized"]
|
or etud_ue_status[ue.id]["is_capitalized"]
|
||||||
]
|
]
|
||||||
|
|
||||||
for ue in ues:
|
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:
|
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:
|
# indique le semestre compensé par celui ci:
|
||||||
if decision_sem and decision_sem["compense_formsemestre_id"]:
|
if decision_sem and decision_sem["compense_formsemestre_id"]:
|
||||||
csem = sco_formsemestre.get_formsemestre(
|
csem = sco_formsemestre.get_formsemestre(
|
||||||
decision_sem["compense_formsemestre_id"]
|
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:
|
else:
|
||||||
H.append("<td></td>")
|
H.append("<td></td>")
|
||||||
if with_links:
|
if with_links:
|
||||||
H.append("<td></td>")
|
H.append("<td></td>")
|
||||||
H.append("</tr>")
|
H.append("</tr>")
|
||||||
# 2eme ligne: notes
|
# 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(
|
H.append(
|
||||||
'<td class="rcp_type_sem" style="background-color:%s;"> </td>'
|
f"""<td class="rcp_type_sem"
|
||||||
% (bgcolor)
|
style="background-color:{bgcolor};"> </td>"""
|
||||||
)
|
)
|
||||||
if is_prev:
|
if is_prev:
|
||||||
default_sem_info = '<span class="fontred">[sem. précédent]</span>'
|
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")
|
lockicon = scu.icontag("lock32_img", title="verrouillé", border="0")
|
||||||
default_sem_info += lockicon
|
default_sem_info += lockicon
|
||||||
if sem["formation_code"] != Se.formation.formation_code:
|
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(
|
H.append(
|
||||||
'<td class="datefin">%s</td><td class="sem_info">%s</td>'
|
'<td class="datefin">%s</td><td class="sem_info">%s</td>'
|
||||||
% (sem["mois_fin"], sem_info.get(sem["formsemestre_id"], default_sem_info))
|
% (sem["mois_fin"], sem_info.get(sem["formsemestre_id"], default_sem_info))
|
||||||
)
|
)
|
||||||
# Moy Gen (sous le code decision)
|
# Moy Gen (sous le code decision)
|
||||||
H.append(
|
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)
|
# Absences (nb d'abs non just. dans ce semestre)
|
||||||
nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem)
|
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
|
# UEs
|
||||||
for ue in ues:
|
for ue in ues:
|
||||||
if decisions_ue and ue["ue_id"] in decisions_ue:
|
if decisions_ue and ue.id in decisions_ue:
|
||||||
code = decisions_ue[ue["ue_id"]]["code"]
|
code = decisions_ue[ue.id]["code"]
|
||||||
else:
|
else:
|
||||||
code = ""
|
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 ""
|
moy_ue = ue_status["moy"] if ue_status else ""
|
||||||
explanation_ue = [] # list of strings
|
explanation_ue = [] # list of strings
|
||||||
if code == ADM:
|
if code == ADM:
|
||||||
@ -690,15 +691,16 @@ def formsemestre_recap_parcours_table(
|
|||||||
if ue_status and ue_status["is_capitalized"]:
|
if ue_status and ue_status["is_capitalized"]:
|
||||||
class_ue += " ue_capitalized"
|
class_ue += " ue_capitalized"
|
||||||
explanation_ue.append(
|
explanation_ue.append(
|
||||||
"Capitalisée le %s." % (ue_status["event_date"] or "?")
|
f"""Capitalisée le {ue_status["event_date"] or "?"}."""
|
||||||
)
|
)
|
||||||
|
|
||||||
H.append(
|
H.append(
|
||||||
'<td class="%s" title="%s">%s</td>'
|
f"""<td class="{class_ue}" title="{
|
||||||
% (class_ue, " ".join(explanation_ue), scu.fmt_note(moy_ue))
|
" ".join(explanation_ue)
|
||||||
|
}">{scu.fmt_note(moy_ue)}</td>"""
|
||||||
)
|
)
|
||||||
if len(ues) < Se.nb_max_ue:
|
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>")
|
H.append("<td></td>")
|
||||||
if with_links:
|
if with_links:
|
||||||
@ -728,15 +730,16 @@ def formsemestre_recap_parcours_table(
|
|||||||
)
|
)
|
||||||
# ECTS validables dans chaque UE
|
# ECTS validables dans chaque UE
|
||||||
for ue in ues:
|
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:
|
if ue_status:
|
||||||
ects = ue_status["ects"]
|
ects = ue_status["ects"]
|
||||||
ects_pot = ue_status["ects_pot"]
|
ects_pot = ue_status["ects_pot"]
|
||||||
H.append(
|
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:
|
else:
|
||||||
H.append(f"""<td class="ue"></td>""")
|
H.append("""<td class="ue"></td>""")
|
||||||
H.append("<td></td></tr>")
|
H.append("<td></td></tr>")
|
||||||
|
|
||||||
H.append("</table>")
|
H.append("</table>")
|
||||||
|
Loading…
Reference in New Issue
Block a user