Améliore saisie 'automatique' des décisions BUT
This commit is contained in:
parent
8d124eca3e
commit
0ff5fa46d9
@ -92,6 +92,7 @@ from app.models.validations import ScolarFormSemestreValidation
|
|||||||
from app.scodoc import sco_cache
|
from app.scodoc import sco_cache
|
||||||
from app.scodoc import sco_codes_parcours as sco_codes
|
from app.scodoc import sco_codes_parcours as sco_codes
|
||||||
from app.scodoc.sco_codes_parcours import (
|
from app.scodoc.sco_codes_parcours import (
|
||||||
|
BUT_CODES_ORDERED,
|
||||||
CODES_RCUE_VALIDES,
|
CODES_RCUE_VALIDES,
|
||||||
CODES_UE_VALIDES,
|
CODES_UE_VALIDES,
|
||||||
RED,
|
RED,
|
||||||
@ -757,20 +758,38 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
|
|
||||||
def record_all(self, no_overwrite: bool = True):
|
def record_all(self, no_overwrite: bool = True):
|
||||||
"""Enregistre les codes qui n'ont pas été spécifiés par le formulaire,
|
"""Enregistre les codes qui n'ont pas été spécifiés par le formulaire,
|
||||||
et sont donc en mode "automatique"
|
et sont donc en mode "automatique".
|
||||||
|
- Si "à cheval", ne modifie pas les codes UE de l'année scolaire précédente.
|
||||||
|
- Pour les RCUE: n'enregistre que si la nouvelle décision est plus favorable que l'ancienne.
|
||||||
"""
|
"""
|
||||||
decisions = (
|
# Toujours valider dans l'ordre UE, RCUE, Année:
|
||||||
list(self.decisions_ues.values())
|
annee_scolaire = self.formsemestre.annee_scolaire()
|
||||||
+ list(self.decisions_rcue_by_niveau.values())
|
# UEs
|
||||||
+ [self]
|
for dec_ue in self.decisions_ues.values():
|
||||||
)
|
if (
|
||||||
for dec in decisions:
|
not dec_ue.recorded
|
||||||
if not dec.recorded:
|
) and dec_ue.formsemestre.annee_scolaire() == annee_scolaire:
|
||||||
# rappel: le code par défaut est en tête
|
# rappel: le code par défaut est en tête
|
||||||
code = dec.codes[0] if dec.codes else None
|
code = dec_ue.codes[0] if dec_ue.codes else None
|
||||||
# enregistre le code jury seulement s'il n'y a pas déjà de code
|
# enregistre le code jury seulement s'il n'y a pas déjà de code
|
||||||
# (no_overwrite=True) sauf en mode test yaml
|
# (no_overwrite=True) sauf en mode test yaml
|
||||||
dec.record(code, no_overwrite=no_overwrite)
|
dec_ue.record(code, no_overwrite=no_overwrite)
|
||||||
|
# RCUE : enregistre seulement si pas déjà validé "mieux"
|
||||||
|
for dec_rcue in self.decisions_rcue_by_niveau.values():
|
||||||
|
code = dec_rcue.codes[0] if dec_rcue.codes else None
|
||||||
|
if (not dec_rcue.recorded) and (
|
||||||
|
(not dec_rcue.validation)
|
||||||
|
or BUT_CODES_ORDERED.get(dec_rcue.validation.code, 0)
|
||||||
|
< BUT_CODES_ORDERED.get(code, 0)
|
||||||
|
):
|
||||||
|
dec_rcue.record(code, no_overwrite=no_overwrite)
|
||||||
|
# Année:
|
||||||
|
if not self.recorded:
|
||||||
|
# rappel: le code par défaut est en tête
|
||||||
|
code = self.codes[0] if self.codes else None
|
||||||
|
# enregistre le code jury seulement s'il n'y a pas déjà de code
|
||||||
|
# (no_overwrite=True) sauf en mode test yaml
|
||||||
|
self.record(code, no_overwrite=no_overwrite)
|
||||||
|
|
||||||
def erase(self, only_one_sem=False):
|
def erase(self, only_one_sem=False):
|
||||||
"""Efface les décisions de jury de cet étudiant
|
"""Efface les décisions de jury de cet étudiant
|
||||||
|
@ -19,6 +19,8 @@ def formsemestre_validation_auto_but(
|
|||||||
formsemestre: FormSemestre, only_adm: bool = True, no_overwrite: bool = True
|
formsemestre: FormSemestre, only_adm: bool = True, no_overwrite: bool = True
|
||||||
) -> int:
|
) -> int:
|
||||||
"""Calcul automatique des décisions de jury sur une année BUT.
|
"""Calcul automatique des décisions de jury sur une année BUT.
|
||||||
|
Ne modifie 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 ADM (de droit).
|
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
|
Si only_adm est faux, on enregistre la première décision proposée par ScoDoc
|
||||||
(mode à n'utiliser que pour les tests)
|
(mode à n'utiliser que pour les tests)
|
||||||
|
@ -191,7 +191,6 @@ Etudiants:
|
|||||||
decisions_rcues: # on repère ici les RCUE par l'acronyme de leur 1ere UE (donc du S1)
|
decisions_rcues: # on repère ici les RCUE par l'acronyme de leur 1ere UE (donc du S1)
|
||||||
"UE11":
|
"UE11":
|
||||||
code_valide: CMP
|
code_valide: CMP
|
||||||
decision_jury: CMP
|
|
||||||
rcue:
|
rcue:
|
||||||
moy_rcue: 10.75
|
moy_rcue: 10.75
|
||||||
est_compensable: True
|
est_compensable: True
|
||||||
|
@ -423,7 +423,7 @@ def _check_decisions_rcues(
|
|||||||
):
|
):
|
||||||
"Vérifie les décisions d'RCUEs"
|
"Vérifie les décisions d'RCUEs"
|
||||||
for acronyme, dec_rcue_att in decisions_rcues_att.items():
|
for acronyme, dec_rcue_att in decisions_rcues_att.items():
|
||||||
# retrouve la décision RCUE à partir de l'acronyme de la 1er UE
|
# retrouve la décision RCUE à partir de l'acronyme de la 1ère UE
|
||||||
rcues_d = [
|
rcues_d = [
|
||||||
dec_rcue
|
dec_rcue
|
||||||
for dec_rcue in decisions_rcues
|
for dec_rcue in decisions_rcues
|
||||||
|
Loading…
Reference in New Issue
Block a user