ScoDoc/app/but/jury_but_validation_auto.py

45 lines
1.7 KiB
Python
Raw Normal View History

2022-06-25 02:59:43 +02:00
##############################################################################
# ScoDoc
2023-01-02 13:16:27 +01:00
# Copyright (c) 1999 - 2023 Emmanuel Viennet. All rights reserved.
2022-06-25 02:59:43 +02:00
# See LICENSE
##############################################################################
"""Jury BUT: calcul des décisions de jury annuelles "automatiques"
2022-06-25 02:59:43 +02:00
"""
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
2022-06-25 02:59:43 +02:00
from app.scodoc.sco_exceptions import ScoValueError
def formsemestre_validation_auto_but(
formsemestre: FormSemestre, only_adm: bool = True, no_overwrite: bool = True
) -> int:
2022-06-25 02:59:43 +02:00
"""Calcul automatique des décisions de jury sur une année BUT.
2022-12-18 19:42:33 +01:00
Normalement, only_adm est True et on n'enregistre que les décisions ADM (de droit).
Si only_adm est faux, on enregistre la première décision proposée par ScoDoc
(mode à n'utiliser que pour les tests)
Si no_overwrite est vrai (défaut), ne -écrit jamais les codes déjà enregistrés
(utiliser faux pour certains tests)
2022-06-25 02:59:43 +02:00
Returns: nombre d'étudiants "admis"
"""
if not formsemestre.formation.is_apc():
raise ScoValueError("fonction réservée aux formations BUT")
nb_admis = 0
with sco_cache.DeferredSemCacheManager():
for etudid in formsemestre.etuds_inscriptions:
etud: Identite = Identite.query.get(etudid)
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
if deca.admis: # année réussie
nb_admis += 1
2022-12-18 19:42:33 +01:00
if deca.admis or not only_adm:
deca.record_all(no_overwrite=no_overwrite)
2022-06-25 02:59:43 +02:00
db.session.commit()
return nb_admis