From 8dc5fc805d8073c3eaf5d0ecc68c39a6155cb537 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 13 Jun 2022 20:58:44 +0200 Subject: [PATCH] Bug 30578: Fix multi-terms search Signed-off-by: Owen Leonard --- .../prog/js/patron-autocomplete.js | 58 +++++++++++-------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/js/patron-autocomplete.js b/koha-tmpl/intranet-tmpl/prog/js/patron-autocomplete.js index 154b96aa70..6057cb8473 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/patron-autocomplete.js +++ b/koha-tmpl/intranet-tmpl/prog/js/patron-autocomplete.js @@ -13,33 +13,43 @@ function patron_autocomplete(node, options) { on_select_callback = options['on-select-callback']; } } + const search_fields = ['me.surname', 'me.firstname', 'me.cardnumber']; return node.autocomplete({ source: function( request, response ) { - let params = { - '_page': 1, - '_per_page': 10, - 'q': JSON.stringify([ - {"me.firstname": {"like": "%"+request.term+"%"}}, - {"me.surname": {"like": "%"+request.term+"%"}}, - {"me.cardnumber": {"like": request.term+"%"}} - ]), - '_order_by': '+me.surname,+me.firstname', - }; - $.ajax({ - data: params, - type: 'GET', - url: '/api/v1/patrons', - headers: { - "x-koha-embed": "library" - }, - success: function(data) { - return response(data); - }, - error: function() { - alert( _("An error occurred. Check the logs") ); - return response(); - } + let subquery_and = []; + request.term.split(' ') + .filter(function(s){ return s.length }) + .forEach(function(pattern,i){ + subquery_and.push( + [ + {'me.surname': {'like': '%' + pattern + '%'}}, + {'me.firstname': {'like': '%' + pattern + '%'}}, + {'me.cardnumber': {'like': pattern + '%'}}, + ] + ); }); + let q = {"-and": subquery_and}; + let params = { + '_page': 1, + '_per_page': 10, + 'q': JSON.stringify(q), + '_order_by': '+me.surname,+me.firstname', + }; + $.ajax({ + data: params, + type: 'GET', + url: '/api/v1/patrons', + headers: { + "x-koha-embed": "library" + }, + success: function(data) { + return response(data); + }, + error: function() { + alert( _("An error occurred. Check the logs") ); + return response(); + } + }); }, minLength: 3, select: function( event, ui ) { -- 2.30.2