diff --git a/app/scodoc/TrivialFormulator.py b/app/scodoc/TrivialFormulator.py index 20004c87a..9dcd9edac 100644 --- a/app/scodoc/TrivialFormulator.py +++ b/app/scodoc/TrivialFormulator.py @@ -336,7 +336,11 @@ class TF(object): msg.append("valeur invalide (%s) pour le champ '%s'" % (val, field)) ok = 0 if "validator" in descr: - if not descr["validator"](val, field): + try: + valid = descr["validator"](val, field) + except Exception: + valid = False + if not valid: msg.append("valeur invalide (%s) pour le champ '%s'" % (val, field)) ok = 0 elif descr.get("input_type") == "datedmy": diff --git a/app/views/scolar.py b/app/views/scolar.py index 3d29481a4..d6f646804 100644 --- a/app/views/scolar.py +++ b/app/views/scolar.py @@ -30,6 +30,7 @@ issu de ScoDoc7 / ZScolar.py Emmanuel Viennet, 2021 """ +import datetime import requests import time @@ -69,7 +70,8 @@ from app.scodoc.sco_exceptions import ( ScoException, ScoValueError, ) -from app.scodoc.TrivialFormulator import TrivialFormulator, tf_error_message + +from app.scodoc.TrivialFormulator import DMY_REGEXP, TrivialFormulator, tf_error_message from app.scodoc.gen_tables import GenTable from app.scodoc import html_sco_header from app.scodoc import sco_import_etuds @@ -1314,10 +1316,16 @@ def _etudident_create_or_edit_form(edit): submitlabel = "Ajouter cet étudiant" H.append( """
En général, il est recommandé d'importer les étudiants depuis Apogée. - N'utilisez ce formulaire que pour les cas particuliers ou si votre établissement - n'utilise pas d'autre logiciel de gestion des inscriptions.
-L'étudiant créé ne sera pas inscrit.
+ En général, il est recommandé d'importer les
+ étudiants depuis Apogée ou via un fichier Excel (menu Inscriptions
+ dans le semestre).
+
+ N'utilisez ce formulaire au cas par cas que pour les cas particuliers
+ ou si votre établissement n'utilise pas d'autre logiciel de gestion des
+ inscriptions.
+ L'étudiant créé ne sera pas inscrit.
Pensez à l'inscrire dans un semestre !"""
]
nanswers = len(infos)
- nmax = 10 # nb max de reponse montrees
+ nmax = 10 # nb max de reponse montrées
infos = infos[:nmax]
for i in infos:
formatted_infos.append("
")
@@ -1431,6 +1426,8 @@ def _etudident_create_or_edit_form(edit):
"title": "Date de naissance",
"input_type": "date",
"explanation": "j/m/a",
+ "validator": lambda val, _: DMY_REGEXP.match(val)
+ and (ndb.DateDMYtoISO(val) < datetime.date.today().isoformat()),
},
),
("lieu_naissance", {"title": "Lieu de naissance", "size": 32}),
@@ -1472,7 +1469,7 @@ def _etudident_create_or_edit_form(edit):
"title": "Année bac",
"type": "int",
"min_value": 1945,
- "max_value": 2100,
+ "max_value": datetime.date.today().year + 1,
"explanation": "année obtention du bac",
},
),