Jonathan Druart
88becf3dce
Signed-off-by: Owen Leonard <oleonard@myacpl.org> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
119 lines
4.4 KiB
JavaScript
119 lines
4.4 KiB
JavaScript
function patron_autocomplete(node, options) {
|
|
let link_to;
|
|
let url_params;
|
|
let on_select_callback;
|
|
if ( options ) {
|
|
if ( options['link-to'] ) {
|
|
link_to = options['link-to'];
|
|
}
|
|
if ( options['url-params'] ) {
|
|
url_params = options['url-params'];
|
|
}
|
|
if ( options['on-select-callback'] ) {
|
|
on_select_callback = options['on-select-callback'];
|
|
}
|
|
}
|
|
const search_fields = ['me.surname', 'me.firstname', 'me.cardnumber'];
|
|
return node.autocomplete({
|
|
source: function( request, 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 ) {
|
|
if ( ui.item.link ) {
|
|
window.location.href = ui.item.link;
|
|
} else if ( on_select_callback ) {
|
|
return on_select_callback(event, ui);
|
|
}
|
|
},
|
|
})
|
|
.data( "ui-autocomplete" )
|
|
._renderItem = function( ul, item ) {
|
|
if ( link_to ) {
|
|
item.link = link_to == 'circ'
|
|
? "/cgi-bin/koha/circ/circulation.pl"
|
|
: link_to == 'reserve'
|
|
? "/cgi-bin/koha/reserve/request.pl"
|
|
: "/cgi-bin/koha/members/moremember.pl";
|
|
item.link += ( url_params ? '?' + url_params + '&' : "?" ) + 'borrowernumber=' + item.patron_id;
|
|
} else {
|
|
item.link = null;
|
|
}
|
|
|
|
var cardnumber = "";
|
|
if( item.cardnumber != "" ){
|
|
// Display card number in parentheses if it exists
|
|
cardnumber = " (" + item.cardnumber + ") ";
|
|
}
|
|
if( item.library_id == loggedInLibrary ){
|
|
loggedInClass = "ac-currentlibrary";
|
|
} else {
|
|
loggedInClass = "";
|
|
}
|
|
return $( "<li></li>" )
|
|
.addClass( loggedInClass )
|
|
.data( "ui-autocomplete-item", item )
|
|
.append(
|
|
""
|
|
+ ( item.link ? "<a href=\"" + item.link + "\">" : "<a>" )
|
|
+ ( item.surname ? item.surname.escapeHtml() : "" ) + ", "
|
|
+ ( item.firstname ? item.firstname.escapeHtml() : "" )
|
|
+ cardnumber.escapeHtml()
|
|
+ " <small>"
|
|
+ ( item.date_of_birth
|
|
? $date(item.date_of_birth)
|
|
+ "<span class=\"age_years\"> ("
|
|
+ $get_age(item.date_of_birth)
|
|
+ " "
|
|
+ __("years")
|
|
+ ")</span>,"
|
|
: ""
|
|
) + " "
|
|
+ ( item.address ? item.address.escapeHtml() : "" ) + " "
|
|
+ ( item.city ? item.city.escapeHtml() : "" ) + " "
|
|
+ ( item.zipcode ? item.zipcode.escapeHtml() : "" ) + " "
|
|
+ ( item.country ? item.country.escapeHtml() : "" ) + " "
|
|
+ ( !singleBranchMode
|
|
?
|
|
"<span class=\"ac-library\">"
|
|
+ item.library.name.escapeHtml()
|
|
+ "</span>"
|
|
: "" )
|
|
+ "</small>"
|
|
+ "</a>" )
|
|
.appendTo( ul );
|
|
};
|
|
}
|