############################################################################## # ScoDoc # Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved. # See LICENSE ############################################################################## """Jury BUT: calcul des décisions de jury annuelles "automatiques" """ from flask import g, url_for from app import db from app.but import jury_but from app.models import Identite, FormSemestre, ScolarNews from app.scodoc import sco_cache from app.scodoc.sco_exceptions import ScoValueError def formsemestre_validation_auto_but( formsemestre: FormSemestre, only_adm: 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". - 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.get_etud(etudid) deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre) nb_etud_modif += deca.record_all(only_validantes=only_adm) db.session.commit() ScolarNews.add( typ=ScolarNews.NEWS_JURY, obj=formsemestre.id, text=f"""Calcul jury automatique du semestre {formsemestre.html_link_status()}""", url=url_for( "notes.formsemestre_status", scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id, ), ) return nb_etud_modif