diff --git a/app/api/evaluations.py b/app/api/evaluations.py index 8cd27767..af1c40af 100644 --- a/app/api/evaluations.py +++ b/app/api/evaluations.py @@ -153,8 +153,8 @@ def evaluation_set_notes(evaluation_id: int): The request content type should be "application/json", and contains: { - 'notes' : [ (etudid, value), ... ], - 'comment' : opetional string + 'notes' : [ [etudid, value], ... ], + 'comment' : optional string } Result: - nb_changed: nombre de notes changées diff --git a/app/comp/bonus_spo.py b/app/comp/bonus_spo.py index 64ba2979..a4034a4f 100644 --- a/app/comp/bonus_spo.py +++ b/app/comp/bonus_spo.py @@ -18,7 +18,7 @@ import pandas as pd from flask import g -from app.scodoc.codes_cursus import UE_SPORT +from app.scodoc.codes_cursus import UE_SPORT, UE_STANDARD from app.scodoc.codes_cursus import CursusDUT, CursusDUTMono from app.scodoc.sco_utils import ModuleType @@ -740,6 +740,7 @@ class BonusGrenobleIUT1(BonusSportMultiplicatif): name = "bonus_iut1grenoble_2017" displayed_name = "IUT de Grenoble 1" + # C'est un bonus "multiplicatif": on l'exprime en additif, # sur chaque moyenne d'UE m_0 # Augmenter de 5% correspond à multiplier par a=1.05 @@ -782,6 +783,7 @@ class BonusIUTRennes1(BonusSportAdditif): seuil_moy_gen = 10.0 proportion_point = 1 / 20.0 classic_use_bonus_ues = False + # S'applique aussi en classic, sur la moy. gen. def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan): """calcul du bonus""" @@ -1336,6 +1338,7 @@ class BonusStNazaire(BonusSport): classic_use_bonus_ues = True # s'applique aux UEs en DUT et LP amplitude = 0.01 / 4 # 4pt => 1% factor_max = 0.1 # 10% max + # Modifié 2022-11-29: calculer chaque bonus # (de 1 à 3 modules) séparément. def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan): @@ -1533,6 +1536,62 @@ class BonusIUTV(BonusSportAdditif): # c'est le bonus par défaut: aucune méthode à surcharger +class BonusMastersUSPNIG(BonusSportAdditif): + """Calcul bonus modules optionnels (sport, culture), règle Masters de l'Institut Galilée (USPN) + + Les étudiants peuvent suivre des enseignements optionnels + de l'USPN (sports, musique, deuxième langue, culture, etc) dans une + UE libre. Les points au-dessus de 10 sur 20 obtenus dans cette UE + libre sont ajoutés au total des points obtenus pour les UE obligatoires + du semestre concerné. + """ + + name = "bonus_masters__uspn_ig" + displayed_name = "Masters de l'Institut Galilée (USPN)" + proportion_point = 1.0 + seuil_moy_gen = 10.0 + + def __init__( + self, + formsemestre: "FormSemestre", + sem_modimpl_moys: np.array, + ues: list, + modimpl_inscr_df: pd.DataFrame, + modimpl_coefs: np.array, + etud_moy_gen, + etud_moy_ue, + ): + # Pour ce bonus, il nous faut la somme des coefs des modules non bonus + # du formsemestre (et non auxquels les étudiants sont inscrits !) + self.sum_coefs = sum( + [ + m.module.coefficient + for m in formsemestre.modimpls_sorted + if (m.module.module_type == ModuleType.STANDARD) + and (m.module.ue.type == UE_STANDARD) + ] + ) + super().__init__( + formsemestre, + sem_modimpl_moys, + ues, + modimpl_inscr_df, + modimpl_coefs, + etud_moy_gen, + etud_moy_ue, + ) + # Bonus sur la moyenne générale seulement + # On a dans bonus_moy_arr le bonus additif classique + # Sa valeur sera appliquée comme moy_gen += bonus_moy_gen + # or ici on veut + # moy_gen = (somme des notes + bonus_moy_arr) / somme des coefs + # moy_gen += bonus_moy_arr / somme des coefs + + self.bonus_moy_gen = ( + None if self.bonus_moy_gen is None else self.bonus_moy_gen / self.sum_coefs + ) + + def get_bonus_class_dict(start=BonusSport, d=None): """Dictionnaire des classes de bonus (liste les sous-classes de BonusSport ayant un nom) diff --git a/sco_version.py b/sco_version.py index 8a435b8c..5b5fa3a0 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.4.81" +SCOVERSION = "9.4.82" SCONAME = "ScoDoc"