From d3fd164768625192717afba52cb27fb2adc33447 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 3 Sep 2022 09:29:40 +0200 Subject: [PATCH] Fix #361 --- app/scodoc/TrivialFormulator.py | 6 +++++- app/views/scolar.py | 37 +++++++++++++++------------------ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/app/scodoc/TrivialFormulator.py b/app/scodoc/TrivialFormulator.py index 20004c87..9dcd9eda 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 3d29481a..d6f64680 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( """

Création d'un étudiant

-

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 !

""" ) @@ -1336,17 +1344,6 @@ def _etudident_create_or_edit_form(edit): initvalues = initvalues[0] submitlabel = "Modifier les données" - # recuperation infos Apogee - # Si on a le code NIP, fait juste une requete, sinon tente de rechercher par nom - # (la recherche par nom ne fonctionne plus à Paris 13) - # XXX A terminer - # code_nip = initvalues.get("code_nip", "") - # if code_nip: - # try: - # infos = sco_portal_apogee.get_etud_apogee(code_nip) - # except ValueError: - # infos = None - # pass # XXX a terminer vals = scu.get_request_args() nom = vals.get("nom", None) if nom is None: @@ -1363,16 +1360,14 @@ def _etudident_create_or_edit_form(edit): formatted_infos = [ """
    """ ] 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", }, ),