1 function patron_autocomplete(node, options) {
4 let on_select_callback;
6 if ( options['link-to'] ) {
7 link_to = options['link-to'];
9 if ( options['url-params'] ) {
10 url_params = options['url-params'];
12 if ( options['on-select-callback'] ) {
13 on_select_callback = options['on-select-callback'];
16 return node.autocomplete({
17 source: function( request, response ) {
18 let subquery_and = [];
19 request.term.split(/[\s,]+/)
20 .filter(function(s){ return s.length })
21 .forEach(function(pattern,i){
23 defaultPatronSearchFields.split(',').forEach(function(field,i){
25 {["me."+field]: {'like': pattern + '%'}}
28 subquery_and.push(subquery_or);
30 let q = {"-and": subquery_and};
34 'q': JSON.stringify(q),
35 '_order_by': '+me.surname,+me.firstname',
40 url: '/api/v1/patrons',
42 "x-koha-embed": "library"
44 success: function(data) {
45 return response(data);
48 if ( e.state() != 'rejected' ) {
49 alert( __("An error occurred. Check the logs") );
56 select: function( event, ui ) {
58 window.location.href = ui.item.link;
59 } else if ( on_select_callback ) {
60 return on_select_callback(event, ui);
63 focus: function( event, ui ) {
64 event.preventDefault(); // Don't replace the text field
67 .data( "ui-autocomplete" )
68 ._renderItem = function( ul, item ) {
70 item.link = link_to == 'circ'
71 ? "/cgi-bin/koha/circ/circulation.pl"
72 : link_to == 'reserve'
73 ? "/cgi-bin/koha/reserve/request.pl"
74 : "/cgi-bin/koha/members/moremember.pl";
75 item.link += ( url_params ? '?' + url_params + '&' : "?" ) + 'borrowernumber=' + item.patron_id;
81 if( item.cardnumber != "" ){
82 // Display card number in parentheses if it exists
83 cardnumber = " (" + item.cardnumber + ") ";
85 if( item.library_id == loggedInLibrary ){
86 loggedInClass = "ac-currentlibrary";
90 return $( "<li></li>" )
91 .addClass( loggedInClass )
92 .data( "ui-autocomplete-item", item )
95 + ( item.link ? "<a href=\"" + item.link + "\">" : "<a>" )
96 + ( item.surname ? item.surname.escapeHtml() : "" ) + ", "
97 + ( item.firstname ? item.firstname.escapeHtml() : "" )
98 + cardnumber.escapeHtml()
100 + ( item.date_of_birth
101 ? $date(item.date_of_birth)
102 + "<span class=\"age_years\"> ("
103 + $get_age(item.date_of_birth)
109 + $format_address(item, { no_line_break: true, include_li: false }) + " "
110 + ( !singleBranchMode
112 "<span class=\"ac-library\">"
113 + item.library.name.escapeHtml()