Fix: divers petits bugs

This commit is contained in:
Emmanuel Viennet 2022-02-09 00:36:50 +01:00
parent 7a183185a2
commit c29312e511
6 changed files with 68 additions and 11 deletions

View File

@ -114,7 +114,9 @@ class ResultatsSemestreBUT(NotesTableCompat):
mod_idx = self.modimpl_coefs_df.columns.get_loc(moduleimpl_id) mod_idx = self.modimpl_coefs_df.columns.get_loc(moduleimpl_id)
etud_idx = self.etud_index[etudid] etud_idx = self.etud_index[etudid]
# moyenne sur les UE: # moyenne sur les UE:
if len(self.sem_cube[etud_idx, mod_idx]):
return np.nanmean(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: def compute_etud_ue_coef(self, etudid: int, ue: UniteEns) -> float:
"""Détermine le coefficient de l'UE pour cet étudiant. """Détermine le coefficient de l'UE pour cet étudiant.

View File

@ -216,11 +216,24 @@ class ResultatsSemestre(ResultatsCache):
def get_etud_ue_status(self, etudid: int, ue_id: int) -> dict: def get_etud_ue_status(self, etudid: int, ue_id: int) -> dict:
"""L'état de l'UE pour cet étudiant. """L'état de l'UE pour cet étudiant.
Result: dict L'UE doit être du semestre.
Result: dict.
""" """
if not self.validations: if not self.validations:
self.validations = res_sem.load_formsemestre_validations(self.formsemestre) self.validations = res_sem.load_formsemestre_validations(self.formsemestre)
ue = UniteEns.query.get(ue_id) # TODO cacher nos UEs ? 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] cur_moy_ue = self.etud_moy_ue[ue_id][etudid]
moy_ue = cur_moy_ue moy_ue = cur_moy_ue
is_capitalized = False is_capitalized = False
@ -464,7 +477,7 @@ class NotesTableCompat(ResultatsSemestre):
ects_pot += ue.ects ects_pot += ue.ects
return { return {
"ects_pot": ects_pot, "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): def get_etud_rang(self, etudid: int):

View File

@ -132,7 +132,47 @@ class FormSemestre(db.Model):
else: else:
d["date_fin"] = d["date_fin_iso"] = "" d["date_fin"] = d["date_fin_iso"] = ""
d["responsables"] = [u.id for u in self.responsables] 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 return d
def query_ues(self, with_sport=False) -> flask_sqlalchemy.BaseQuery: 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 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: def etapes_apo_str(self) -> str:
"""Chaine décrivant les étapes de ce semestre """Chaine décrivant les étapes de ce semestre
ex: "V1RT, V1RT3, V1RT4" ex: "V1RT, V1RT3, V1RT4"

View File

@ -148,7 +148,7 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"):
I = scu.DictDefault(defaultvalue="") I = scu.DictDefault(defaultvalue="")
I["etudid"] = etudid I["etudid"] = etudid
I["formsemestre_id"] = formsemestre_id I["formsemestre_id"] = formsemestre_id
I["sem"] = nt.sem I["sem"] = formsemestre.get_infos_dict()
I["server_name"] = request.url_root I["server_name"] = request.url_root
# Formation et parcours # Formation et parcours

View File

@ -141,7 +141,7 @@ def process_field(field, cdict, style, suppress_empty_pars=False, format="pdf"):
except: except:
log("process_field: invalid format=%s" % field) log("process_field: invalid format=%s" % field)
text = ( text = (
"<para><i>format invalide !<i></para><para>" "<para><i>format invalide !</i></para><para>"
+ traceback.format_exc() + traceback.format_exc()
+ "</para>" + "</para>"
) )

View File

@ -702,17 +702,14 @@ def formsemestre_recap_parcours_table(
) )
# total ECTS (affiché sous la moyenne générale) # total ECTS (affiché sous la moyenne générale)
H.append( H.append(
'<td class="sem_ects_tit"><a title="crédit potentiels (dont nb de fondamentaux)">ECTS:</a></td><td class="sem_ects">%g <span class="ects_fond">%g</span></td>' '<td class="sem_ects_tit"><a title="crédit potentiels (dont nb de fondamentaux)">ECTS:</a></td><td class="sem_ects">%g</td>'
% (etud_ects_infos["ects_pot"], etud_ects_infos["ects_pot_fond"]) % (etud_ects_infos["ects_pot"])
) )
H.append('<td class="rcp_abs"></td>') H.append('<td class="rcp_abs"></td>')
# 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["ue_id"])
H.append( H.append('<td class="ue">%g</td>' % (ue_status["ects_pot"]))
'<td class="ue">%g <span class="ects_fond">%g</span></td>'
% (ue_status["ects_pot"], ue_status["ects_pot_fond"])
)
H.append("<td></td></tr>") H.append("<td></td></tr>")
H.append("</table>") H.append("</table>")