Bonus pour masters Institut Galilée (USPN)

This commit is contained in:
Emmanuel Viennet 2023-06-06 22:12:21 +02:00
parent 0322603a22
commit fda11298b4
3 changed files with 63 additions and 4 deletions

View File

@ -153,8 +153,8 @@ def evaluation_set_notes(evaluation_id: int):
The request content type should be "application/json", The request content type should be "application/json",
and contains: and contains:
{ {
'notes' : [ (etudid, value), ... ], 'notes' : [ [etudid, value], ... ],
'comment' : opetional string 'comment' : optional string
} }
Result: Result:
- nb_changed: nombre de notes changées - nb_changed: nombre de notes changées

View File

@ -18,7 +18,7 @@ import pandas as pd
from flask import g 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.codes_cursus import CursusDUT, CursusDUTMono
from app.scodoc.sco_utils import ModuleType from app.scodoc.sco_utils import ModuleType
@ -740,6 +740,7 @@ class BonusGrenobleIUT1(BonusSportMultiplicatif):
name = "bonus_iut1grenoble_2017" name = "bonus_iut1grenoble_2017"
displayed_name = "IUT de Grenoble 1" displayed_name = "IUT de Grenoble 1"
# C'est un bonus "multiplicatif": on l'exprime en additif, # C'est un bonus "multiplicatif": on l'exprime en additif,
# sur chaque moyenne d'UE m_0 # sur chaque moyenne d'UE m_0
# Augmenter de 5% correspond à multiplier par a=1.05 # Augmenter de 5% correspond à multiplier par a=1.05
@ -782,6 +783,7 @@ class BonusIUTRennes1(BonusSportAdditif):
seuil_moy_gen = 10.0 seuil_moy_gen = 10.0
proportion_point = 1 / 20.0 proportion_point = 1 / 20.0
classic_use_bonus_ues = False classic_use_bonus_ues = False
# S'applique aussi en classic, sur la moy. gen. # S'applique aussi en classic, sur la moy. gen.
def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan): def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
"""calcul du bonus""" """calcul du bonus"""
@ -1336,6 +1338,7 @@ class BonusStNazaire(BonusSport):
classic_use_bonus_ues = True # s'applique aux UEs en DUT et LP classic_use_bonus_ues = True # s'applique aux UEs en DUT et LP
amplitude = 0.01 / 4 # 4pt => 1% amplitude = 0.01 / 4 # 4pt => 1%
factor_max = 0.1 # 10% max factor_max = 0.1 # 10% max
# Modifié 2022-11-29: calculer chaque bonus # Modifié 2022-11-29: calculer chaque bonus
# (de 1 à 3 modules) séparément. # (de 1 à 3 modules) séparément.
def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan): 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 # 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): def get_bonus_class_dict(start=BonusSport, d=None):
"""Dictionnaire des classes de bonus """Dictionnaire des classes de bonus
(liste les sous-classes de BonusSport ayant un nom) (liste les sous-classes de BonusSport ayant un nom)

View File

@ -1,7 +1,7 @@
# -*- mode: python -*- # -*- mode: python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
SCOVERSION = "9.4.81" SCOVERSION = "9.4.82"
SCONAME = "ScoDoc" SCONAME = "ScoDoc"