forked from ScoDoc/DocScoDoc
47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
##############################################################################
|
|
# ScoDoc
|
|
# Copyright (c) 1999 - 2023 Emmanuel Viennet. All rights reserved.
|
|
# See LICENSE
|
|
##############################################################################
|
|
|
|
"""Jury BUT: calcul des décisions de jury annuelles "automatiques"
|
|
"""
|
|
|
|
from app import db
|
|
from app.but import jury_but
|
|
from app.models.etudiants import Identite
|
|
from app.models.formsemestre import FormSemestre
|
|
from app.scodoc import sco_cache
|
|
from app.scodoc.sco_exceptions import ScoValueError
|
|
|
|
|
|
def formsemestre_validation_auto_but(
|
|
formsemestre: FormSemestre, only_adm: bool = True, no_overwrite: bool = True
|
|
) -> int:
|
|
"""Calcul automatique des décisions de jury sur une "année" BUT.
|
|
|
|
- N'enregistre jamais de décisions de l'année scolaire précédente, même
|
|
si on a des RCUE "à cheval".
|
|
- Ne modifie jamais de décisions déjà enregistrées (sauf si no_overwrite est faux,
|
|
ce qui est utilisé pour certains tests unitaires).
|
|
- Normalement, only_adm est True et on n'enregistre que les décisions validantes
|
|
de droit: ADM ou CMP.
|
|
En revanche, si only_adm est faux, on enregistre la première décision proposée par ScoDoc
|
|
(mode à n'utiliser que pour les tests unitaires vérifiant la saisie des jurys)
|
|
|
|
Returns: nombre d'étudiants pour lesquels on a enregistré au moins un code.
|
|
"""
|
|
if not formsemestre.formation.is_apc():
|
|
raise ScoValueError("fonction réservée aux formations BUT")
|
|
nb_etud_modif = 0
|
|
with sco_cache.DeferredSemCacheManager():
|
|
for etudid in formsemestre.etuds_inscriptions:
|
|
etud: Identite = Identite.query.get(etudid)
|
|
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
|
nb_etud_modif += deca.record_all(
|
|
no_overwrite=no_overwrite, only_validantes=only_adm
|
|
)
|
|
|
|
db.session.commit()
|
|
return nb_etud_modif
|