forked from ScoDoc/ScoDoc
Remplissage des notes des étudiants inscrits en cours de route
This commit is contained in:
parent
6f35e18a63
commit
665451b676
File diff suppressed because it is too large
Load Diff
|
@ -5,7 +5,9 @@
|
|||
import datetime
|
||||
|
||||
from app import db
|
||||
from app.models.etudiants import Identite
|
||||
from app.models.moduleimpls import ModuleImpl
|
||||
from app.models.notes import NotesNotes
|
||||
from app.models.ues import UniteEns
|
||||
|
||||
from app.scodoc.sco_exceptions import ScoValueError
|
||||
|
@ -176,6 +178,12 @@ class Evaluation(db.Model):
|
|||
]
|
||||
)
|
||||
|
||||
def get_etud_note(self, etud: Identite) -> NotesNotes:
|
||||
"""La note de l'étudiant, ou None si pas noté.
|
||||
(nb: pas de cache, lent, ne pas utiliser pour des calculs)
|
||||
"""
|
||||
return NotesNotes.query.filter_by(etudid=etud.id, evaluation_id=self.id).first()
|
||||
|
||||
|
||||
class EvaluationUEPoids(db.Model):
|
||||
"""Poids des évaluations (BUT)
|
||||
|
|
|
@ -27,13 +27,14 @@ from app.models.but_refcomp import (
|
|||
ApcReferentielCompetences,
|
||||
)
|
||||
from app.models.groups import GroupDescr, Partition
|
||||
from app.scodoc.sco_exceptions import ScoValueError
|
||||
|
||||
import app.scodoc.sco_utils as scu
|
||||
from app.models.but_refcomp import parcours_formsemestre
|
||||
from app.models.etudiants import Identite
|
||||
from app.models.formations import Formation
|
||||
from app.models.modules import Module
|
||||
from app.models.moduleimpls import ModuleImpl
|
||||
from app.models.moduleimpls import ModuleImpl, ModuleImplInscription
|
||||
from app.models.ues import UniteEns
|
||||
from app.models.validations import ScolarFormSemestreValidation
|
||||
|
||||
|
@ -690,6 +691,31 @@ class FormSemestre(db.Model):
|
|||
)
|
||||
return "\n".join(H)
|
||||
|
||||
def etud_set_all_missing_notes(self, etud: Identite, value=None) -> int:
|
||||
"""Met toutes les notes manquantes de cet étudiant dans ce semestre
|
||||
(ie dans toutes les évaluations des modules auxquels il est inscrit et n'a pas de note)
|
||||
à la valeur donnée par value, qui est en général "ATT", "ABS", "EXC".
|
||||
"""
|
||||
from app.scodoc import sco_saisie_notes
|
||||
|
||||
inscriptions = (
|
||||
ModuleImplInscription.query.filter_by(etudid=etud.id)
|
||||
.join(ModuleImpl)
|
||||
.filter_by(formsemestre_id=self.id)
|
||||
)
|
||||
nb_recorded = 0
|
||||
for inscription in inscriptions:
|
||||
for evaluation in inscription.modimpl.evaluations:
|
||||
if evaluation.get_etud_note(etud) is None:
|
||||
if not sco_saisie_notes.do_evaluation_set_etud_note(
|
||||
evaluation, etud, value
|
||||
):
|
||||
raise ScoValueError(
|
||||
"erreur lors de l'enregistrement de la note"
|
||||
)
|
||||
nb_recorded += 1
|
||||
return nb_recorded
|
||||
|
||||
|
||||
# Association id des utilisateurs responsables (aka directeurs des etudes) du semestre
|
||||
notes_formsemestre_responsables = db.Table(
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -40,6 +40,7 @@ from app.comp import res_sem
|
|||
from app.comp.res_compat import NotesTableCompat
|
||||
from app.models import Evaluation, FormSemestre
|
||||
from app.models import ScolarNews
|
||||
from app.models.etudiants import Identite
|
||||
import app.scodoc.sco_utils as scu
|
||||
from app.scodoc.sco_utils import ModuleType
|
||||
import app.scodoc.notesdb as ndb
|
||||
|
@ -300,6 +301,25 @@ def do_evaluation_upload_xls():
|
|||
return 0, msg + "<p>(pas de notes modifiées)</p>"
|
||||
|
||||
|
||||
def do_evaluation_set_etud_note(evaluation: Evaluation, etud: Identite, value) -> bool:
|
||||
"""Enregistre la note d'un seul étudiant
|
||||
value: valeur externe (float ou str)
|
||||
"""
|
||||
if not sco_permissions_check.can_edit_notes(current_user, evaluation.moduleimpl.id):
|
||||
raise AccessDenied(f"Modification des notes impossible pour {current_user}")
|
||||
# Convert and check value
|
||||
L, invalids, _, _, _ = _check_notes(
|
||||
[(etud.id, value)], evaluation.to_dict(), evaluation.moduleimpl.module.to_dict()
|
||||
)
|
||||
if len(invalids) == 0:
|
||||
nb_changed, _, _ = notes_add(
|
||||
current_user, evaluation.id, L, "Initialisation notes"
|
||||
)
|
||||
if nb_changed == 1:
|
||||
return True
|
||||
return False # error
|
||||
|
||||
|
||||
def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
|
||||
"""Initialisation des notes manquantes"""
|
||||
evaluation = Evaluation.query.get_or_404(evaluation_id)
|
||||
|
@ -318,7 +338,7 @@ def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
|
|||
for etudid, _ in etudid_etats: # pour tous les inscrits
|
||||
if etudid not in notes_db: # pas de note
|
||||
notes.append((etudid, value))
|
||||
# Check value
|
||||
# Convert and check values
|
||||
L, invalids, _, _, _ = _check_notes(
|
||||
notes, evaluation.to_dict(), modimpl.module.to_dict()
|
||||
)
|
||||
|
|
|
@ -203,6 +203,12 @@ sco_publish(
|
|||
Permission.ScoImplement,
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
sco_publish(
|
||||
"/formsemestre_view_etuds_sans_note",
|
||||
sco_formsemestre_status.formsemestre_note_etuds_sans_notes,
|
||||
Permission.ScoView,
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
sco_publish(
|
||||
"/formsemestre_recapcomplet",
|
||||
sco_recapcomplet.formsemestre_recapcomplet,
|
||||
|
|
Loading…
Reference in New Issue