forked from ScoDoc/ScoDoc
Traitement erreur config bonus + complété bonus Grenoble
This commit is contained in:
parent
3c36acd194
commit
d146d5f554
@ -18,12 +18,12 @@ Flask, SQLAlchemy, au lien de Python2/Zope dans les versions précédentes).
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
### État actuel (4 dec 21)
|
### État actuel (26 jan 22)
|
||||||
|
|
||||||
- 9.0 (master) reproduit l'ensemble des fonctions de ScoDoc 7 (donc pas de BUT), sauf:
|
- 9.1 (master) reproduit l'ensemble des fonctions de ScoDoc 7 (donc pas de BUT), sauf:
|
||||||
- ancien module "Entreprises" (obsolète)
|
- ancien module "Entreprises" (obsolète) et ajoute la gestion du BUT.
|
||||||
|
|
||||||
- 9.1 (branche "PNBUT") est la version de développement.
|
- 9.2 (branche refactor_nt) est la version de développement.
|
||||||
|
|
||||||
|
|
||||||
### Lignes de commandes
|
### Lignes de commandes
|
||||||
|
@ -338,7 +338,7 @@ def bonus_iut1grenoble_2017(notes_sport, coefs, infos=None):
|
|||||||
Calcul ici du bonus sur moyenne générale
|
Calcul ici du bonus sur moyenne générale
|
||||||
"""
|
"""
|
||||||
# les coefs sont ignorés
|
# les coefs sont ignorés
|
||||||
# notes de 0 à 5
|
# notes de 0 à 5/20
|
||||||
points = sum([x for x in notes_sport])
|
points = sum([x for x in notes_sport])
|
||||||
factor = (points / 4.0) / 100.0
|
factor = (points / 4.0) / 100.0
|
||||||
bonus = infos["moy"] * factor
|
bonus = infos["moy"] * factor
|
||||||
@ -347,7 +347,9 @@ def bonus_iut1grenoble_2017(notes_sport, coefs, infos=None):
|
|||||||
|
|
||||||
|
|
||||||
class BonusGrenobleIUT1(BonusSport):
|
class BonusGrenobleIUT1(BonusSport):
|
||||||
"""
|
"""Bonus IUT1 de Grenoble
|
||||||
|
|
||||||
|
À compter de sept. 2021:
|
||||||
La note de sport est sur 20, et on calcule une bonification (en %)
|
La note de sport est sur 20, et on calcule une bonification (en %)
|
||||||
qui va s'appliquer à la moyenne de chaque UE du semestre en appliquant
|
qui va s'appliquer à la moyenne de chaque UE du semestre en appliquant
|
||||||
la formule : bonification (en %) = (note-10)*0,5.
|
la formule : bonification (en %) = (note-10)*0,5.
|
||||||
@ -356,11 +358,16 @@ class BonusGrenobleIUT1(BonusSport):
|
|||||||
|
|
||||||
(Une note de 10 donne donc 0% de bonif ; note de 20 : 5% de bonif)
|
(Une note de 10 donne donc 0% de bonif ; note de 20 : 5% de bonif)
|
||||||
|
|
||||||
|
Avant sept. 2021, la note de sport allait de 0 à 5 points (sur 20).
|
||||||
|
Chaque point correspondait à 0.25% d'augmentation de la moyenne
|
||||||
|
générale.
|
||||||
|
Par exemple : note de sport 2/5 : la moyenne générale était augmentée de 0.5%.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name = "bonus_grenoble_iut1_2020"
|
name = "bonus_iut1grenoble_2017"
|
||||||
# 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
|
||||||
# m_1 = a . m_0
|
# m_1 = a . m_0
|
||||||
# m_1 = m_0 + bonus
|
# m_1 = m_0 + bonus
|
||||||
# bonus = m_0 (a - 1)
|
# bonus = m_0 (a - 1)
|
||||||
@ -371,16 +378,21 @@ class BonusGrenobleIUT1(BonusSport):
|
|||||||
sem_modimpl_moys_inscrits * modimpl_coefs_etuds_no_nan, axis=1
|
sem_modimpl_moys_inscrits * modimpl_coefs_etuds_no_nan, axis=1
|
||||||
) / np.sum(modimpl_coefs_etuds_no_nan, axis=1)
|
) / np.sum(modimpl_coefs_etuds_no_nan, axis=1)
|
||||||
notes = np.nan_to_num(notes, copy=False)
|
notes = np.nan_to_num(notes, copy=False)
|
||||||
a = (notes - 10.0) * 0.005
|
|
||||||
a[a <= 0] = 1.0 # note < 10, pas de bonus
|
if self.formsemestre.date_debut > datetime.date(2021, 7, 15):
|
||||||
if self.formsemestre.formation.is_apc():
|
factor = (notes - 10.0) * 0.005 # 5% si note=20
|
||||||
# ne s'applique qu'aux moyennes d'UE
|
factor[factor <= 0] = 0.0 # note < 10, pas de bonus
|
||||||
b = self.etud_moy_ue * (a - 1)
|
else: # anciens semestres
|
||||||
self.bonus_ues = b # DataFrame
|
factor = notes / 400.0
|
||||||
else:
|
factor[factor <= 0] = 0.0 # facteur 1 si bonus nul
|
||||||
# ne s'applique qu'à la moyenne générale
|
|
||||||
b = self.etud_moy_gen * (a - 1)
|
# S'applique qu'aux moyennes d'UE
|
||||||
self.bonus_moy_gen = b
|
bonus = self.etud_moy_ue * factor
|
||||||
|
self.bonus_ues = bonus # DataFrame
|
||||||
|
|
||||||
|
if not self.formsemestre.formation.is_apc():
|
||||||
|
# s'applique à la moyenne générale
|
||||||
|
self.bonus_moy_gen = bonus
|
||||||
|
|
||||||
|
|
||||||
class BonusVilleAvray(BonusSport):
|
class BonusVilleAvray(BonusSport):
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
"""Model : site config WORK IN PROGRESS #WIP
|
"""Model : site config WORK IN PROGRESS #WIP
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from flask import flash
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.comp import bonus_spo
|
from app.comp import bonus_spo
|
||||||
from app.scodoc.sco_exceptions import ScoValueError
|
from app.scodoc.sco_exceptions import ScoValueError
|
||||||
@ -120,7 +121,8 @@ class ScoDocSiteConfig(db.Model):
|
|||||||
"""returns bonus class with specified name.
|
"""returns bonus class with specified name.
|
||||||
If name not specified, return the configured function.
|
If name not specified, return the configured function.
|
||||||
None if no bonus function configured.
|
None if no bonus function configured.
|
||||||
Raises ScoValueError if class_name not found in module bonus_sport.
|
If class_name not found in module bonus_sport, returns None
|
||||||
|
and flash a warning.
|
||||||
"""
|
"""
|
||||||
if class_name is None:
|
if class_name is None:
|
||||||
c = ScoDocSiteConfig.query.filter_by(name=cls.BONUS_SPORT).first()
|
c = ScoDocSiteConfig.query.filter_by(name=cls.BONUS_SPORT).first()
|
||||||
@ -131,9 +133,9 @@ class ScoDocSiteConfig(db.Model):
|
|||||||
return None
|
return None
|
||||||
klass = bonus_spo.get_bonus_class_dict().get(class_name)
|
klass = bonus_spo.get_bonus_class_dict().get(class_name)
|
||||||
if klass is None:
|
if klass is None:
|
||||||
raise ScoValueError(
|
flash(
|
||||||
f"""Fonction de calcul bonus sport inexistante: {class_name}.
|
f"""Fonction de calcul bonus sport inexistante: {class_name}.
|
||||||
(contacter votre administrateur local)."""
|
Changez là ou contactez votre administrateur local."""
|
||||||
)
|
)
|
||||||
return klass
|
return klass
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user