From 5ffeae3e1fab446e71a87a4650e0eeb2d5bc4c5a Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 16 Feb 2021 22:07:56 +0100 Subject: [PATCH] Fix: autocomplete recherche etudiant --- sco_find_etud.py | 12 ++++--- static/js/scodoc.js | 87 +++++++++++++++++++++++---------------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/sco_find_etud.py b/sco_find_etud.py index 52b5800b..27ccf837 100644 --- a/sco_find_etud.py +++ b/sco_find_etud.py @@ -108,7 +108,7 @@ def search_etud_in_dept( REQUEST=None, ): """Page recherche d'un etudiant - expnom est un regexp sur le nom ou un code_nip + expnom est un regexp sur le nom ou un code_nip ou un etudid dest_url est la page sur laquelle on sera redirigé après choix parameters spécifie des arguments additionnels à passer à l'URL (en plus de etudid) """ @@ -134,8 +134,10 @@ def search_etud_in_dept( etuds = search_etuds_infos(context, code_nip=expnom, REQUEST=REQUEST) elif expnom: etuds = search_etuds_infos(context, expnom=expnom, REQUEST=REQUEST) - else: - etuds = [] + if expnom and not etuds: + etuds = context.getEtudInfo(filled=1, etudid=expnom, REQUEST=REQUEST) + if len(etuds) != 1: + etuds = [] if len(etuds) == 1: # va directement a la destination return REQUEST.RESPONSE.redirect( @@ -268,14 +270,14 @@ def search_etud_by_name(context, term, REQUEST=None): else: r = ndb.SimpleDictFetch( context, - "SELECT nom, prenom FROM identite WHERE nom LIKE %(beginning)s ORDER BY nom", + "SELECT etudid, nom, prenom FROM identite WHERE nom LIKE %(beginning)s ORDER BY nom", {"beginning": term + "%"}, ) data = [ { "label": "%s %s" % (x["nom"], scolars.format_prenom(x["prenom"])), - "value": x["nom"], + "value": x["etudid"], } for x in r ] diff --git a/static/js/scodoc.js b/static/js/scodoc.js index 7ae653ee..c4def3d6 100644 --- a/static/js/scodoc.js +++ b/static/js/scodoc.js @@ -1,7 +1,7 @@ // JS for all ScoDoc pages (using jQuery UI) -$(function() { +$(function () { // Autocomplete recherche etudiants par nom $("#in-expnom").autocomplete( { @@ -9,49 +9,50 @@ $(function() { minLength: 2, // min nb of chars before suggest position: { collision: 'flip' }, // automatic menu position up/down source: "search_etud_by_name", - select: function(event, ui) { - $("#form-chercheetud").submit(); + select: function (event, ui) { + $("#in-expnom").val(ui.item.value); + $("#form-chercheetud").submit(); } - }); - + }); + // Date picker $(".datepicker").datepicker({ - showOn: 'button', - buttonImage: '/ScoDoc/static/icons/calendar_img.png', + showOn: 'button', + buttonImage: '/ScoDoc/static/icons/calendar_img.png', buttonImageOnly: true, - dateFormat: 'dd/mm/yy', - duration : 'fast', + dateFormat: 'dd/mm/yy', + duration: 'fast', }); - $('.datepicker').datepicker('option', $.extend({showMonthAfterYear: false}, - $.datepicker.regional['fr'])); + $('.datepicker').datepicker('option', $.extend({ showMonthAfterYear: false }, + $.datepicker.regional['fr'])); /* Barre menu */ - var sco_menu_position = {my: "left top", at: "left bottom"}; + var sco_menu_position = { my: "left top", at: "left bottom" }; $("#sco_menu").menu({ position: sco_menu_position, - blur: function() { + blur: function () { $(this).menu("option", "position", sco_menu_position); }, - focus: function(e, ui) { + focus: function (e, ui) { if ($("#sco_menu").get(0) !== $(ui).get(0).item.parent().get(0)) { - $(this).menu("option", "position", {my: "left top", at: "right top"}); + $(this).menu("option", "position", { my: "left top", at: "right top" }); } } - }).mouseleave(function(x, y) { - $( "#sco_menu" ).menu('collapseAll'); - }); + }).mouseleave(function (x, y) { + $("#sco_menu").menu('collapseAll'); + }); $("#sco_menu > li > a > span").switchClass("ui-icon-carat-1-e", "ui-icon-carat-1-s"); /* Les menus isoles dropdown */ $(".sco_dropdown_menu").menu({ position: sco_menu_position - }).mouseleave(function(x, y) { - $( ".sco_dropdown_menu" ).menu('collapseAll'); + }).mouseleave(function (x, y) { + $(".sco_dropdown_menu").menu('collapseAll'); } - ); + ); $(".sco_dropdown_menu > li > a > span").switchClass("ui-icon-carat-1-e", "ui-icon-carat-1-s"); - + }); @@ -65,14 +66,14 @@ function sco_message(msg, color) { $('#sco_msg').css('color', color); } setTimeout( - function() { + function () { $('#sco_msg').fadeOut( 'slow', - function() { + function () { $('#sco_msg').html(''); } - ); - }, + ); + }, 2000 // <-- duree affichage en milliseconds ); } @@ -81,30 +82,30 @@ function sco_message(msg, color) { function get_query_args() { var s = window.location.search; // eg "?x=1&y=2" var vars = {}; - s.replace( - /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp - function( m, key, value ) { // callback - vars[key] = value !== undefined ? value : ''; - } + s.replace( + /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp + function (m, key, value) { // callback + vars[key] = value !== undefined ? value : ''; + } ); return vars; } // Tables (gen_tables) -$(function() { - $('table.gt_table').DataTable( { - "paging" : false, - "searching" : false, - "info" : false, +$(function () { + $('table.gt_table').DataTable({ + "paging": false, + "searching": false, + "info": false, /* "autoWidth" : false, */ - "fixedHeader" : { + "fixedHeader": { "header": true, "footer": true }, "orderCellsTop": true, // cellules ligne 1 pour tri - "aaSorting": [ ], // Prevent initial sorting - } ); + "aaSorting": [], // Prevent initial sorting + }); }); @@ -112,9 +113,9 @@ $(function() { function readOnlyTags(nodes) { // nodes are textareas, hide them and create a span showing tags for (var i = 0; i < nodes.length; i++) { - var node = $(nodes[i]); - node.hide(); - var tags = nodes[i].value.split(','); - node.after('' + tags.join('') + ''); + var node = $(nodes[i]); + node.hide(); + var tags = nodes[i].value.split(','); + node.after('' + tags.join('') + ''); } }