diff --git a/app/comp/res_but.py b/app/comp/res_but.py index 238f38d5..1d7b3ad7 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -307,7 +307,7 @@ class ResultatsSemestreBUT(NotesTableCompat): return ues_ids - def etud_has_decision(self, etudid) -> bool: + def etud_has_decision(self, etudid, include_rcues=True) -> bool: """True s'il y a une décision (quelconque) de jury émanant de ce formsemestre pour cet étudiant. prend aussi en compte les autorisations de passage. @@ -318,9 +318,12 @@ class ResultatsSemestreBUT(NotesTableCompat): or ApcValidationAnnee.query.filter_by( formsemestre_id=self.formsemestre.id, etudid=etudid ).count() - or ApcValidationRCUE.query.filter_by( - formsemestre_id=self.formsemestre.id, etudid=etudid - ).count() + or ( + include_rcues + and ApcValidationRCUE.query.filter_by( + formsemestre_id=self.formsemestre.id, etudid=etudid + ).count() + ) ) def get_validations_annee(self) -> dict[int, ApcValidationAnnee]: diff --git a/app/comp/res_compat.py b/app/comp/res_compat.py index 2934f1e9..0e6cf757 100644 --- a/app/comp/res_compat.py +++ b/app/comp/res_compat.py @@ -290,9 +290,10 @@ class NotesTableCompat(ResultatsSemestre): ] return etudids - def etud_has_decision(self, etudid) -> bool: + def etud_has_decision(self, etudid, include_rcues=True) -> bool: """True s'il y a une décision de jury pour cet étudiant émanant de ce formsemestre. prend aussi en compte les autorisations de passage. + Si include_rcues, prend en compte les validation d'RCUEs en BUT (pas d'effet en classic). Sous-classée en BUT pour les RCUEs et années. """ return bool( diff --git a/app/models/but_validations.py b/app/models/but_validations.py index 7efd3069..9a6953b9 100644 --- a/app/models/but_validations.py +++ b/app/models/but_validations.py @@ -7,7 +7,6 @@ from app import db from app.models import CODE_STR_LEN from app.models.but_refcomp import ApcNiveau from app.models.etudiants import Identite -from app.models.formations import Formation from app.models.formsemestre import FormSemestre from app.models.ues import UniteEns diff --git a/app/scodoc/sco_saisie_notes.py b/app/scodoc/sco_saisie_notes.py index 489165bd..e67ebea5 100644 --- a/app/scodoc/sco_saisie_notes.py +++ b/app/scodoc/sco_saisie_notes.py @@ -294,7 +294,7 @@ def do_evaluation_upload_xls(): len(absents)} absents, {nb_suppress} note supprimées)

""" if etudids_with_decisions: - msg += """

Important: il y avait déjà des décisions de jury + msg += """

Important: il y avait déjà des décisions de jury enregistrées, qui sont peut-être à revoir suite à cette modification !

""" return 1, msg @@ -642,7 +642,7 @@ def notes_add( ) cursor.execute( """DELETE FROM notes_notes - WHERE etudid = %(etudid)s + WHERE etudid = %(etudid)s AND evaluation_id = %(evaluation_id)s """, args, @@ -660,7 +660,7 @@ def notes_add( nb_suppress += 1 if changed: etudids_changed.append(etudid) - if res.etud_has_decision(etudid): + if res.etud_has_decision(etudid, include_rcues=False): etudids_with_decision.append(etudid) except Exception as exc: log("*** exception in notes_add") @@ -691,7 +691,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()): avez l'autorisation d'effectuer cette opération)

Continuer

""" @@ -740,7 +740,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()):
-
""" @@ -1168,7 +1168,11 @@ def _form_saisie_notes( return '
Aucun étudiant sélectionné !
' # Décisions de jury existantes ? - decisions_jury = {etudid: res.etud_has_decision(etudid) for etudid in etudids} + # en BUT on ne considère pas les RCUEs car ils peuvenut avoir été validés depuis + # d'autres semestres (les validations de RCUE n'indiquent pas si elles sont "externes") + decisions_jury = { + etudid: res.etud_has_decision(etudid, include_rcues=False) for etudid in etudids + } # Nb de décisions de jury (pour les inscrits à l'évaluation): nb_decisions = sum(decisions_jury.values()) @@ -1308,7 +1312,7 @@ def _form_saisie_notes( ) H.append(tf.getform()) # check and init H.append( - f"""Terminer """