forked from ScoDoc/ScoDoc
Améliore initialisation poids évaluations
This commit is contained in:
parent
75c5256ba9
commit
10caea92ae
@ -100,6 +100,29 @@ class Evaluation(db.Model):
|
|||||||
db.session.add(copy)
|
db.session.add(copy)
|
||||||
return 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:
|
def set_ue_poids(self, ue, poids: float) -> None:
|
||||||
"""Set poids évaluation vers cette UE"""
|
"""Set poids évaluation vers cette UE"""
|
||||||
self.update_ue_poids_dict({ue.id: poids})
|
self.update_ue_poids_dict({ue.id: poids})
|
||||||
|
@ -39,6 +39,7 @@ from flask import request
|
|||||||
from app import db
|
from app import db
|
||||||
from app import log
|
from app import log
|
||||||
from app import models
|
from app import models
|
||||||
|
from app.models.evaluations import Evaluation
|
||||||
from app.models.formsemestre import FormSemestre
|
from app.models.formsemestre import FormSemestre
|
||||||
from app.models.moduleimpls import ModuleImpl
|
from app.models.moduleimpls import ModuleImpl
|
||||||
import app.scodoc.sco_utils as scu
|
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)"
|
"Formulaire création/édition d'une évaluation (pas de ses notes)"
|
||||||
if evaluation_id is not None:
|
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:
|
if evaluation is None:
|
||||||
raise ScoValueError("Cette évaluation n'existe pas ou plus !")
|
raise ScoValueError("Cette évaluation n'existe pas ou plus !")
|
||||||
moduleimpl_id = evaluation.moduleimpl_id
|
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)[
|
modimpl_o = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[
|
||||||
0
|
0
|
||||||
]
|
]
|
||||||
@ -126,7 +133,7 @@ def evaluation_create_form(
|
|||||||
#
|
#
|
||||||
H = [
|
H = [
|
||||||
f"""<h3>{action} en
|
f"""<h3>{action} en
|
||||||
{scu.MODULE_TYPE_NAMES[mod["module_type"]]} <a href="{
|
{scu.MODULE_TYPE_NAMES[mod["module_type"]]} <a class="stdlink" href="{
|
||||||
url_for("notes.moduleimpl_status",
|
url_for("notes.moduleimpl_status",
|
||||||
scodoc_dept=g.scodoc_dept, moduleimpl_id=moduleimpl_id)
|
scodoc_dept=g.scodoc_dept, moduleimpl_id=moduleimpl_id)
|
||||||
}">{mod["code"] or "module sans code"} {mod["titre"]}</a> {link}</h3>
|
}">{mod["code"] or "module sans code"} {mod["titre"]}</a> {link}</h3>
|
||||||
@ -145,25 +152,22 @@ def evaluation_create_form(
|
|||||||
if vals.get("tf_submitted", False) and "visibulletinlist" not in vals:
|
if vals.get("tf_submitted", False) and "visibulletinlist" not in vals:
|
||||||
vals["visibulletinlist"] = []
|
vals["visibulletinlist"] = []
|
||||||
#
|
#
|
||||||
ue_coef_dict = {}
|
ue_coef_dict = modimpl.module.get_ue_coef_dict()
|
||||||
if is_apc: # BUT: poids vers les UE
|
if is_apc: # BUT: poids vers les UE
|
||||||
ue_coef_dict = ModuleImpl.query.get(moduleimpl_id).module.get_ue_coef_dict()
|
if edit:
|
||||||
for ue in sem_ues:
|
if evaluation.set_default_poids():
|
||||||
if edit:
|
db.session.commit()
|
||||||
existing_poids = models.EvaluationUEPoids.query.filter_by(
|
ue_poids_dict = evaluation.get_ue_poids_dict()
|
||||||
ue=ue, evaluation=evaluation
|
for ue in sem_ues:
|
||||||
).first()
|
initvalues[f"poids_{ue.id}"] = ue_poids_dict[ue.id]
|
||||||
else:
|
else:
|
||||||
existing_poids = None
|
for ue in sem_ues:
|
||||||
if existing_poids:
|
|
||||||
poids = existing_poids.poids
|
|
||||||
else:
|
|
||||||
coef_ue = ue_coef_dict.get(ue.id, 0.0) or 0.0
|
coef_ue = ue_coef_dict.get(ue.id, 0.0) or 0.0
|
||||||
if coef_ue > 0:
|
if coef_ue > 0:
|
||||||
poids = 1.0 # par défaut au départ
|
poids = 1.0 # par défaut au départ
|
||||||
else:
|
else:
|
||||||
poids = 0.0
|
poids = 0.0
|
||||||
initvalues[f"poids_{ue.id}"] = poids
|
initvalues[f"poids_{ue.id}"] = poids
|
||||||
#
|
#
|
||||||
form = [
|
form = [
|
||||||
("evaluation_id", {"default": evaluation_id, "input_type": "hidden"}),
|
("evaluation_id", {"default": evaluation_id, "input_type": "hidden"}),
|
||||||
@ -221,7 +225,7 @@ def evaluation_create_form(
|
|||||||
"size": 4,
|
"size": 4,
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"title": "Notes de 0 à",
|
"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,
|
"allow_null": False,
|
||||||
"max_value": scu.NOTES_MAX,
|
"max_value": scu.NOTES_MAX,
|
||||||
"min_value": min_note_max,
|
"min_value": min_note_max,
|
||||||
@ -232,7 +236,7 @@ def evaluation_create_form(
|
|||||||
{
|
{
|
||||||
"size": 36,
|
"size": 36,
|
||||||
"type": "text",
|
"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,
|
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:
|
if tf[0] == 0:
|
||||||
head = html_sco_header.sco_header(page_title=page_title)
|
head = html_sco_header.sco_header(page_title=page_title)
|
||||||
return (
|
return (
|
||||||
@ -342,7 +348,7 @@ def evaluation_create_form(
|
|||||||
if edit:
|
if edit:
|
||||||
sco_evaluation_db.do_evaluation_edit(tf[2])
|
sco_evaluation_db.do_evaluation_edit(tf[2])
|
||||||
else:
|
else:
|
||||||
# création d'une evaluation
|
# création d'une evaluation (via fonction ScoDoc7)
|
||||||
evaluation_id = sco_evaluation_db.do_evaluation_create(**tf[2])
|
evaluation_id = sco_evaluation_db.do_evaluation_create(**tf[2])
|
||||||
if is_apc:
|
if is_apc:
|
||||||
# Set poids
|
# Set poids
|
||||||
|
@ -33,6 +33,7 @@ import time
|
|||||||
from flask import g, url_for
|
from flask import g, url_for
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
|
|
||||||
|
from app import db
|
||||||
from app.auth.models import User
|
from app.auth.models import User
|
||||||
from app.comp import res_sem
|
from app.comp import res_sem
|
||||||
from app.comp.res_compat import NotesTableCompat
|
from app.comp.res_compat import NotesTableCompat
|
||||||
@ -527,6 +528,10 @@ def _ligne_evaluation(
|
|||||||
H.append(f"""<tr class="{tr_class_1}"><td class="mievr_tit" colspan="8">""")
|
H.append(f"""<tr class="{tr_class_1}"><td class="mievr_tit" colspan="8">""")
|
||||||
coef = evaluation.coefficient
|
coef = evaluation.coefficient
|
||||||
if is_apc:
|
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())
|
coef *= sum(evaluation.get_ue_poids_dict().values())
|
||||||
# Avertissement si coefs x poids nuls
|
# Avertissement si coefs x poids nuls
|
||||||
if coef < scu.NOTES_PRECISION:
|
if coef < scu.NOTES_PRECISION:
|
||||||
|
@ -1125,7 +1125,7 @@ def _form_dem_of_def(
|
|||||||
{validations_descr}
|
{validations_descr}
|
||||||
{('<p><a class="stdlink" href="'
|
{('<p><a class="stdlink" href="'
|
||||||
+ url_for("notes.formsemestre_validation_but", scodoc_dept=g.scodoc_dept,
|
+ url_for("notes.formsemestre_validation_but", scodoc_dept=g.scodoc_dept,
|
||||||
formsemestre_id=formsemestre_id,etudid=etudid)
|
formsemestre_id=formsemestre_id, etudid=etudid)
|
||||||
+ '">modifier ces décisions</a></p>') if validations_descr else ""}
|
+ '">modifier ces décisions</a></p>') if validations_descr else ""}
|
||||||
</div>
|
</div>
|
||||||
{html_sco_header.sco_footer()}
|
{html_sco_header.sco_footer()}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.3.53"
|
SCOVERSION = "9.3.54"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user