diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index d64bf4d9c..4961e8a21 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -1333,11 +1333,18 @@ Ceci n'est possible que si : cancelbutton="Annuler", ) if tf[0] == 0: - if formsemestre_has_decisions_or_compensations(formsemestre): + has_decisions, message = formsemestre_has_decisions_or_compensations( + formsemestre + ) + if has_decisions: H.append( - """

Ce semestre ne peut pas être supprimé ! - (il y a des décisions de jury ou des compensations par d'autres semestres) -

""" + f"""

Ce semestre ne peut pas être supprimé !

+

il y a des décisions de jury ou des compensations par d'autres semestres: +

+ + """ ) else: H.append(tf[1]) @@ -1372,32 +1379,46 @@ def formsemestre_delete2(formsemestre_id, dialog_confirmed=False): return flask.redirect(scu.ScoURL()) -def formsemestre_has_decisions_or_compensations(formsemestre: FormSemestre): +def formsemestre_has_decisions_or_compensations( + formsemestre: FormSemestre, +) -> tuple[bool, str]: """True if decision de jury (sem. UE, RCUE, année) émanant de ce semestre ou compensation de ce semestre par d'autres semestres ou autorisations de passage. """ # Validations de semestre ou d'UEs - if ScolarFormSemestreValidation.query.filter_by( + nb_validations = ScolarFormSemestreValidation.query.filter_by( formsemestre_id=formsemestre.id - ).count(): - return True - if ScolarFormSemestreValidation.query.filter_by( + ).count() + if nb_validations: + return True, f"{nb_validations} validations de semestre ou d'UE" + nb_validations = ScolarFormSemestreValidation.query.filter_by( compense_formsemestre_id=formsemestre.id - ).count(): - return True + ).count() + if nb_validations: + return True, f"{nb_validations} compensations utilisées dans d'autres semestres" # Autorisations d'inscription: - if ScolarAutorisationInscription.query.filter_by( + nb_validations = ScolarAutorisationInscription.query.filter_by( origin_formsemestre_id=formsemestre.id - ).count(): - return True + ).count() + if nb_validations: + return ( + True, + f"{nb_validations} autorisations d'inscriptions émanant de ce semestre", + ) # Validations d'années BUT - if ApcValidationAnnee.query.filter_by(formsemestre_id=formsemestre.id).count(): - return True + nb_validations = ApcValidationAnnee.query.filter_by( + formsemestre_id=formsemestre.id + ).count() + if nb_validations: + return True, f"{nb_validations} validations d'année BUT utilisant ce semestre" # Validations de RCUEs - if ApcValidationRCUE.query.filter_by(formsemestre_id=formsemestre.id).count(): - return True - return False + nb_validations = ApcValidationRCUE.query.filter_by( + formsemestre_id=formsemestre.id + ).count() + if nb_validations: + return True, f"{nb_validations} validations de RCUE utilisant ce semestre" + return False, "" def do_formsemestre_delete(formsemestre_id): diff --git a/app/scodoc/sco_formsemestre_inscriptions.py b/app/scodoc/sco_formsemestre_inscriptions.py index f59eaa1e2..82744b8fb 100644 --- a/app/scodoc/sco_formsemestre_inscriptions.py +++ b/app/scodoc/sco_formsemestre_inscriptions.py @@ -175,9 +175,7 @@ def do_formsemestre_demission( ) db.session.add(event) db.session.commit() - sco_cache.invalidate_formsemestre( - formsemestre_id=formsemestre_id - ) # > démission ou défaillance + sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) if etat_new == scu.DEMISSION: flash("Démission enregistrée") elif etat_new == scu.DEF: diff --git a/app/views/scolar.py b/app/views/scolar.py index a53df3f31..19ec1c7d2 100644 --- a/app/views/scolar.py +++ b/app/views/scolar.py @@ -1306,6 +1306,8 @@ def _do_cancel_dem_or_def( db.session.delete(event) db.session.commit() + sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) + flash(f"{operation_name} annulée.") return flask.redirect( url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) @@ -1755,9 +1757,7 @@ def _etudident_create_or_edit_form(edit): # Inval semesters with this student: to_inval = [s["formsemestre_id"] for s in etud["sems"]] for formsemestre_id in to_inval: - sco_cache.invalidate_formsemestre( - formsemestre_id=formsemestre_id - ) # > etudident_create_or_edit + sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) # return flask.redirect( url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) @@ -1833,7 +1833,7 @@ def etudident_delete(etudid, dialog_confirmed=False): # Inval semestres où il était inscrit: to_inval = [s["formsemestre_id"] for s in etud["sems"]] for formsemestre_id in to_inval: - sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) # > + sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) flash("Étudiant supprimé !") return flask.redirect(scu.ScoURL())