From 53630f08de4738e275bc6c1a216fc4b80ef3ad8e Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 9 Jan 2022 22:34:49 +0100 Subject: [PATCH] WIP bonus sport --- app/scodoc/bonus_sport.py | 39 ++++++++++++++++++++++++++++++++++ app/scodoc/sco_recapcomplet.py | 24 +++++++++++++-------- 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/app/scodoc/bonus_sport.py b/app/scodoc/bonus_sport.py index e34909e64..d1d7f4ba2 100644 --- a/app/scodoc/bonus_sport.py +++ b/app/scodoc/bonus_sport.py @@ -28,6 +28,44 @@ from operator import mul import pprint +""" +La fonction bonus_sport reçoit: + + - notes_sport: la liste des notes des modules de sport et culture (une note par module); + - coefs: un coef (float) pondérant chaque note (la plupart des bonus les ignorent); + - infos: dictionnaire avec des données pouvant être utilisées pour les calculs. + Ces données dépendent du type de formation. + infos = { + "moy" : la moyenne générale (float). 0. en BUT. + "sem" : { + "date_debut_iso" : "2010-08-01", # date de début de semestre + } + "moy_ues": { + ue_id : { # ue_status + "is_capitalized" : True|False, + "moy" : float, # moyenne d'UE prise en compte (peut-être capitalisée) + "sum_coefs": float, # > 0 si UE avec la moyenne calculée + "cur_moy_ue": float, # moyenne de l'UE (sans capitalisation)) + } + } + } + +Les notes passées sont: + - pour les formations classiques, la moyenne dans le module, calculée comme d'habitude + (moyenne pondérée des notes d'évaluations); + - pour le BUT: pareil, *en ignorant* les éventuels poids des évaluations. Le coefficient + de l'évaluation est pris en compte, mais pas les poids vers les UE. + +Pour modifier les moyennes d'UE: + - modifier infos["moy_ues"][ue_id][["cur_moy_ue"] + et, seulement si l'UE n'est pas capitalisée, infos["moy_ues"][ue_id][["moy"]/ + +La valeur retournée est: + - formations classiques: ajoutée à la moyenne générale + - BUT: ajoutée à chaque UE si le coef XXX + +""" + def bonus_iutv(notes_sport, coefs, infos=None): """Calcul bonus modules optionels (sport, culture), règle IUT Villetaneuse @@ -39,6 +77,7 @@ def bonus_iutv(notes_sport, coefs, infos=None): optionnelles sont cumulés et 5% de ces points cumulés s'ajoutent à la moyenne générale du semestre déjà obtenue par l'étudiant. """ + # breakpoint() bonus = sum([(x - 10) / 20.0 for x in notes_sport if x > 10]) return bonus diff --git a/app/scodoc/sco_recapcomplet.py b/app/scodoc/sco_recapcomplet.py index e6e31b91b..f79b06ea4 100644 --- a/app/scodoc/sco_recapcomplet.py +++ b/app/scodoc/sco_recapcomplet.py @@ -382,8 +382,6 @@ def make_formsemestre_recapcomplet( h += ["code_nip", "etudid"] F.append(h) - ue_index = [] # indices des moy UE dans l (pour appliquer style css) - def fmtnum(val): # conversion en nombre pour cellules excel if keep_numeric: try: @@ -434,9 +432,15 @@ def make_formsemestre_recapcomplet( else: l = [rank, nt.get_nom_short(etudid)] # rang, nom, + e["admission"] = {} if not hidebac: - bac = sco_bac.Baccalaureat(e["bac"], e["specialite"]) - l.append(bac.abbrev()) + if etud_etat == scu.INSCRIT: + e["admission"] = nt.etuds_dict[etudid].admission.first() + if e["admission"]: + bac = nt.etuds_dict[etudid].admission[0].get_bac() + l.append(bac.abbrev()) + else: + l.append("") if format[:3] == "xls" or format == "csv": # tous les groupes for partition in partitions: @@ -462,9 +466,11 @@ def make_formsemestre_recapcomplet( l.append(rang_gr[partition["partition_id"]]) # Nombre d'UE au dessus de 10 - nb_ue_ok = sum( - [t[i] > 10 for i, ue in enumerate(ues, start=1) if ue["type"] != UE_SPORT] - ) + # t[i] est une chaine :-) + # nb_ue_ok = sum( + # [t[i] > 10 for i, ue in enumerate(ues, start=1) if ue["type"] != UE_SPORT] + # ) + ue_index = [] # indices des moy UE dans l (pour appliquer style css) for i, ue in enumerate(ues, start=1): if ue["type"] != UE_SPORT: l.append( @@ -493,7 +499,7 @@ def make_formsemestre_recapcomplet( j += 1 if not hidebac: for k in admission_extra_cols: - l.append(e[k]) + l.append(getattr(e["admission"], k, "")) l.append( nt.identdict[etudid]["code_nip"] or "" ) # avant-derniere colonne = code_nip @@ -543,7 +549,7 @@ def make_formsemestre_recapcomplet( # n'affiche pas la moyenne d'UE dans ce cas if not hidemodules: l.append("") - ue_index.append(len(l) - 1) + # ue_index.append(len(l) - 1) if not hidemodules and not ue["is_external"]: for modimpl in modimpls: if modimpl["module"]["ue_id"] == ue["ue_id"]: