From fcc28839c043ac7cb3516e4c72469f19d71951db Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 22 Aug 2021 14:23:58 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20choix=20=C3=A9tudiant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_find_etud.py | 77 +++++++++++++-------- app/scodoc/sco_formsemestre_inscriptions.py | 3 +- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/app/scodoc/sco_find_etud.py b/app/scodoc/sco_find_etud.py index 63bb158c..027276d9 100644 --- a/app/scodoc/sco_find_etud.py +++ b/app/scodoc/sco_find_etud.py @@ -75,13 +75,13 @@ def form_search_etud( % (",".join(parameters.keys())) ) elif parameters_keys: + if request.method == "POST": + vals = request.form + elif request.method == "GET": + vals = request.args + else: + vals = {} for key in parameters_keys.split(","): - if request.method == "POST": - vals = request.form - elif request.method == "GET": - vals = request.args - else: - vals = {} v = vals.get(key, False) if v: H.append('' % (key, v)) @@ -100,17 +100,18 @@ def form_search_etud( return "\n".join(H) -def search_etud_in_dept(expnom="", REQUEST=None): +def search_etud_in_dept(expnom=""): """Page recherche d'un etudiant. Affiche la fiche de l'étudiant, ou, si la recherche donne plusieurs résultats, la liste des étudiants correspondants. - Appelée par boite de recherche barre latérale gauche. + Appelée par: + - boite de recherche barre latérale gauche. + - choix d'un étudiant à inscrire (en POST avec dest_url et parameters_keys) Args: expnom: string, regexp sur le nom ou un code_nip ou un etudid """ - breakpoint() if isinstance(expnom, int) or len(expnom) > 1: try: etudid = int(expnom) @@ -126,13 +127,26 @@ def search_etud_in_dept(expnom="", REQUEST=None): else: etuds = [] # si expnom est trop court, n'affiche rien + if request.method == "POST": + vals = request.form + elif request.method == "GET": + vals = request.args + else: + vals = {} + + url_args = {"scodoc_dept": g.scodoc_dept} + if "dest_url" in request.form: + endpoint = request.form["dest_url"] + else: + endpoint = "scolar.ficheEtud" + if "parameters_keys" in request.form: + for key in vals["parameters_keys"].split(","): + url_args[key] = vals[key] + if len(etuds) == 1: # va directement a la fiche - return flask.redirect( - url_for( - "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etuds[0]["etudid"] - ) - ) + url_args["etudid"] = etuds[0]["etudid"] + return flask.redirect(url_for(endpoint, **url_args)) H = [ html_sco_header.sco_header( @@ -140,22 +154,27 @@ def search_etud_in_dept(expnom="", REQUEST=None): no_side_bar=True, init_qtip=True, javascripts=["js/etud_info.js"], - ), - """

%d résultats pour "%s": choisissez un étudiant:

""" - % (len(etuds), expnom), - form_search_etud( - dest_url=url_for( - "scolar.ficheEtud", scodoc_dept=g.scodoc_dept - ), # sans l'etudid, post du form - title="Autre recherche", - ), + ) ] + if len(etuds) == 0 and len(etuds) <= 1: + H.append("""

chercher un étudiant:

""") + else: + H.append( + f"""

{len(etuds)} résultats pour "{expnom}": choisissez un étudiant:

""" + ) + H.append( + form_search_etud( + dest_url=endpoint, + parameters=vals.get("parameters"), + parameters_keys=vals.get("parameters_keys"), + title="Autre recherche", + ) + ) if len(etuds) > 0: # Choix dans la liste des résultats: for e in etuds: - target = url_for( - "scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=e["etudid"] - ) + url_args["etudid"] = e["etudid"] + target = url_for(endpoint, **url_args) e["_nomprenom_target"] = target e["inscription_target"] = target e["_nomprenom_td_attrs"] = 'id="%s" class="etudinfo"' % (e["etudid"]) @@ -178,14 +197,16 @@ def search_etud_in_dept(expnom="", REQUEST=None): if len(etuds) > 20: # si la page est grande H.append( form_search_etud( - dest_url=url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept), + dest_url=endpoint, + parameters=vals.get("parameters"), + parameters_keys=vals.get("parameters_keys"), title="Autre recherche", ) ) else: H.append('

Aucun résultat pour "%s".

' % expnom) H.append( - """

La recherche porte sur tout ou partie du NOM ou du NIP de l'étudiant

""" + """

La recherche porte sur tout ou partie du NOM ou du NIP de l'étudiant. Saisir au moins deux caractères.

""" ) return "\n".join(H) + html_sco_header.sco_footer() diff --git a/app/scodoc/sco_formsemestre_inscriptions.py b/app/scodoc/sco_formsemestre_inscriptions.py index 75b3ef31..dfeead3e 100644 --- a/app/scodoc/sco_formsemestre_inscriptions.py +++ b/app/scodoc/sco_formsemestre_inscriptions.py @@ -255,8 +255,9 @@ def formsemestre_inscription_with_modules_etud( return sco_find_etud.form_search_etud( title="Choix de l'étudiant à inscrire dans ce semestre", add_headers=True, - dest_url="formsemestre_inscription_with_modules_etud", + dest_url="notes.formsemestre_inscription_with_modules_etud", parameters={"formsemestre_id": formsemestre_id}, + parameters_keys="formsemestre_id", ) return formsemestre_inscription_with_modules(