diff --git a/app/api/jury.py b/app/api/jury.py index e71531eb..864dfe22 100644 --- a/app/api/jury.py +++ b/app/api/jury.py @@ -66,7 +66,7 @@ def _news_delete_jury_etud(etud: Identite): "génère news sur effacement décision" # n'utilise pas g.scodoc_dept, pas toujours dispo en mode API url = url_for( - "scolar.ficheEtud", scodoc_dept=etud.departement.acronym, etudid=etud.id + "scolar.fiche_etud", scodoc_dept=etud.departement.acronym, etudid=etud.id ) ScolarNews.add( typ=ScolarNews.NEWS_JURY, diff --git a/app/but/jury_but_pv.py b/app/but/jury_but_pv.py index 9b970a61..8ae09800 100644 --- a/app/but/jury_but_pv.py +++ b/app/but/jury_but_pv.py @@ -154,7 +154,7 @@ def pvjury_table_but( "_nom_target_attrs": f'class="etudinfo" id="{etud.id}"', "_nom_td_attrs": f'id="{etud.id}" class="etudinfo"', "_nom_target": url_for( - "scolar.ficheEtud", + "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id, ), diff --git a/app/but/jury_but_view.py b/app/but/jury_but_view.py index 544d13f2..8536ac63 100644 --- a/app/but/jury_but_view.py +++ b/app/but/jury_but_view.py @@ -447,7 +447,7 @@ def jury_but_semestriel(
Coefficient de l'UE capitalisée {ue.acronyme} impossible à déterminer pour l'étudiant {etud.nom_disp()}
Il faut "
@@ -176,7 +179,7 @@ class Identite(models.ScoDocModel):
def url_fiche(self) -> str:
"url de la fiche étudiant"
return url_for(
- "scolar.ficheEtud", scodoc_dept=self.departement.acronym, etudid=self.id
+ "scolar.fiche_etud", scodoc_dept=self.departement.acronym, etudid=self.id
)
@classmethod
@@ -433,9 +436,10 @@ class Identite(models.ScoDocModel):
"prenom_etat_civil": self.prenom_etat_civil,
}
- def to_dict_scodoc7(self) -> dict:
+ def to_dict_scodoc7(self, restrict=False) -> dict:
"""Représentation dictionnaire,
- compatible ScoDoc7 mais sans infos admission
+ compatible ScoDoc7 mais sans infos admission.
+ Si restrict, cache les infos "personnelles" si pas permission ViewEtudData
"""
e_dict = self.__dict__.copy() # dict(self.__dict__)
e_dict.pop("_sa_instance_state", None)
@@ -446,7 +450,7 @@ class Identite(models.ScoDocModel):
e_dict["nomprenom"] = self.nomprenom
adresse = self.adresses.first()
if adresse:
- e_dict.update(adresse.to_dict())
+ e_dict.update(adresse.to_dict(restrict=restrict))
return {k: v or "" for k, v in e_dict.items()} # convert_null_outputs_to_empty
def to_dict_bul(self, include_urls=True):
@@ -481,7 +485,7 @@ class Identite(models.ScoDocModel):
if include_urls and has_request_context():
# test request context so we can use this func in tests under the flask shell
d["fiche_url"] = url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=self.id
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=self.id
)
d["photo_url"] = sco_photos.get_etud_photo_url(self.id)
adresse = self.adresses.first()
@@ -825,12 +829,25 @@ class Adresse(models.ScoDocModel):
)
description = db.Column(db.Text)
- def to_dict(self, convert_nulls_to_str=False):
- """Représentation dictionnaire,"""
+ # Champs "protégés" par ViewEtudData (RGPD)
+ protected_attrs = {
+ "emailperso",
+ "domicile",
+ "codepostaldomicile",
+ "villedomicile",
+ "telephone",
+ "telephonemobile",
+ "fax",
+ }
+
+ def to_dict(self, convert_nulls_to_str=False, restrict=False):
+ """Représentation dictionnaire. Si restrict, filtre les champs protégés (RGPD)."""
e = dict(self.__dict__)
e.pop("_sa_instance_state", None)
if convert_nulls_to_str:
- return {k: e[k] or "" for k in e}
+ e = {k: v or "" for k, v in e.items()}
+ if restrict:
+ e = {k: v for (k, v) in e.items() if k not in self.protected_attrs}
return e
@@ -885,12 +902,16 @@ class Admission(models.ScoDocModel):
# classement (1..Ngr) par le jury dans le groupe APB
apb_classement_gr = db.Column(db.Integer)
+ # Tous les champs sont "protégés" par ViewEtudData (RGPD)
+ # sauf:
+ not_protected_attrs = {"bac", "specialite", "anne_bac"}
+
def get_bac(self) -> Baccalaureat:
"Le bac. utiliser bac.abbrev() pour avoir une chaine de caractères."
return Baccalaureat(self.bac, specialite=self.specialite)
- def to_dict(self, no_nulls=False):
- """Représentation dictionnaire,"""
+ def to_dict(self, no_nulls=False, restrict=False):
+ """Représentation dictionnaire. Si restrict, filtre les champs protégés (RGPD)."""
d = dict(self.__dict__)
d.pop("_sa_instance_state", None)
if no_nulls:
@@ -905,6 +926,8 @@ class Admission(models.ScoDocModel):
d[key] = 0
elif isinstance(col_type, sqlalchemy.Boolean):
d[key] = False
+ if restrict:
+ d = {k: v for (k, v) in d.items() if k in self.not_protected_attrs}
return d
@classmethod
diff --git a/app/pe/pe_jurype.py b/app/pe/pe_jurype.py
index 01687f7c..d6416c2e 100644
--- a/app/pe/pe_jurype.py
+++ b/app/pe/pe_jurype.py
@@ -455,7 +455,9 @@ class JuryPE(object):
reponse = False
etud = self.get_cache_etudInfo_d_un_etudiant(etudid)
- (_, parcours) = sco_report.get_code_cursus_etud(etud)
+ (_, parcours) = sco_report.get_code_cursus_etud(
+ etud["etudid"], sems=etud["sems"]
+ )
if (
len(codes_cursus.CODES_SEM_REO & set(parcours.values())) > 0
): # Eliminé car NAR apparait dans le parcours
@@ -527,7 +529,7 @@ class JuryPE(object):
etud = self.get_cache_etudInfo_d_un_etudiant(etudid)
(code, parcours) = sco_report.get_code_cursus_etud(
- etud
+ etud["etudid"], sems=etud["sems"]
) # description = '1234:A', parcours = {1:ADM, 2:NAR, ...}
sonDernierSemestreValide = max(
[
diff --git a/app/scodoc/html_sidebar.py b/app/scodoc/html_sidebar.py
index 9806b115..dce59627 100755
--- a/app/scodoc/html_sidebar.py
+++ b/app/scodoc/html_sidebar.py
@@ -107,7 +107,7 @@ def sidebar(etudid: int = None):
etud = sco_etud.get_etud_info(filled=True, etudid=etudid)[0]
params.update(etud)
params["fiche_url"] = url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid
)
# compte les absences du semestre en cours
H.append(
diff --git a/app/scodoc/sco_abs_billets.py b/app/scodoc/sco_abs_billets.py
index 18fe777f..4a9da0af 100644
--- a/app/scodoc/sco_abs_billets.py
+++ b/app/scodoc/sco_abs_billets.py
@@ -129,7 +129,7 @@ def table_billets(
] = f'id="{billet.etudiant.id}" class="etudinfo"'
if with_links:
billet_dict["_nomprenom_target"] = url_for(
- "scolar.ficheEtud",
+ "scolar.fiche_etud",
scodoc_dept=g.scodoc_dept,
etudid=billet_dict["etudid"],
)
diff --git a/app/scodoc/sco_abs_notification.py b/app/scodoc/sco_abs_notification.py
index 82caff29..50c50ae4 100644
--- a/app/scodoc/sco_abs_notification.py
+++ b/app/scodoc/sco_abs_notification.py
@@ -34,7 +34,7 @@ Il suffit d'appeler abs_notify() après chaque ajout d'absence.
import datetime
from typing import Optional
-from flask import current_app, g, url_for
+from flask import g, url_for
from flask_mail import Message
from app import db
@@ -42,6 +42,7 @@ from app import email
from app import log
from app.auth.models import User
from app.models.absences import AbsenceNotification
+from app.models.etudiants import Identite
from app.models.events import Scolog
from app.models.formsemestre import FormSemestre
import app.scodoc.notesdb as ndb
@@ -174,9 +175,15 @@ def abs_notify_get_destinations(
if prefs["abs_notify_email"]:
destinations.append(prefs["abs_notify_email"])
if prefs["abs_notify_etud"]:
- etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
- if etud["email_default"]:
- destinations.append(etud["email_default"])
+ etud = Identite.get_etud(etudid)
+ adresse = etud.adresses.first()
+ if adresse:
+ # Mail à utiliser pour les envois vers l'étudiant:
+ # choix qui pourrait être controlé par une preference
+ # ici priorité au mail institutionnel:
+ email_default = adresse.email or adresse.emailperso
+ if email_default:
+ destinations.append(email_default)
# Notification (à chaque fois) des resp. de modules ayant des évaluations
# à cette date
@@ -270,7 +277,7 @@ def abs_notification_message(
values["nbabsjust"] = nbabsjust
values["nbabsnonjust"] = nbabs - nbabsjust
values["url_ficheetud"] = url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid, _external=True
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid, _external=True
)
template = prefs["abs_notification_mail_tmpl"]
diff --git a/app/scodoc/sco_archives_etud.py b/app/scodoc/sco_archives_etud.py
index 1dca9f02..42fddde2 100644
--- a/app/scodoc/sco_archives_etud.py
+++ b/app/scodoc/sco_archives_etud.py
@@ -177,7 +177,7 @@ def etud_upload_file_form(etudid):
return "\n".join(H) + tf[1] + html_sco_header.sco_footer()
elif tf[0] == -1:
return flask.redirect(
- url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
+ url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid)
)
else:
data = tf[2]["datafile"].read()
@@ -188,7 +188,7 @@ def etud_upload_file_form(etudid):
etud_archive_id, data, filename, description=descr
)
return flask.redirect(
- url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
+ url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid)
)
@@ -228,7 +228,7 @@ def etud_delete_archive(etudid, archive_name, dialog_confirmed=False):
),
dest_url="",
cancel_url=url_for(
- "scolar.ficheEtud",
+ "scolar.fiche_etud",
scodoc_dept=g.scodoc_dept,
etudid=etudid,
head_message="annulation",
@@ -239,7 +239,7 @@ def etud_delete_archive(etudid, archive_name, dialog_confirmed=False):
ETUDS_ARCHIVER.delete_archive(archive_id, dept_id=etud["dept_id"])
flash("Archive supprimée")
return flask.redirect(
- url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
+ url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid)
)
diff --git a/app/scodoc/sco_cursus_dut.py b/app/scodoc/sco_cursus_dut.py
index b9e26e32..47e7a5fe 100644
--- a/app/scodoc/sco_cursus_dut.py
+++ b/app/scodoc/sco_cursus_dut.py
@@ -39,7 +39,6 @@ from app import log
from app.scodoc.scolog import logdb
from app.scodoc import sco_cache, sco_etud
from app.scodoc import sco_formsemestre
-from app.scodoc import sco_formations
from app.scodoc.codes_cursus import (
CMP,
ADC,
diff --git a/app/scodoc/sco_debouche.py b/app/scodoc/sco_debouche.py
index cc08e8d9..f027b553 100644
--- a/app/scodoc/sco_debouche.py
+++ b/app/scodoc/sco_debouche.py
@@ -134,10 +134,10 @@ def table_debouche_etudids(etudids, keep_numeric=True):
"nom": etud["nom"],
"prenom": etud["prenom"],
"_nom_target": url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid
),
"_prenom_target": url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid
),
"_nom_td_attrs": 'id="%s" class="etudinfo"' % (etud["etudid"]),
# 'debouche' : etud['debouche'],
diff --git a/app/scodoc/sco_etape_apogee_view.py b/app/scodoc/sco_etape_apogee_view.py
index 6247d986..da833d5c 100644
--- a/app/scodoc/sco_etape_apogee_view.py
+++ b/app/scodoc/sco_etape_apogee_view.py
@@ -542,7 +542,9 @@ def view_scodoc_etuds(semset_id, title="", nip_list="", fmt="html"):
etuds = [sco_etud.get_etud_info(code_nip=nip, filled=True)[0] for nip in nips]
for e in etuds:
- tgt = url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=e["etudid"])
+ tgt = url_for(
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=e["etudid"]
+ )
e["_nom_target"] = tgt
e["_prenom_target"] = tgt
e["_nom_td_attrs"] = f"""id="{e['etudid']}" class="etudinfo" """
@@ -770,7 +772,7 @@ def view_apo_csv(etape_apo="", semset_id="", fmt="html"):
e["in_scodoc_str"] = {True: "oui", False: "non"}[e["in_scodoc"]]
if e["in_scodoc"]:
e["_in_scodoc_str_target"] = url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, code_nip=e["nip"]
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=e["etudid"]
)
e.update(sco_etud.get_etud_info(code_nip=e["nip"], filled=True)[0])
e["_nom_td_attrs"] = 'id="%s" class="etudinfo"' % (e["etudid"],)
diff --git a/app/scodoc/sco_etape_bilan.py b/app/scodoc/sco_etape_bilan.py
index 575d2596..86da7166 100644
--- a/app/scodoc/sco_etape_bilan.py
+++ b/app/scodoc/sco_etape_bilan.py
@@ -692,7 +692,7 @@ class EtapeBilan:
@staticmethod
def link_etu(etudid, nom):
return '%s' % (
- url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid),
+ url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid),
nom,
)
diff --git a/app/scodoc/sco_etud.py b/app/scodoc/sco_etud.py
index e7041021..f6b8a18d 100644
--- a/app/scodoc/sco_etud.py
+++ b/app/scodoc/sco_etud.py
@@ -64,7 +64,7 @@ def format_etud_ident(etud: dict):
Note: par rapport à Identite.to_dict_bul(),
ajoute les champs:
- 'email_default', 'nom_disp', 'nom_usuel', 'civilite_etat_civil_str', 'ne', 'civilite_str'
+ 'nom_disp', 'nom_usuel', 'civilite_etat_civil_str', 'ne', 'civilite_str'
"""
etud["nom"] = format_nom(etud["nom"])
if "nom_usuel" in etud:
@@ -98,10 +98,6 @@ def format_etud_ident(etud: dict):
etud["ne"] = "e"
else: # 'X'
etud["ne"] = "(e)"
- # Mail à utiliser pour les envois vers l'étudiant:
- # choix qui pourrait être controé par une preference
- # ici priorité au mail institutionnel:
- etud["email_default"] = etud.get("email", "") or etud.get("emailperso", "")
def force_uppercase(s):
@@ -117,36 +113,6 @@ def _format_etat_civil(etud: dict) -> str:
return etud["nomprenom"]
-def format_lycee(nomlycee):
- nomlycee = nomlycee.strip()
- s = nomlycee.lower()
- if s[:5] == "lycee" or s[:5] == "lycée":
- return nomlycee[5:]
- else:
- return nomlycee
-
-
-def format_telephone(n):
- if n is None:
- return ""
- if len(n) < 7:
- return n
- else:
- n = n.replace(" ", "").replace(".", "")
- i = 0
- r = ""
- j = len(n) - 1
- while j >= 0:
- r = n[j] + r
- if i % 2 == 1 and j != 0:
- r = " " + r
- i += 1
- j -= 1
- if len(r) == 13 and r[0] != "0":
- r = "0" + r
- return r
-
-
def format_pays(s):
"laisse le pays seulement si != FRANCE"
if s.upper() != "FRANCE":
@@ -283,14 +249,14 @@ def _check_duplicate_code(cnx, args, code_name, disable_notify=False, edit=True)
listh.append(
f"""Autre étudiant: {e['nom']} {e['prenom']}"""
)
if etudid:
OK = "retour à la fiche étudiant"
- dest_endpoint = "scolar.ficheEtud"
+ dest_endpoint = "scolar.fiche_etud"
parameters = {"etudid": etudid}
else:
if "tf_submitted" in args:
@@ -619,7 +585,7 @@ def create_etud(cnx, args: dict = None):
etud_dict = etudident_list(cnx, {"etudid": etudid})[0]
fill_etuds_info([etud_dict])
etud_dict["url"] = url_for(
- "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid
+ "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid
)
ScolarNews.add(
typ=ScolarNews.NEWS_INSCR,
@@ -724,19 +690,28 @@ def get_etablissements():
def get_lycee_infos(codelycee):
- E = get_etablissements()
- return E.get(codelycee, None)
+ etablissements = get_etablissements()
+ return etablissements.get(codelycee, None)
-def format_lycee_from_code(codelycee):
+def format_lycee_from_code(codelycee: str) -> str:
"Description lycee à partir du code"
- E = get_etablissements()
- if codelycee in E:
- e = E[codelycee]
+ etablissements = get_etablissements()
+ if codelycee in etablissements:
+ e = etablissements[codelycee]
nomlycee = e["name"]
- return "%s (%s)" % (nomlycee, e["commune"])
+ return f"{nomlycee} ({e['commune']})"
+ return f"{codelycee} (établissement inconnu)"
+
+
+def format_lycee(nomlycee: str) -> str:
+ "mise en forme nom de lycée"
+ nomlycee = nomlycee.strip()
+ s = nomlycee.lower()
+ if s[:5] == "lycee" or s[:5] == "lycée":
+ return nomlycee[5:]
else:
- return "%s (établissement inconnu)" % codelycee
+ return nomlycee
def etud_add_lycee_infos(etud):
@@ -821,36 +796,6 @@ def fill_etuds_info(etuds: list[dict], add_admission=True):
# nettoyage champs souvent vides
etud["codepostallycee"] = etud.get("codepostallycee", "") or ""
etud["nomlycee"] = etud.get("nomlycee", "") or ""
- if etud.get("nomlycee"):
- etud["ilycee"] = "Lycée " + format_lycee(etud["nomlycee"])
- if etud["villelycee"]:
- etud["ilycee"] += " (%s)" % etud.get("villelycee", "")
- etud["ilycee"] += "
"
- else:
- if etud.get("codelycee"):
- etud["ilycee"] = format_lycee_from_code(etud["codelycee"])
- else:
- etud["ilycee"] = ""
- rap = ""
- if etud.get("rapporteur") or etud.get("commentaire"):
- rap = "Note du rapporteur"
- if etud.get("rapporteur"):
- rap += " (%s)" % etud["rapporteur"]
- rap += ": "
- if etud.get("commentaire"):
- rap += "%s" % etud["commentaire"]
- etud["rap"] = rap
-
- if etud.get("telephone"):
- etud["telephonestr"] = "Tél.: " + format_telephone(etud["telephone"])
- else:
- etud["telephonestr"] = ""
- if etud.get("telephonemobile"):
- etud["telephonemobilestr"] = "Mobile: " + format_telephone(
- etud["telephonemobile"]
- )
- else:
- etud["telephonemobilestr"] = ""
def etud_inscriptions_infos(etudid: int, ne="") -> dict:
diff --git a/app/scodoc/sco_evaluation_check_abs.py b/app/scodoc/sco_evaluation_check_abs.py
index bd6b8ded..eb35312d 100644
--- a/app/scodoc/sco_evaluation_check_abs.py
+++ b/app/scodoc/sco_evaluation_check_abs.py
@@ -156,7 +156,7 @@ def evaluation_check_absences_html(
H.append(
f"""
aucune session de formation !
") H.append( f"""')
if not check:
H.append(
- '%s: validation %s%sParcours: %s' - % ( - etud["nomprenom"], - Se.parcours.SESSION_NAME_A, - Se.parcours.SESSION_NAME, - Se.get_cursus_descr(), - ) + f"""{etud.nomprenom}: validation { + Se.parcours.SESSION_NAME_A}{Se.parcours.SESSION_NAME + }Parcours: {Se.get_cursus_descr()} + """ ) else: H.append( - 'Parcours de %s%s' - % (etud["nomprenom"], Se.get_cursus_descr()) + f"""Parcours de {etud.nomprenom}{Se.get_cursus_descr()}""" ) H.append( - ' | %s |
" + grlink + " | " + menu + " |
Étudiant{etud.e} non inscrit{etud.e}"""] + if current_user.has_permission(Permission.EtudInscrit): l.append( f"""%s
Adresse : | +%(domicile)s %(codepostaldomicile)s %(villedomicile)s %(paysdomicile)s + %(modifadresse)s + %(telephones)s + | +
Situation : | %(situation)s %(bourse_span)s |
%(nomprenom)s (%(inscription)s)%(etat_civil)s -%(emaillink)s +%(email_link)s | %(etudfoto)s |
Situation : | %(situation)s %(bourse_span)s |
Né%(ne)s le : | %(info_naissance)s |
Adresse : | %(domicile)s %(codepostaldomicile)s %(villedomicile)s %(paysdomicile)s -%(modifadresse)s -%(telephones)s - |
Confirmer la suppression de la photo de {etud.nom_disp()} ?
", dest_url="", cancel_url=url_for( - "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etud.id + "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id ), parameters={"etudid": etud.id}, ) @@ -1100,7 +1100,7 @@ def form_suppress_photo(etudid=None, dialog_confirmed=False): sco_photos.suppress_photo(etud) return flask.redirect( - url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etud.id) + url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id) ) @@ -1229,7 +1229,7 @@ def _do_dem_or_def_etud( ) if redirect: return flask.redirect( - url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) + url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid) ) @@ -1301,7 +1301,7 @@ def _do_cancel_dem_or_def( f"Confirmer l'annulation de la {operation_name} ?
", dest_url="", cancel_url=url_for( - "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid + "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid ), parameters={"etudid": etudid, "formsemestre_id": formsemestre_id}, ) @@ -1325,7 +1325,7 @@ def _do_cancel_dem_or_def( flash(f"{operation_name} annulée.") return flask.redirect( - url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) + url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid) ) @@ -1784,7 +1784,7 @@ def _etudident_create_or_edit_form(edit): sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) # return flask.redirect( - url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) + url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid) ) @@ -1802,7 +1802,7 @@ def etud_copy_in_other_dept(etudid: int): action = request.form.get("action") if action == "cancel": return flask.redirect( - url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etud.id) + url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id) ) try: formsemestre_id = int(request.form.get("formsemestre_id")) @@ -1833,7 +1833,7 @@ def etud_copy_in_other_dept(etudid: int): # Attention, ce redirect change de département ! return flask.redirect( url_for( - "scolar.ficheEtud", + "scolar.fiche_etud", scodoc_dept=formsemestre.departement.acronym, etudid=new_etud.id, ) @@ -1881,12 +1881,12 @@ def etudident_delete(etudid: int = -1, dialog_confirmed=False): d'un semestre ! (pour cela, passez par sa fiche, menu associé au semestre)Vérifier la fiche de {etud.nomprenom}
""", dest_url="", cancel_url=url_for( - "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid + "scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid ), OK="Supprimer définitivement cet étudiant", parameters={"etudid": etudid}, @@ -2018,7 +2018,7 @@ def check_group_apogee(group_id, etat=None, fix=False, fixmail=False): H.append( '