Bug 30578: Restore highlighting of patrons from the logged-in library
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / patron-autocomplete.js
1 function patron_autocomplete(node, options) {
2     let link_to;
3     let url_params;
4     let on_select_callback;
5     if ( options ) {
6         if ( options['link-to'] ) {
7             link_to = options['link-to'];
8         }
9         if ( options['url-params'] ) {
10             url_params = options['url-params'];
11         }
12         if ( options['on-select-callback'] ) {
13             on_select_callback = options['on-select-callback'];
14         }
15     }
16     return node.autocomplete({
17         source: function( request, response ) {
18                 let params = {
19                     '_page': 1,
20                     '_per_page': 10,
21                     'q': JSON.stringify([
22                         {"me.firstname": {"like": "%"+request.term+"%"}},
23                         {"me.surname": {"like": "%"+request.term+"%"}},
24                         {"me.cardnumber": {"like": request.term+"%"}}
25                     ]),
26                     '_order_by': '+me.surname,+me.firstname',
27                 };
28                 $.ajax({
29                     data: params,
30                     type: 'GET',
31                     url: '/api/v1/patrons',
32                     headers: {
33                         "x-koha-embed": "library"
34                     },
35                     success: function(data) {
36                         return response(data);
37                     },
38                     error: function() {
39                         alert( _("An error occurred. Check the logs") );
40                         return response();
41                     }
42                 });
43         },
44         minLength: 3,
45         select: function( event, ui ) {
46             if ( ui.item.link ) {
47                 window.location.href = ui.item.link;
48             } else if ( on_select_callback ) {
49                 return on_select_callback(event, ui);
50             }
51         },
52     })
53     .data( "ui-autocomplete" )
54     ._renderItem = function( ul, item ) {
55         if ( link_to ) {
56             item.link = link_to == 'circ'
57                 ? "/cgi-bin/koha/circ/circulation.pl"
58                 : link_to == 'reserve'
59                     ? "/cgi-bin/koha/reserve/request.pl"
60                     : "/cgi-bin/koha/members/moremember.pl";
61             item.link += ( url_params ? '?' + url_params + '&' : "?" ) + 'borrowernumber=' + item.patron_id;
62         } else {
63             item.link = null;
64         }
65
66         var cardnumber = "";
67         if( item.cardnumber != "" ){
68             // Display card number in parentheses if it exists
69             cardnumber = " (" + item.cardnumber + ") ";
70         }
71         if( item.library_id == loggedInLibrary ){
72             loggedInClass = "ac-currentlibrary";
73         } else {
74             loggedInClass = "";
75         }
76         return $( "<li></li>" )
77         .addClass( loggedInClass )
78         .data( "ui-autocomplete-item", item )
79         .append(
80             ""
81             + ( item.link ? "<a href=\"" + item.link + "\">" : "<a>" )
82                 + ( item.surname ? item.surname.escapeHtml() : "" ) + ", "
83                 + ( item.firstname ? item.firstname.escapeHtml() : "" )
84                 + cardnumber.escapeHtml()
85                 + " <small>"
86                     + ( item.date_of_birth
87                         ?   $date(item.date_of_birth)
88                           + "<span class=\"age_years\"> ("
89                           + $get_age(item.date_of_birth)
90                           + " "
91                           + __("years")
92                           + ")</span>,"
93                         : ""
94                     ) + " "
95                     + ( item.address     ? item.address.escapeHtml() : "" )     + " "
96                     + ( item.city        ? item.city.escapeHtml() : "" )        + " "
97                     + ( item.zipcode     ? item.zipcode.escapeHtml() : "" )     + " "
98                     + ( item.country     ? item.country.escapeHtml() : "" ) + " "
99                     + ( !singleBranchMode
100                         ?
101                               "<span class=\"ac-library\">"
102                             + item.library.name.escapeHtml()
103                             + "</span>"
104                         : "" )
105                 + "</small>"
106             + "</a>" )
107         .appendTo( ul );
108     };
109 }