From c29312e5114c353db4efeb4ff0498d77514d285c Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 9 Feb 2022 00:36:50 +0100 Subject: [PATCH] Fix: divers petits bugs --- app/comp/res_but.py | 4 +- app/comp/res_common.py | 17 ++++++++- app/models/formsemestre.py | 45 +++++++++++++++++++++++ app/scodoc/sco_bulletins.py | 2 +- app/scodoc/sco_bulletins_pdf.py | 2 +- app/scodoc/sco_formsemestre_validation.py | 9 ++--- 6 files changed, 68 insertions(+), 11 deletions(-) diff --git a/app/comp/res_but.py b/app/comp/res_but.py index 7b979776..f70ed0b0 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -114,7 +114,9 @@ class ResultatsSemestreBUT(NotesTableCompat): mod_idx = self.modimpl_coefs_df.columns.get_loc(moduleimpl_id) etud_idx = self.etud_index[etudid] # moyenne sur les UE: - return np.nanmean(self.sem_cube[etud_idx, mod_idx]) + if len(self.sem_cube[etud_idx, mod_idx]): + return np.nanmean(self.sem_cube[etud_idx, mod_idx]) + return np.nan def compute_etud_ue_coef(self, etudid: int, ue: UniteEns) -> float: """Détermine le coefficient de l'UE pour cet étudiant. diff --git a/app/comp/res_common.py b/app/comp/res_common.py index 09d3ed75..1aa993e8 100644 --- a/app/comp/res_common.py +++ b/app/comp/res_common.py @@ -216,11 +216,24 @@ class ResultatsSemestre(ResultatsCache): def get_etud_ue_status(self, etudid: int, ue_id: int) -> dict: """L'état de l'UE pour cet étudiant. - Result: dict + L'UE doit être du semestre. + Result: dict. """ if not self.validations: self.validations = res_sem.load_formsemestre_validations(self.formsemestre) ue = UniteEns.query.get(ue_id) # TODO cacher nos UEs ? + if ue.type == UE_SPORT: + return { + "is_capitalized": False, + "is_external": False, + "coef_ue": 0.0, + "cur_moy_ue": 0.0, + "moy": 0.0, + "event_date": None, + "ue": ue.to_dict(), + "formsemestre_id": None, + "capitalized_ue_id": None, + } cur_moy_ue = self.etud_moy_ue[ue_id][etudid] moy_ue = cur_moy_ue is_capitalized = False @@ -464,7 +477,7 @@ class NotesTableCompat(ResultatsSemestre): ects_pot += ue.ects return { "ects_pot": ects_pot, - "ects_fond": 0.0, # not implemented (anciennemment pour école ingé) + "ects_pot_fond": 0.0, # not implemented (anciennemment pour école ingé) } def get_etud_rang(self, etudid: int): diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py index 932e3fec..9ed1636a 100644 --- a/app/models/formsemestre.py +++ b/app/models/formsemestre.py @@ -132,7 +132,47 @@ class FormSemestre(db.Model): else: d["date_fin"] = d["date_fin_iso"] = "" d["responsables"] = [u.id for u in self.responsables] + return d + def get_infos_dict(self) -> dict: + """Un dict avec des informations sur le semestre + pour les bulletins et autres templates + (contenu compatible scodoc7 / anciens templates) + """ + d = self.to_dict() + d["anneescolaire"] = self.annee_scolaire_str() + d["annee_debut"] = str(self.date_debut.year) + d["annee"] = d["annee_debut"] + d["annee_fin"] = str(self.date_fin.year) + d["mois_debut_ord"] = self.date_debut.month + d["mois_fin_ord"] = self.date_fin.month + # La période: considère comme "S1" (ou S3) les débuts en aout-sept-octobre + # devrait sans doute pouvoir etre changé... + if self.date_debut.month >= 8 and self.date_debut.month <= 10: + d["periode"] = 1 # typiquement, début en septembre: S1, S3... + else: + d["periode"] = 2 # typiquement, début en février: S2, S4... + d["titre_num"] = self.titre_num + d["titreannee"] = "%s %s %s" % ( + d["titre_num"], + self.modalite or "", + self.date_debut.year, + ) + if d["annee_fin"] != d["annee_debut"]: + d["titreannee"] += "-" + str(d["annee_fin"]) + d["annee"] += "-" + str(d["annee_fin"]) + d["mois_debut"] = f"{self.date_debut.month} {self.date_debut.year}" + d["mois_fin"] = f"{self.date_fin.month} {self.date_fin.year}" + d["titremois"] = "%s %s (%s - %s)" % ( + d["titre_num"], + self.modalite or "", + d["mois_debut"], + d["mois_fin"], + ) + d["session_id"] = self.session_id() + d["etapes"] = self.etapes_apo_vdi() + d["etapes_apo_str"] = self.etapes_apo_str() + d["responsables"] = [u.id for u in self.responsables] # liste des ids return d def query_ues(self, with_sport=False) -> flask_sqlalchemy.BaseQuery: @@ -231,6 +271,11 @@ class FormSemestre(db.Model): not self.semestre_id % 2 and self.date_debut.month > 6 ) + def etapes_apo_vdi(self) -> list[ApoEtapeVDI]: + "Liste des vdis" + # was read_formsemestre_etapes + return [e.as_apovdi() for e in self.etapes if e.etape_apo] + def etapes_apo_str(self) -> str: """Chaine décrivant les étapes de ce semestre ex: "V1RT, V1RT3, V1RT4" diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py index d1127110..37299c3c 100644 --- a/app/scodoc/sco_bulletins.py +++ b/app/scodoc/sco_bulletins.py @@ -148,7 +148,7 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"): I = scu.DictDefault(defaultvalue="") I["etudid"] = etudid I["formsemestre_id"] = formsemestre_id - I["sem"] = nt.sem + I["sem"] = formsemestre.get_infos_dict() I["server_name"] = request.url_root # Formation et parcours diff --git a/app/scodoc/sco_bulletins_pdf.py b/app/scodoc/sco_bulletins_pdf.py index 4e81ce7a..2195d1ee 100644 --- a/app/scodoc/sco_bulletins_pdf.py +++ b/app/scodoc/sco_bulletins_pdf.py @@ -141,7 +141,7 @@ def process_field(field, cdict, style, suppress_empty_pars=False, format="pdf"): except: log("process_field: invalid format=%s" % field) text = ( - "format invalide !" + "format invalide !" + traceback.format_exc() + "" ) diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py index e835f1dd..425d1394 100644 --- a/app/scodoc/sco_formsemestre_validation.py +++ b/app/scodoc/sco_formsemestre_validation.py @@ -702,17 +702,14 @@ def formsemestre_recap_parcours_table( ) # total ECTS (affiché sous la moyenne générale) H.append( - 'ECTS:%g %g' - % (etud_ects_infos["ects_pot"], etud_ects_infos["ects_pot_fond"]) + 'ECTS:%g' + % (etud_ects_infos["ects_pot"]) ) H.append('') # ECTS validables dans chaque UE for ue in ues: ue_status = nt.get_etud_ue_status(etudid, ue["ue_id"]) - H.append( - '%g %g' - % (ue_status["ects_pot"], ue_status["ects_pot_fond"]) - ) + H.append('%g' % (ue_status["ects_pot"])) H.append("") H.append("")