From 4921d451295bb75e47bce34f5c5075ff47c7fa3c Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 13 Jul 2022 11:30:01 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20PV=20jury=20/=20cas=20rare=20sans=20d?= =?UTF-8?q?=C3=A9cision=20d'ann=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_apogee_csv.py | 28 +++++++++++++++++++++++++--- app/scodoc/sco_formsemestre_edit.py | 4 ++-- app/scodoc/sco_pvjury.py | 8 ++++---- app/scodoc/sco_pvpdf.py | 17 +++++++++++------ sco_version.py | 2 +- 5 files changed, 43 insertions(+), 16 deletions(-) diff --git a/app/scodoc/sco_apogee_csv.py b/app/scodoc/sco_apogee_csv.py index da1aed8de..eef95a092 100644 --- a/app/scodoc/sco_apogee_csv.py +++ b/app/scodoc/sco_apogee_csv.py @@ -260,6 +260,8 @@ class ApoEtud(dict): self["naissance"] = naissance self.cols = cols "{ col_id : value } colid = 'apoL_c0001'" + self.is_apc = None + "Vrai si BUT" self.col_elts = {} "{'V1RT': {'R': 'ADM', 'J': '', 'B': 20, 'N': '12.14'}}" self.new_cols = {} # { col_id : value to record in csv } @@ -431,6 +433,8 @@ class ApoEtud(dict): return VOID_APO_RES # Elements UE + # if etudid == 3661 and nt.formsemestre.semestre_id == 2: # XXX XXX XXX + # breakpoint() decisions_ue = nt.get_etud_decision_ues(etudid) for ue in nt.get_ues_stat_dict(): if ue["code_apogee"] and code in { @@ -472,6 +476,9 @@ class ApoEtud(dict): def comp_elt_semestre(self, nt, decision, etudid): """Calcul résultat apo semestre""" + if self.is_apc: + # pas de code semestre en APC ! + return dict(N="", B=20, J="", R="", M="") if decision is None: etud = Identite.query.get(etudid) nomprenom = etud.nomprenom if etud else "(inconnu)" @@ -565,7 +572,8 @@ class ApoEtud(dict): il faut considérer les deux semestres ((S1,S2) ou (S3,S4)) pour calculer le code annuel (VET ou VRT1A (voir elt_annee_apo)). - Pour les jurys intermediaires (janvier, S1 ou S3): (S2 ou S4) de la même étape lors d'une année précédente ? + Pour les jurys intermediaires (janvier, S1 ou S3): (S2 ou S4) de la même + étape lors d'une année précédente ? Renvoie le semestre "courant" et l'autre semestre, ou None s'il n'y en a pas. """ @@ -687,6 +695,8 @@ class ApoData(object): self.export_res_rat = export_res_rat self.orig_filename = orig_filename self.periode = periode # + self.is_apc = None + "Vrai si BUT" try: self.read_csv(data) except ScoFormatError as e: @@ -722,8 +732,19 @@ class ApoData(object): def setup(self): """Recherche semestres ScoDoc concernés""" self.sems_etape = comp_apo_sems(self.etape_apogee, self.annee_scolaire) + self.formsemestres_etape = [ + FormSemestre.query.get_or_404(s["formsemestre_id"]) for s in self.sems_etape + ] + apcs = { + formsemestre.formation.is_apc() for formsemestre in self.formsemestres_etape + } + if len(apcs) != 1: + raise ScoValueError( + "l'ensemble mixe des semestres BUT (APC) et des semestres classiques !" + ) + self.is_apc = apcs.pop() self.etape_formsemestre_ids = {s["formsemestre_id"] for s in self.sems_etape} - if self.periode != None: + if self.periode is not None: self.sems_periode = [ s for s in self.sems_etape @@ -1126,7 +1147,7 @@ def _apo_skip_section(f): # ------------------------------------- -def comp_apo_sems(etape_apogee, annee_scolaire): +def comp_apo_sems(etape_apogee, annee_scolaire: int) -> list[dict]: """ :param etape_apogee: etape (string or ApoEtapeVDI) :param annee_scolaire: annee (int) @@ -1224,6 +1245,7 @@ def export_csv_to_apogee( apo_data.setup() # -> .sems_etape for e in apo_data.etuds: + e.is_apc = apo_data.is_apc e.lookup_scodoc(apo_data.etape_formsemestre_ids) e.associate_sco(apo_data) diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index 507e409fa..ab96e1468 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -419,7 +419,7 @@ def do_formsemestre_createwithmodules(edit=False): { "size": 32, "title": "Element(s) Apogée:", - "explanation": "du semestre (ex: VRTW1). Séparés par des virgules.", + "explanation": "associé(s) au résultat du semestre (ex: VRTW1). Inutile en BUT. Séparés par des virgules.", "allow_null": not sco_preferences.get_preference( "always_require_apo_sem_codes" ), @@ -432,7 +432,7 @@ def do_formsemestre_createwithmodules(edit=False): { "size": 32, "title": "Element(s) Apogée:", - "explanation": "de l'année (ex: VRT1A). Séparés par des virgules.", + "explanation": "associé(s) au résultat de l'année (ex: VRT1A). Séparés par des virgules.", "allow_null": not sco_preferences.get_preference( "always_require_apo_sem_codes" ), diff --git a/app/scodoc/sco_pvjury.py b/app/scodoc/sco_pvjury.py index 395f6107d..651032c05 100644 --- a/app/scodoc/sco_pvjury.py +++ b/app/scodoc/sco_pvjury.py @@ -236,8 +236,8 @@ def dict_pvjury( has_prev = False # vrai si au moins un etudiant a un code prev semestre_non_terminal = False # True si au moins un etudiant a un devenir - L = [] - D = {} # même chose que L, mais { etudid : dec } + decisions = [] + D = {} # même chose que decisions, mais { etudid : dec } for etudid in etudids: # etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0] etud: Identite = Identite.query.get(etudid) @@ -353,7 +353,7 @@ def dict_pvjury( d["prev_code_descr"] = "" d["Se"] = Se - L.append(d) + decisions.append(d) D[etudid] = d return { @@ -364,7 +364,7 @@ def dict_pvjury( "formation": sco_formations.formation_list( args={"formation_id": sem["formation_id"]} )[0], - "decisions": L, + "decisions": decisions, "decisions_dict": D, } diff --git a/app/scodoc/sco_pvpdf.py b/app/scodoc/sco_pvpdf.py index ac067339a..e086ee992 100644 --- a/app/scodoc/sco_pvpdf.py +++ b/app/scodoc/sco_pvpdf.py @@ -631,12 +631,17 @@ def add_apc_infos(formsemestre: FormSemestre, params: dict, decision: dict): """Ajoute les champs pour les formations APC (BUT), donc avec codes RCUE et année""" annee_but = (formsemestre.semestre_id + 1) // 2 params["decision_orig"] = f"année BUT{annee_but}" - params["decision_sem_descr"] = decision.get("decision_annee", {}).get("code", "") - params[ - "decision_ue_txt" - ] = f"""{params["decision_ue_txt"]}
- Niveaux de compétences:
{decision.get("descr_decisions_rcue", "")} - """ + if decision is None: + params["decision_sem_descr"] = "" + params["decision_ue_txt"] = "" + else: + decision_annee = decision.get("decision_annee") or {} + params["decision_sem_descr"] = decision_annee.get("code") or "" + params[ + "decision_ue_txt" + ] = f"""{params["decision_ue_txt"]}
+ Niveaux de compétences:
{decision.get("descr_decisions_rcue") or ""} + """ # ---------------------------------------------- diff --git a/sco_version.py b/sco_version.py index 83068bb61..0de26319f 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.3.19" +SCOVERSION = "9.3.20" SCONAME = "ScoDoc"