Bug 27779: (QA follow-up) Better translatability
[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     const search_fields = ['me.surname', 'me.firstname', 'me.cardnumber'];
17     return node.autocomplete({
18         source: function( request, response ) {
19             let subquery_and = [];
20             request.term.split(' ')
21                 .filter(function(s){ return s.length })
22                 .forEach(function(pattern,i){
23                     subquery_and.push(
24                         [
25                             {'me.surname':    {'like': '%' + pattern + '%'}},
26                             {'me.firstname':  {'like': '%' + pattern + '%'}},
27                             {'me.cardnumber': {'like': pattern + '%'}},
28                         ]
29                     );
30                 });
31             let q = {"-and": subquery_and};
32             let params = {
33                 '_page': 1,
34                 '_per_page': 10,
35                 'q': JSON.stringify(q),
36                 '_order_by': '+me.surname,+me.firstname',
37             };
38             $.ajax({
39                 data: params,
40                 type: 'GET',
41                 url: '/api/v1/patrons',
42                 headers: {
43                     "x-koha-embed": "library"
44                 },
45                 success: function(data) {
46                     return response(data);
47                 },
48                 error: function() {
49                     alert( _("An error occurred. Check the logs") );
50                     return response();
51                 }
52             });
53         },
54         minLength: 3,
55         select: function( event, ui ) {
56             if ( ui.item.link ) {
57                 window.location.href = ui.item.link;
58             } else if ( on_select_callback ) {
59                 return on_select_callback(event, ui);
60             }
61         },
62     })
63     .data( "ui-autocomplete" )
64     ._renderItem = function( ul, item ) {
65         if ( link_to ) {
66             item.link = link_to == 'circ'
67                 ? "/cgi-bin/koha/circ/circulation.pl"
68                 : link_to == 'reserve'
69                     ? "/cgi-bin/koha/reserve/request.pl"
70                     : "/cgi-bin/koha/members/moremember.pl";
71             item.link += ( url_params ? '?' + url_params + '&' : "?" ) + 'borrowernumber=' + item.patron_id;
72         } else {
73             item.link = null;
74         }
75
76         var cardnumber = "";
77         if( item.cardnumber != "" ){
78             // Display card number in parentheses if it exists
79             cardnumber = " (" + item.cardnumber + ") ";
80         }
81         if( item.library_id == loggedInLibrary ){
82             loggedInClass = "ac-currentlibrary";
83         } else {
84             loggedInClass = "";
85         }
86         return $( "<li></li>" )
87         .addClass( loggedInClass )
88         .data( "ui-autocomplete-item", item )
89         .append(
90             ""
91             + ( item.link ? "<a href=\"" + item.link + "\">" : "<a>" )
92                 + ( item.surname ? item.surname.escapeHtml() : "" ) + ", "
93                 + ( item.firstname ? item.firstname.escapeHtml() : "" )
94                 + cardnumber.escapeHtml()
95                 + " <small>"
96                     + ( item.date_of_birth
97                         ?   $date(item.date_of_birth)
98                           + "<span class=\"age_years\"> ("
99                           + $get_age(item.date_of_birth)
100                           + " "
101                           + __("years")
102                           + ")</span>,"
103                         : ""
104                     ) + " "
105                     + ( item.address     ? item.address.escapeHtml() : "" )     + " "
106                     + ( item.city        ? item.city.escapeHtml() : "" )        + " "
107                     + ( item.zipcode     ? item.zipcode.escapeHtml() : "" )     + " "
108                     + ( item.country     ? item.country.escapeHtml() : "" ) + " "
109                     + ( !singleBranchMode
110                         ?
111                               "<span class=\"ac-library\">"
112                             + item.library.name.escapeHtml()
113                             + "</span>"
114                         : "" )
115                 + "</small>"
116             + "</a>" )
117         .appendTo( ul );
118     };
119 }