############################################################################## # 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=True) -> int: """Calcul automatique des décisions de jury sur une année BUT. 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) 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 if deca.admis or not only_adm: deca.record_all() db.session.commit() return nb_admis