diff --git a/app/comp/bonus_spo.py b/app/comp/bonus_spo.py
index d1c3ddcab..b27219413 100644
--- a/app/comp/bonus_spo.py
+++ b/app/comp/bonus_spo.py
@@ -21,6 +21,7 @@ from flask import g
from app.models.formsemestre import FormSemestre
from app.scodoc.sco_codes_parcours import UE_SPORT
+from app.scodoc.sco_codes_parcours import ParcoursDUT, ParcoursDUTMono
from app.scodoc.sco_utils import ModuleType
@@ -455,8 +456,8 @@ class BonusBezier(BonusSportAdditif):
class BonusBordeaux1(BonusSportMultiplicatif):
- """Calcul bonus modules optionnels (sport, culture), règle IUT Bordeaux 1, sur moyenne générale
- et UE.
+ """Calcul bonus modules optionnels (sport, culture), règle IUT Bordeaux 1,
+ sur moyenne générale et UEs.
Les étudiants de l'IUT peuvent suivre des enseignements optionnels
de l'Université Bordeaux 1 (sport, théâtre) non rattachés à une unité d'enseignement.
@@ -476,6 +477,29 @@ class BonusBordeaux1(BonusSportMultiplicatif):
amplitude = 0.005
+# Exactement le même que Bordeaux:
+class BonusBrest(BonusSportMultiplicatif):
+ """Calcul bonus modules optionnels (sport, culture), règle IUT de Brest,
+ sur moyenne générale et UEs.
+
+ Les étudiants de l'IUT peuvent suivre des enseignements optionnels
+ de l'Université (sport, théâtre) non rattachés à une unité d'enseignement.
+
+ Chaque point au-dessus de 10 sur 20 obtenus dans cet enseignement correspond à un %
+ qui augmente la moyenne de chaque UE et la moyenne générale.
+ Formule : pourcentage = (points au dessus de 10) / 2
+
+ Par exemple : sport 13/20 : chaque UE sera multipliée par 1+0,015, ainsi que la moyenne générale.
+
+ """
+
+ name = "bonus_iut_brest"
+ displayed_name = "IUT de Brest"
+ classic_use_bonus_ues = True # s'applique aux UEs en DUT et LP
+ seuil_moy_gen = 10.0
+ amplitude = 0.005
+
+
class BonusCachan1(BonusSportAdditif):
"""Calcul bonus optionnels (sport, culture), règle IUT de Cachan 1.
@@ -538,6 +562,44 @@ class BonusCachan1(BonusSportAdditif):
self.bonus_ues[ue.id] = 0.0
+class BonusCalais(BonusSportAdditif):
+ """Calcul bonus modules optionnels (sport, culture), règle IUT LCO.
+
+ Les étudiants de l'IUT LCO peuvent suivre des enseignements optionnels non
+ rattachés à une unité d'enseignement. Les points au-dessus de 10
+ sur 20 obtenus dans chacune des matières optionnelles sont cumulés
+ dans la limite de 10 points. 6% de ces points cumulés s'ajoutent :
+
+ - en DUT à la moyenne générale du semestre déjà obtenue par l'étudiant.
+
- en BUT et LP à la moyenne des UE dont l'acronyme fini par BS (ex : UE2.1BS, UE32BS)
+
+ """
+
+ name = "bonus_calais"
+ displayed_name = "IUT du Littoral"
+ bonus_max = 0.6
+ seuil_moy_gen = 10.0 # au dessus de 10
+ proportion_point = 0.06 # 6%
+
+ def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
+ parcours = self.formsemestre.formation.get_parcours()
+ # Variantes de DUT ?
+ if (
+ isinstance(parcours, ParcoursDUT)
+ or parcours.TYPE_PARCOURS == ParcoursDUTMono.TYPE_PARCOURS
+ ): # DUT
+ super().compute_bonus(sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan)
+ else:
+ self.classic_use_bonus_ues = True # pour les LP
+ super().compute_bonus(sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan)
+ ues = self.formsemestre.query_ues(with_sport=False).all()
+ ues_sans_bs = [
+ ue for ue in ues if ue.acronyme[-2:].upper() != "BS"
+ ] # les 2 derniers cars forcés en majus
+ for ue in ues_sans_bs:
+ self.bonus_ues[ue.id] = 0.0
+
+
class BonusColmar(BonusSportAdditif):
"""Calcul bonus modules optionnels (sport, culture), règle IUT Colmar.
diff --git a/app/comp/res_but.py b/app/comp/res_but.py
index 20e63cba0..7bd79463f 100644
--- a/app/comp/res_but.py
+++ b/app/comp/res_but.py
@@ -98,7 +98,9 @@ class ResultatsSemestreBUT(NotesTableCompat):
self.bonus_ues = bonus.get_bonus_ues()
if self.bonus_ues is not None:
self.etud_moy_ue += self.bonus_ues # somme les dataframes
- self.etud_moy_ue.clip(lower=0.0, upper=20.0, inplace=True)
+
+ # Clippe toutes les moyennes d'UE dans [0,20]
+ self.etud_moy_ue.clip(lower=0.0, upper=20.0, inplace=True)
# Moyenne générale indicative:
# (note: le bonus sport a déjà été appliqué aux moyennes d'UE, et impacte
diff --git a/app/comp/res_classic.py b/app/comp/res_classic.py
index ecc1e5004..b36eaaf6c 100644
--- a/app/comp/res_classic.py
+++ b/app/comp/res_classic.py
@@ -125,12 +125,16 @@ class ResultatsSemestreClassic(NotesTableCompat):
# Applique le bonus moyenne générale renvoyé
self.etud_moy_gen += bonus_mg
- self.etud_moy_gen.clip(lower=0.0, upper=20.0, inplace=True)
# compat nt, utilisé pour l'afficher sur les bulletins:
self.bonus = bonus_mg
+
# --- UE capitalisées
self.apply_capitalisation()
+ # Clippe toutes les moyennes dans [0,20]
+ self.etud_moy_ue.clip(lower=0.0, upper=20.0, inplace=True)
+ self.etud_moy_gen.clip(lower=0.0, upper=20.0, inplace=True)
+
# --- Classements:
self.compute_rangs()
diff --git a/sco_version.py b/sco_version.py
index 24c85fb12..50fc9f77d 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
-SCOVERSION = "9.2a-70"
+SCOVERSION = "9.2a-71"
SCONAME = "ScoDoc"