3 [% INCLUDE 'doc-head-open.inc' %]
4 <title>Koha › Patron search</title>
5 [% INCLUDE 'doc-head-close.inc' %]
6 <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
7 [% INCLUDE 'datatables.inc' %]
9 <script type="text/javascript">
13 $(document).ready(function(){
17 [% IF view != "show_results" %]
18 $("#searchresults").hide();
22 // Apply DataTables on the results table
23 dtMemberResults = $("#memberresultst").dataTable($.extend(true, {}, dataTablesDefaults, {
25 'sAjaxSource': "/cgi-bin/koha/svc/members/search",
26 'fnServerData': function(sSource, aoData, fnCallback) {
31 'name': 'searchmember',
32 'value': $("#searchmember_filter").val()
34 'name': 'firstletter',
35 'value': $("#firstletter_filter").val()
37 'name': 'categorycode',
38 'value': $("#categorycode_filter").val()
41 'value': $("#branchcode_filter").val()
43 'name': 'name_sorton',
44 'value': 'borrowers.surname borrowers.firstname'
46 'name': 'category_sorton',
47 'value': 'categories.description',
49 'name': 'branch_sorton',
50 'value': 'branches.branchname'
52 'name': 'template_path',
53 'value': '[% json_template %]',
55 'name': 'selection_type',
56 'value': '[% selection_type %]',
58 [% IF patrons_with_acq_perm_only %]
60 'name': 'has_permission',
61 'value': 'acquisition.order_manage',
70 'success': function(json){
76 [% FOR column IN columns %]
77 [% IF column == 'action' %]
78 { 'mDataProp': 'dt_action', 'bSortable': false, 'sClass': 'actions' }
79 [% ELSIF column == 'address' %]
80 { 'mDataProp': 'dt_address', 'bSortable': false }
82 { 'mDataProp': 'dt_[% column %]' }
84 [% UNLESS loop.last %],[% END %]
88 [% IF patrons_with_acq_perm_only %]
91 'sPaginationType': 'full_numbers',
92 "iDisplayLength": [% Koha.Preference('PatronsPerPage') %],
94 'aaSorting': [[[% aaSorting || 0 %], 'asc']],
99 $("#searchform").on('submit', filter);
100 $(".filterByLetter").on("click",function(e){
102 filterByFirstLetterSurname($(this).text());
104 $("body").on("click",".add_user",function(e){
106 var borrowernumber = $(this).data("borrowernumber");
107 var firstname = $(this).data("firstname");
108 var surname = $(this).data("surname");
109 add_user( borrowernumber, firstname + " " + surname );
112 $("body").on("click",".select_user",function(e){
114 var borrowernumber = $(this).data("borrowernumber");
115 var borrower_data = $("#borrower_data"+borrowernumber).val();
116 select_user( borrowernumber, JSON.parse(borrower_data) );
123 $("#firstletter_filter").val('');
124 $("#searchresults").show();
125 dtMemberResults.fnDraw();
129 // User has clicked on a letter
130 function filterByFirstLetterSurname(letter) {
131 $("#firstletter_filter").val(letter);
133 $("#searchresults").show();
134 dtMemberResults.fnDraw();
138 // modify parent window owner element
139 [% IF selection_type == 'add' %]
140 function add_user(borrowernumber, borrowername) {
141 var p = window.opener;
142 // In one place (serials/routing.tt), the page is reload on every add
143 // We have to wait for the page to be there
144 function wait_for_opener () {
145 if ( ! $(opener.document).find('body').size() ) {
146 setTimeout(wait_for_opener, 500);
148 [%# Note that add_user could sent data instead of borrowername too %]
151 if ( p.add_user(borrowernumber, borrowername) < 0 ) {
152 $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
155 $("#info").html(_("Patron '%s' added.").format(borrowername));
162 [% ELSIF selection_type == 'select' %]
163 function select_user(borrowernumber, data) {
164 var p = window.opener;
165 p.select_user(borrowernumber, data);
173 <body id="common_patron_search" class="common">
174 <div id="patron_search" class="yui-t7">
178 <form id="searchform">
179 <fieldset class="brief">
180 <h3>Search for patron</h3>
183 <label for="searchmember_filter">Search:</label>
184 <input type="text" id="searchmember_filter" value="[% searchmember %]"/>
187 <label for="categorycode_filter">Category:</label>
188 <select id="categorycode_filter">
189 <option value="">Any</option>
190 [% FOREACH category IN categories %]
191 <option value="[% category.categorycode %]">[% category.description %]</option>
196 <label for="branchcode_filter">Library:</label>
197 <select id="branchcode_filter">
198 [% SET libraries = Branches.all() %]
199 [% IF libraries.size != 1 %]
200 <option value="">Any</option>
202 [% FOREACH l IN libraries %]
203 <option value="[% l.branchcode %]">[% l.branchname %]</option>
208 <fieldset class="action">
209 <input type="submit" value="Search" />
214 [% IF patrons_with_acq_perm_only %]
215 <div class="hint">Only staff with superlibrarian or acquisitions permissions (or order_manage permission if granular permissions are enabled) are returned in the search results</div>
220 [% FOREACH letter IN alphabet.split(' ') %]
221 <a href="#" class="filterByLetter">[% letter %]</a>
225 <div id="info" class="dialog message"></div>
226 <div id="error" class="dialog alert"></div>
228 <input type="hidden" id="firstletter_filter" value="" />
229 <div id="searchresults">
230 <table id="memberresultst">
233 [% FOR column IN columns %]
235 [% CASE 'cardnumber' %]<th>Card</th>
236 [% CASE 'dateofbirth' %]<th>Date of birth</th>
237 [% CASE 'address' %]<th>Address</th>
238 [% CASE 'name' %]<th>Name</th>
239 [% CASE 'branch' %]<th>Library</th>
240 [% CASE 'category' %]<th>Category</th>
241 [% CASE 'dateexpiry' %]<th>Expires on</td>
242 [% CASE 'borrowernotes' %]<th>Notes</th>
243 [% CASE 'action' %]<th> </th>
252 <div id="closewindow"><a href="#" class="btn btn-default btn-default close">Close</a></div>
255 [% SET popup_window = 1 %]
256 [% INCLUDE 'intranet-bottom.inc' %]