From e2ffec1ad6b4947decece561db9550b1ce481143 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet <emmanuel.viennet@gmail.com> Date: Mon, 17 Mar 2025 21:56:05 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9liore=20log=20suppressions=20d=C3=A9cis?= =?UTF-8?q?ions=20de=20jury?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/jury.py | 26 +++++++++++++---------- app/models/but_validations.py | 11 +++++++--- app/models/validations.py | 8 +++++-- app/scodoc/sco_formsemestre_validation.py | 12 +++++++++++ 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app/api/jury.py b/app/api/jury.py index b58b35c2..795062bd 100644 --- a/app/api/jury.py +++ b/app/api/jury.py @@ -5,12 +5,12 @@ ############################################################################## """ - ScoDoc 9 API : jury WIP à compléter avec enregistrement décisions. +ScoDoc 9 API : jury WIP à compléter avec enregistrement décisions. - CATEGORY - -------- - Jury +CATEGORY +-------- +Jury """ import datetime @@ -85,7 +85,7 @@ def _news_delete_jury_etud(etud: Identite, detail: str = ""): Scolog.logdb( "jury_delete_manual", etudid=etud.id, - msg=f"Validation {detail} effacée", + msg=f"Suppression décision jury {detail}", commit=True, ) @@ -151,11 +151,12 @@ def _validation_ue_delete(etudid: int, validation_id: int): # Validation non rattachée à un semestre: on doit être chef return json_error(403, "opération non autorisée (126)") + detail = f"UE {validation}" log(f"validation_ue_delete: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud) + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -179,11 +180,12 @@ def autorisation_inscription_delete(etudid: int, validation_id: int): validation = ScolarAutorisationInscription.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() + detail = f"autorisation inscription {validation}" log(f"autorisation_inscription_delete: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud) + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -338,11 +340,12 @@ def validation_rcue_delete(etudid: int, validation_id: int): validation = ApcValidationRCUE.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() + detail = f"RCUE {validation}" log(f"delete validation_ue_delete: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud, detail="UE") + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -366,12 +369,12 @@ def validation_annee_but_delete(etudid: int, validation_id: int): validation = ApcValidationAnnee.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() - ordre = validation.ordre + detail = f"{validation}" log(f"delete validation_annee_but: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud, detail=f"année BUT{ordre}") + _news_delete_jury_etud(etud, detail=detail) return "ok" @@ -395,9 +398,10 @@ def validation_dut120_delete(etudid: int, validation_id: int): validation = ValidationDUT120.query.filter_by( id=validation_id, etudid=etudid ).first_or_404() + detail = f"{validation}" log(f"delete validation_dut120: etuid={etudid} {validation}") db.session.delete(validation) sco_cache.invalidate_formsemestre_etud(etud) db.session.commit() - _news_delete_jury_etud(etud, detail="diplôme DUT120") + _news_delete_jury_etud(etud, detail=detail) return "ok" diff --git a/app/models/but_validations.py b/app/models/but_validations.py index b5d96219..e09e6d0a 100644 --- a/app/models/but_validations.py +++ b/app/models/but_validations.py @@ -1,7 +1,6 @@ # -*- coding: UTF-8 -* -"""Décisions de jury (validations) des RCUE et années du BUT -""" +"""Décisions de jury (validations) des RCUE et années du BUT""" from collections import defaultdict import sqlalchemy as sa @@ -163,7 +162,8 @@ class ApcValidationAnnee(ScoDocModel): } BUT{self.ordre}/{self.annee_scolaire}:{self.code!r}>""" def __str__(self): - return f"""décision sur année BUT{self.ordre} {self.annee_scolaire} : {self.code}""" + return f"""décision sur année BUT{self.ordre} {self.annee_scolaire} : {self.code + } enregistrée le {self.date.strftime(scu.DATE_FMT) if self.date else '?'}""" def to_dict_bul(self) -> dict: "dict pour bulletins" @@ -326,6 +326,11 @@ class ValidationDUT120(ScoDocModel): def __repr__(self): return f"""<ValidationDUT120 {self.etud}>""" + def __str__(self): + return f"""Diplôme de DUT 120 ECTS { + self.formsemestre.formation.referentiel_competence.specialite + } enregistré le {self.date.strftime(scu.DATE_FMT)}""" + def html(self) -> str: "Affichage html" date_str = ( diff --git a/app/models/validations.py b/app/models/validations.py index 25417b42..4f860826 100644 --- a/app/models/validations.py +++ b/app/models/validations.py @@ -1,7 +1,6 @@ # -*- coding: UTF-8 -* -"""Notes, décisions de jury -""" +"""Notes, décisions de jury""" from flask_sqlalchemy.query import Query from app import db, log, models @@ -182,6 +181,11 @@ class ScolarAutorisationInscription(models.ScoDocModel): return f"""{self.__class__.__name__}(id={self.id}, etudid={ self.etudid}, semestre_id={self.semestre_id})""" + def __str__(self) -> str: + return f"""Autorisation de passage vers S{self.semestre_id} émise par { + self.origin_formsemestre.titre_mois() if self.origin_formsemestre else '?' + } le {self.date.strftime(scu.DATE_FMT) if self.date else '?'}""" + def to_dict(self) -> dict: "as a dict" d = dict(self.__dict__) diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py index b4690148..fe598e57 100644 --- a/app/scodoc/sco_formsemestre_validation.py +++ b/app/scodoc/sco_formsemestre_validation.py @@ -1122,24 +1122,36 @@ def formsemestre_validation_suppress_etud(formsemestre_id, etudid): """ log(f"formsemestre_validation_suppress_etud( {formsemestre_id}, {etudid})") + def log_op(v): + Scolog.logdb( + method="formsemestre_validation_suppress_etud", + etudid=etudid, + msg=f"Suppression décision jury sur {v}", + ) + # Validations jury classiques (semestres, UEs, autorisations) for v in ScolarFormSemestreValidation.query.filter_by( etudid=etudid, formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) + for v in ScolarAutorisationInscription.query.filter_by( etudid=etudid, origin_formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) # Validations jury spécifiques BUT for v in ApcValidationRCUE.query.filter_by( etudid=etudid, formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) for v in ApcValidationAnnee.query.filter_by( etudid=etudid, formsemestre_id=formsemestre_id ): db.session.delete(v) + log_op(v) db.session.commit() -- GitLab