From ff63a32bbe59e2505e060e9bff641aa0c0043c1e Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 20 Jan 2024 21:34:28 +0100 Subject: [PATCH] Adaptation a minima de la table 'poursuites' pour le BUT. Closes #849. --- app/scodoc/sco_poursuite_dut.py | 54 +++++++++++++++++---------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/app/scodoc/sco_poursuite_dut.py b/app/scodoc/sco_poursuite_dut.py index f4038962a..ba866e220 100644 --- a/app/scodoc/sco_poursuite_dut.py +++ b/app/scodoc/sco_poursuite_dut.py @@ -38,20 +38,19 @@ from app.comp.res_compat import NotesTableCompat from app.models import FormSemestre import app.scodoc.sco_utils as scu from app.scodoc import sco_assiduites -from app.scodoc import sco_cache from app.scodoc import sco_formsemestre from app.scodoc import sco_groups from app.scodoc import sco_preferences from app.scodoc import sco_etud -import sco_version from app.scodoc.gen_tables import GenTable from app.scodoc.codes_cursus import code_semestre_validant, code_semestre_attente +import sco_version -def etud_get_poursuite_info(sem, etud): +def etud_get_poursuite_info(sem: dict, etud: dict) -> dict: """{ 'nom' : ..., 'semlist' : [ { 'semestre_id': , 'moy' : ... }, {}, ...] }""" - I = {} - I.update(etud) # copie nom, prenom, civilite, ... + infos = {} + infos.update(etud) # copie nom, prenom, civilite, ... # Now add each semester, starting from the first one semlist = [] @@ -92,25 +91,28 @@ def etud_get_poursuite_info(sem, etud): for ue in ues: # on parcourt chaque UE for modimpl in modimpls: # dans chaque UE les modules if modimpl["module"]["ue_id"] == ue["ue_id"]: - codeModule = modimpl["module"]["code"] or "" - noteModule = scu.fmt_note( + code_module = modimpl["module"]["code"] or "" + note_module = scu.fmt_note( nt.get_etud_mod_moy(modimpl["moduleimpl_id"], etudid) ) - if noteModule != "NI": # si étudiant inscrit au module + # si étudiant inscrit au module, sauf BUT + if (note_module != "NI") and not nt.is_apc: if nt.mod_rangs is not None: - rangModule = nt.mod_rangs[modimpl["moduleimpl_id"]][ - 0 - ][etudid] + rang_module = nt.mod_rangs[ + modimpl["moduleimpl_id"] + ][0][etudid] else: - rangModule = "" - modules.append([codeModule, noteModule]) - rangs.append(["rang_" + codeModule, rangModule]) + rang_module = "" + modules.append([code_module, note_module]) + rangs.append(["rang_" + code_module, rang_module]) # Absences nbabs, nbabsjust = sco_assiduites.get_assiduites_count(etudid, nt.sem) - if ( + # En BUT, prend tout, sinon ne prend que les semestre validés par le jury + if nt.is_apc or ( dec - and not sem_descr # not sem_descr pour ne prendre que le semestre validé le plus récent + # not sem_descr pour ne prendre que le semestre validé le plus récent: + and not sem_descr and ( code_semestre_validant(dec["code"]) or code_semestre_attente(dec["code"]) @@ -128,9 +130,8 @@ def etud_get_poursuite_info(sem, etud): ("AbsNonJust", nbabs - nbabsjust), ("AbsJust", nbabsjust), ] - d += ( - moy_ues + rg_ues + modules + rangs - ) # ajout des 2 champs notes des modules et classement dans chaque module + # ajout des 2 champs notes des modules et classement dans chaque module + d += moy_ues + rg_ues + modules + rangs sem_descr = collections.OrderedDict(d) if not sem_descr: sem_descr = collections.OrderedDict( @@ -147,13 +148,14 @@ def etud_get_poursuite_info(sem, etud): sem_descr["semestre_id"] = sem_id semlist.append(sem_descr) - I["semlist"] = semlist - return I + infos["semlist"] = semlist + return infos def _flatten_info(info): - # met la liste des infos semestres "a plat" - # S1_moy, S1_rang, ..., S2_moy, ... + """met la liste des infos semestres "a plat" + S1_moy, S1_rang, ..., S2_moy, ... + """ ids = [] for s in info["semlist"]: for k, v in s.items(): @@ -164,7 +166,7 @@ def _flatten_info(info): return ids -def _getEtudInfoGroupes(group_ids, etat=None): +def _get_etud_info_groupes(group_ids, etat=None): """liste triée d'infos (dict) sur les etudiants du groupe indiqué. Attention: lent, car plusieurs requetes SQL par etudiant ! """ @@ -181,7 +183,7 @@ def _getEtudInfoGroupes(group_ids, etat=None): def formsemestre_poursuite_report(formsemestre_id, fmt="html"): """Table avec informations "poursuite" """ sem = sco_formsemestre.get_formsemestre(formsemestre_id) - etuds = _getEtudInfoGroupes([sco_groups.get_default_group(formsemestre_id)]) + etuds = _get_etud_info_groupes([sco_groups.get_default_group(formsemestre_id)]) infos = [] ids = [] @@ -191,7 +193,7 @@ def formsemestre_poursuite_report(formsemestre_id, fmt="html"): ) etud["_nom_target"] = fiche_url etud["_prenom_target"] = fiche_url - etud["_nom_td_attrs"] = 'id="%s" class="etudinfo"' % (etud["etudid"]) + etud["_nom_td_attrs"] = f"""id="{etud['etudid']}" class="etudinfo" """ info = etud_get_poursuite_info(sem, etud) idd = _flatten_info(info) # On recupere la totalite des UEs dans ids