diff --git a/app/models/evaluations.py b/app/models/evaluations.py
index d83f090bc9..805744af56 100644
--- a/app/models/evaluations.py
+++ b/app/models/evaluations.py
@@ -100,6 +100,29 @@ class Evaluation(db.Model):
db.session.add(copy)
return copy
+ def set_default_poids(self) -> bool:
+ """Initialize les poids bvers les UE à leurs valeurs par défaut
+ C'est à dire à 1 si le coef. module/UE est non nul, 0 sinon.
+ Les poids existants ne sont pas modifiés.
+ Return True if (uncommited) modification, False otherwise.
+ """
+ ue_coef_dict = self.moduleimpl.module.get_ue_coef_dict()
+ sem_ues = self.moduleimpl.formsemestre.query_ues(with_sport=False).all()
+ modified = False
+ for ue in sem_ues:
+ existing_poids = EvaluationUEPoids.query.filter_by(
+ ue=ue, evaluation=self
+ ).first()
+ if existing_poids is None:
+ coef_ue = ue_coef_dict.get(ue.id, 0.0) or 0.0
+ if coef_ue > 0:
+ poids = 1.0 # par défaut au départ
+ else:
+ poids = 0.0
+ self.set_ue_poids(ue, poids)
+ modified = True
+ return modified
+
def set_ue_poids(self, ue, poids: float) -> None:
"""Set poids évaluation vers cette UE"""
self.update_ue_poids_dict({ue.id: poids})
diff --git a/app/scodoc/sco_evaluation_edit.py b/app/scodoc/sco_evaluation_edit.py
index 440f1db193..268fde7617 100644
--- a/app/scodoc/sco_evaluation_edit.py
+++ b/app/scodoc/sco_evaluation_edit.py
@@ -39,6 +39,7 @@ from flask import request
from app import db
from app import log
from app import models
+from app.models.evaluations import Evaluation
from app.models.formsemestre import FormSemestre
from app.models.moduleimpls import ModuleImpl
import app.scodoc.sco_utils as scu
@@ -61,11 +62,17 @@ def evaluation_create_form(
):
"Formulaire création/édition d'une évaluation (pas de ses notes)"
if evaluation_id is not None:
- evaluation = models.Evaluation.query.get(evaluation_id)
+ evaluation: Evaluation = models.Evaluation.query.get(evaluation_id)
if evaluation is None:
raise ScoValueError("Cette évaluation n'existe pas ou plus !")
moduleimpl_id = evaluation.moduleimpl_id
#
+ modimpl: ModuleImpl = (
+ ModuleImpl.query.filter_by(id=moduleimpl_id)
+ .join(FormSemestre)
+ .filter_by(dept_id=g.scodoc_dept_id)
+ .first_or_404()
+ )
modimpl_o = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[
0
]
@@ -126,7 +133,7 @@ def evaluation_create_form(
#
H = [
f"""
@@ -145,25 +152,22 @@ def evaluation_create_form(
if vals.get("tf_submitted", False) and "visibulletinlist" not in vals:
vals["visibulletinlist"] = []
#
- ue_coef_dict = {}
+ ue_coef_dict = modimpl.module.get_ue_coef_dict()
if is_apc: # BUT: poids vers les UE
- ue_coef_dict = ModuleImpl.query.get(moduleimpl_id).module.get_ue_coef_dict()
- for ue in sem_ues:
- if edit:
- existing_poids = models.EvaluationUEPoids.query.filter_by(
- ue=ue, evaluation=evaluation
- ).first()
- else:
- existing_poids = None
- if existing_poids:
- poids = existing_poids.poids
- else:
+ if edit:
+ if evaluation.set_default_poids():
+ db.session.commit()
+ ue_poids_dict = evaluation.get_ue_poids_dict()
+ for ue in sem_ues:
+ initvalues[f"poids_{ue.id}"] = ue_poids_dict[ue.id]
+ else:
+ for ue in sem_ues:
coef_ue = ue_coef_dict.get(ue.id, 0.0) or 0.0
if coef_ue > 0:
poids = 1.0 # par défaut au départ
else:
poids = 0.0
- initvalues[f"poids_{ue.id}"] = poids
+ initvalues[f"poids_{ue.id}"] = poids
#
form = [
("evaluation_id", {"default": evaluation_id, "input_type": "hidden"}),
@@ -221,7 +225,7 @@ def evaluation_create_form(
"size": 4,
"type": "float",
"title": "Notes de 0 à",
- "explanation": "barème (note max actuelle: %s)" % min_note_max_str,
+ "explanation": f"barème (note max actuelle: {min_note_max_str})",
"allow_null": False,
"max_value": scu.NOTES_MAX,
"min_value": min_note_max,
@@ -232,7 +236,7 @@ def evaluation_create_form(
{
"size": 36,
"type": "text",
- "explanation": 'type d\'évaluation, apparait sur le bulletins longs. Exemples: "contrôle court", "examen de TP", "examen final".',
+ "explanation": """type d'évaluation, apparait sur le bulletins longs. Exemples: "contrôle court", "examen de TP", "examen final".""",
},
),
(
@@ -320,7 +324,9 @@ def evaluation_create_form(
readonly=False,
)
- dest_url = "moduleimpl_status?moduleimpl_id=%s" % modimpl_o["moduleimpl_id"]
+ dest_url = url_for(
+ "notes.moduleimpl_status", scodoc_dept=g.scodoc_dept, moduleimpl_id=modimpl.id
+ )
if tf[0] == 0:
head = html_sco_header.sco_header(page_title=page_title)
return (
@@ -342,7 +348,7 @@ def evaluation_create_form(
if edit:
sco_evaluation_db.do_evaluation_edit(tf[2])
else:
- # création d'une evaluation
+ # création d'une evaluation (via fonction ScoDoc7)
evaluation_id = sco_evaluation_db.do_evaluation_create(**tf[2])
if is_apc:
# Set poids
diff --git a/app/scodoc/sco_moduleimpl_status.py b/app/scodoc/sco_moduleimpl_status.py
index cfec9aa687..facd03a782 100644
--- a/app/scodoc/sco_moduleimpl_status.py
+++ b/app/scodoc/sco_moduleimpl_status.py
@@ -33,6 +33,7 @@ import time
from flask import g, url_for
from flask_login import current_user
+from app import db
from app.auth.models import User
from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat
@@ -527,6 +528,10 @@ def _ligne_evaluation(
H.append(f"""""")
coef = evaluation.coefficient
if is_apc:
+ if not evaluation.get_ue_poids_dict():
+ # Au cas où les poids par défaut n'existent pas encore:
+ if evaluation.set_default_poids():
+ db.session.commit()
coef *= sum(evaluation.get_ue_poids_dict().values())
# Avertissement si coefs x poids nuls
if coef < scu.NOTES_PRECISION:
diff --git a/app/views/scolar.py b/app/views/scolar.py
index 7b1079e927..ebd718415d 100644
--- a/app/views/scolar.py
+++ b/app/views/scolar.py
@@ -1125,7 +1125,7 @@ def _form_dem_of_def(
{validations_descr}
{(' modifier ces décisions ') if validations_descr else ""}
{html_sco_header.sco_footer()}
diff --git a/sco_version.py b/sco_version.py
index 3c7e89b89f..0d42bc8925 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
-SCOVERSION = "9.3.53"
+SCOVERSION = "9.3.54"
SCONAME = "ScoDoc"
|