forked from ScoDoc/ScoDoc
Validations auto classic et BUT: accélération via DeferredSemCacheManager.
This commit is contained in:
parent
b698196a09
commit
60f5bdfc60
@ -4,15 +4,14 @@
|
|||||||
# See LICENSE
|
# See LICENSE
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
"""Jury BUT: clacul des décisions de jury annuelles "automatiques"
|
"""Jury BUT: calcul des décisions de jury annuelles "automatiques"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from flask import g, url_for
|
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
from app.but import jury_but
|
from app.but import jury_but
|
||||||
from app.models.etudiants import Identite
|
from app.models.etudiants import Identite
|
||||||
from app.models.formsemestre import FormSemestre
|
from app.models.formsemestre import FormSemestre
|
||||||
|
from app.scodoc import sco_cache
|
||||||
from app.scodoc.sco_exceptions import ScoValueError
|
from app.scodoc.sco_exceptions import ScoValueError
|
||||||
|
|
||||||
|
|
||||||
@ -23,12 +22,13 @@ def formsemestre_validation_auto_but(formsemestre: FormSemestre) -> int:
|
|||||||
if not formsemestre.formation.is_apc():
|
if not formsemestre.formation.is_apc():
|
||||||
raise ScoValueError("fonction réservée aux formations BUT")
|
raise ScoValueError("fonction réservée aux formations BUT")
|
||||||
nb_admis = 0
|
nb_admis = 0
|
||||||
for etudid in formsemestre.etuds_inscriptions:
|
with sco_cache.DeferredSemCacheManager():
|
||||||
etud: Identite = Identite.query.get(etudid)
|
for etudid in formsemestre.etuds_inscriptions:
|
||||||
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
etud: Identite = Identite.query.get(etudid)
|
||||||
if deca.admis: # année réussie
|
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
||||||
deca.record_all()
|
if deca.admis: # année réussie
|
||||||
nb_admis += 1
|
deca.record_all()
|
||||||
|
nb_admis += 1
|
||||||
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return nb_admis
|
return nb_admis
|
||||||
|
@ -871,10 +871,9 @@ def form_decision_manuelle(Se, formsemestre_id, etudid, desturl="", sortcol=None
|
|||||||
# -----------
|
# -----------
|
||||||
def formsemestre_validation_auto(formsemestre_id):
|
def formsemestre_validation_auto(formsemestre_id):
|
||||||
"Formulaire saisie automatisee des decisions d'un semestre"
|
"Formulaire saisie automatisee des decisions d'un semestre"
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header("Saisie automatique des décisions du semestre"),
|
html_sco_header.html_sem_header("Saisie automatique des décisions du semestre"),
|
||||||
"""
|
f"""
|
||||||
<ul>
|
<ul>
|
||||||
<li>Seuls les étudiants qui obtiennent le semestre seront affectés (code ADM, moyenne générale et
|
<li>Seuls les étudiants qui obtiennent le semestre seront affectés (code ADM, moyenne générale et
|
||||||
toutes les barres, semestre précédent validé);</li>
|
toutes les barres, semestre précédent validé);</li>
|
||||||
@ -886,12 +885,11 @@ def formsemestre_validation_auto(formsemestre_id):
|
|||||||
<p>Il est donc vivement conseillé de relire soigneusement les décisions à l'issue
|
<p>Il est donc vivement conseillé de relire soigneusement les décisions à l'issue
|
||||||
de cette procédure !</p>
|
de cette procédure !</p>
|
||||||
<form action="do_formsemestre_validation_auto">
|
<form action="do_formsemestre_validation_auto">
|
||||||
<input type="hidden" name="formsemestre_id" value="%s"/>
|
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}"/>
|
||||||
<input type="submit" value="Calculer automatiquement ces décisions"/>
|
<input type="submit" value="Calculer automatiquement ces décisions"/>
|
||||||
<p><em>Le calcul prend quelques minutes, soyez patients !</em></p>
|
<p><em>Le calcul prend quelques minutes, soyez patients !</em></p>
|
||||||
</form>
|
</form>
|
||||||
"""
|
""",
|
||||||
% formsemestre_id,
|
|
||||||
html_sco_header.sco_footer(),
|
html_sco_header.sco_footer(),
|
||||||
]
|
]
|
||||||
return "\n".join(H)
|
return "\n".join(H)
|
||||||
@ -906,53 +904,56 @@ def do_formsemestre_validation_auto(formsemestre_id):
|
|||||||
etudids = nt.get_etudids()
|
etudids = nt.get_etudids()
|
||||||
nb_valid = 0
|
nb_valid = 0
|
||||||
conflicts = [] # liste des etudiants avec decision differente déjà saisie
|
conflicts = [] # liste des etudiants avec decision differente déjà saisie
|
||||||
for etudid in etudids:
|
with sco_cache.DeferredSemCacheManager():
|
||||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
for etudid in etudids:
|
||||||
Se = sco_cursus.get_situation_etud_cursus(etud, formsemestre_id)
|
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||||
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
Se = sco_cursus.get_situation_etud_cursus(etud, formsemestre_id)
|
||||||
{"etudid": etudid, "formsemestre_id": formsemestre_id}
|
ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
)[0]
|
{"etudid": etudid, "formsemestre_id": formsemestre_id}
|
||||||
|
)[0]
|
||||||
|
|
||||||
# Conditions pour validation automatique:
|
# Conditions pour validation automatique:
|
||||||
if ins["etat"] == "I" and (
|
if ins["etat"] == "I" and (
|
||||||
(
|
(
|
||||||
(not Se.prev)
|
(not Se.prev)
|
||||||
or (Se.prev_decision and Se.prev_decision["code"] in (ADM, ADC, ADJ))
|
or (
|
||||||
)
|
Se.prev_decision and Se.prev_decision["code"] in (ADM, ADC, ADJ)
|
||||||
and Se.barre_moy_ok
|
)
|
||||||
and Se.barres_ue_ok
|
|
||||||
and not etud_has_notes_attente(etudid, formsemestre_id)
|
|
||||||
):
|
|
||||||
# check: s'il existe une decision ou autorisation et qu'elles sont differentes,
|
|
||||||
# warning (et ne fait rien)
|
|
||||||
decision_sem = nt.get_etud_decision_sem(etudid)
|
|
||||||
ok = True
|
|
||||||
if decision_sem and decision_sem["code"] != ADM:
|
|
||||||
ok = False
|
|
||||||
conflicts.append(etud)
|
|
||||||
autorisations = ScolarAutorisationInscription.query.filter_by(
|
|
||||||
etudid=etudid, origin_formsemestre_id=formsemestre_id
|
|
||||||
).all()
|
|
||||||
if len(autorisations) != 0:
|
|
||||||
if (
|
|
||||||
len(autorisations) > 1
|
|
||||||
or autorisations[0].semestre_id != next_semestre_id
|
|
||||||
):
|
|
||||||
if ok:
|
|
||||||
conflicts.append(etud)
|
|
||||||
ok = False
|
|
||||||
|
|
||||||
# ok, valide !
|
|
||||||
if ok:
|
|
||||||
formsemestre_validation_etud_manu(
|
|
||||||
formsemestre_id,
|
|
||||||
etudid,
|
|
||||||
code_etat=ADM,
|
|
||||||
devenir="NEXT",
|
|
||||||
assidu=True,
|
|
||||||
redirect=False,
|
|
||||||
)
|
)
|
||||||
nb_valid += 1
|
and Se.barre_moy_ok
|
||||||
|
and Se.barres_ue_ok
|
||||||
|
and not etud_has_notes_attente(etudid, formsemestre_id)
|
||||||
|
):
|
||||||
|
# check: s'il existe une decision ou autorisation et qu'elles sont differentes,
|
||||||
|
# warning (et ne fait rien)
|
||||||
|
decision_sem = nt.get_etud_decision_sem(etudid)
|
||||||
|
ok = True
|
||||||
|
if decision_sem and decision_sem["code"] != ADM:
|
||||||
|
ok = False
|
||||||
|
conflicts.append(etud)
|
||||||
|
autorisations = ScolarAutorisationInscription.query.filter_by(
|
||||||
|
etudid=etudid, origin_formsemestre_id=formsemestre_id
|
||||||
|
).all()
|
||||||
|
if len(autorisations) != 0:
|
||||||
|
if (
|
||||||
|
len(autorisations) > 1
|
||||||
|
or autorisations[0].semestre_id != next_semestre_id
|
||||||
|
):
|
||||||
|
if ok:
|
||||||
|
conflicts.append(etud)
|
||||||
|
ok = False
|
||||||
|
|
||||||
|
# ok, valide !
|
||||||
|
if ok:
|
||||||
|
formsemestre_validation_etud_manu(
|
||||||
|
formsemestre_id,
|
||||||
|
etudid,
|
||||||
|
code_etat=ADM,
|
||||||
|
devenir="NEXT",
|
||||||
|
assidu=True,
|
||||||
|
redirect=False,
|
||||||
|
)
|
||||||
|
nb_valid += 1
|
||||||
log(
|
log(
|
||||||
"do_formsemestre_validation_auto: %d validations, %d conflicts"
|
"do_formsemestre_validation_auto: %d validations, %d conflicts"
|
||||||
% (nb_valid, len(conflicts))
|
% (nb_valid, len(conflicts))
|
||||||
|
Loading…
Reference in New Issue
Block a user