Bug 16494 - Remove the use of "onclick" from some patron pages
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / common / patron_search.tt
1 [% USE Koha %]
2 [% INCLUDE 'doc-head-open.inc' %]
3 <title>Koha &rsaquo; Patron search</title>
4 [% INCLUDE 'doc-head-close.inc' %]
5 <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
6 [% INCLUDE 'datatables.inc' %]
7
8 <script type="text/javascript">
9 //<![CDATA[
10
11 var search = 1;
12 $(document).ready(function(){
13     $("#info").hide();
14     $("#error").hide();
15
16     [% IF view != "show_results" %]
17         $("#searchresults").hide();
18         search = 0;
19     [% END %]
20
21     // Apply DataTables on the results table
22     dtMemberResults = $("#memberresultst").dataTable($.extend(true, {}, dataTablesDefaults, {
23         'bServerSide': true,
24         'sAjaxSource': "/cgi-bin/koha/svc/members/search",
25         'fnServerData': function(sSource, aoData, fnCallback) {
26             if ( ! search ) {
27                 return;
28             }
29             aoData.push({
30                 'name': 'searchmember',
31                 'value': $("#searchmember_filter").val()
32             },{
33                 'name': 'firstletter',
34                 'value': $("#firstletter_filter").val()
35             },{
36                 'name': 'categorycode',
37                 'value': $("#categorycode_filter").val()
38             },{
39                 'name': 'branchcode',
40                 'value': $("#branchcode_filter").val()
41             },{
42                 'name': 'name_sorton',
43                 'value': 'borrowers.surname borrowers.firstname'
44             },{
45                 'name': 'category_sorton',
46                 'value': 'categories.description',
47             },{
48                 'name': 'branch_sorton',
49                 'value': 'branches.branchname'
50             },{
51                 'name': 'template_path',
52                 'value': '[% json_template %]',
53             },{
54                 'name': 'selection_type',
55                 'value': '[% selection_type %]',
56             }
57             [% IF patrons_with_acq_perm_only %]
58             ,{
59                 'name': 'has_permission',
60                 'value': 'acquisition.order_manage',
61             }
62             [% END %]
63             );
64             $.ajax({
65                 'dataType': 'json',
66                 'type': 'POST',
67                 'url': sSource,
68                 'data': aoData,
69                 'success': function(json){
70                     fnCallback(json);
71                 }
72             });
73         },
74         'aoColumns':[
75             [% FOR column IN columns %]
76                 [% IF column == 'action' %]
77                     { 'mDataProp': 'dt_action', 'bSortable': false, 'sClass': 'actions' }
78                 [% ELSIF column == 'address' %]
79                     { 'mDataProp': 'dt_address', 'bSortable': false }
80                 [% ELSE %]
81                     { 'mDataProp': 'dt_[% column %]' }
82                 [% END %]
83                 [% UNLESS loop.last %],[% END %]
84             [% END %]
85         ],
86         'bAutoWidth': false,
87         [% IF patrons_with_acq_perm_only %]
88             'bPaginate': false,
89         [% ELSE %]
90             'sPaginationType': 'full_numbers',
91             "iDisplayLength": [% Koha.Preference('PatronsPerPage') %],
92         [% END %]
93         'aaSorting': [[[% aaSorting || 0 %], 'asc']],
94         'bFilter': false,
95         'bProcessing': true,
96     }));
97
98     $("#searchform").on('submit', filter);
99     $(".filterByLetter").on("click",function(e){
100         e.preventDefault();
101         filterByFirstLetterSurname($(this).text());
102     });
103     $("body").on("click",".add_user",function(e){
104         e.preventDefault();
105         var borrowernumber = $(this).data("borrowernumber");
106         var firstname = $(this).data("firstname");
107         var surname = $(this).data("surname");
108         add_user( borrowernumber, firstname + " " + surname );
109     });
110
111     $("body").on("click",".select_user",function(e){
112         e.preventDefault();
113         var borrowernumber = $(this).data("borrowernumber");
114         var guarantor_data = $("#guarantor_data"+borrowernumber).val();
115         select_user( borrowernumber, JSON.parse(guarantor_data) );
116     });
117
118 });
119
120 function filter() {
121     search = 1;
122     $("#firstletter_filter").val('');
123     $("#searchresults").show();
124     dtMemberResults.fnDraw();
125     return false;
126 }
127
128 // User has clicked on a letter
129 function filterByFirstLetterSurname(letter) {
130     $("#firstletter_filter").val(letter);
131     search = 1;
132     $("#searchresults").show();
133     dtMemberResults.fnDraw();
134 }
135
136
137     // modify parent window owner element
138     [% IF selection_type == 'add' %]
139         function add_user(borrowernumber, borrowername) {
140             var p = window.opener;
141             // In one place (serials/routing.tt), the page is reload on every add
142             // We have to wait for the page to be there
143             function wait_for_opener () {
144                 if ( ! $(opener.document).find('body').size() ) {
145                     setTimeout(wait_for_opener, 500);
146                 } else {
147                     [%# Note that add_user could sent data instead of borrowername too %]
148                     $("#info").hide();
149                     $("#error").hide();
150                     if ( p.add_user(borrowernumber, borrowername) < 0 ) {
151                         $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
152                         $("#error").show();
153                     } else {
154                         $("#info").html(_("Patron '%s' added.").format(borrowername));
155                         $("#info").show();
156                     }
157                 }
158             }
159             wait_for_opener();
160         }
161     [% ELSIF selection_type == 'select' %]
162         function select_user(borrowernumber, data) {
163             var p = window.opener;
164             p.select_user(borrowernumber, data);
165             window.close();
166         }
167     [% END %]
168 //]]>
169 </script>
170
171 </head>
172 <body id="common_patron_search" class="common">
173 <div id="patron_search" class="yui-t7">
174   <div id="bd">
175     <div class="yui-g">
176
177         <form id="searchform">
178             <fieldset class="brief">
179                 <h3>Search for patron</h3>
180                 <ol>
181                     <li>
182                         <label for="searchmember_filter">Search:</label>
183                         <input type="text" id="searchmember_filter" value="[% searchmember %]"/>
184                     </li>
185                     <li>
186                         <label for="categorycode_filter">Category:</label>
187                         <select id="categorycode_filter">
188                             <option value="">Any</option>
189                             [% FOREACH category IN categories %]
190                                 <option value="[% category.categorycode %]">[% category.description %]</option>
191                             [% END %]
192                         </select>
193                     </li>
194                     <li>
195                         <label for="branchcode_filter">Library:</label>
196                         <select id="branchcode_filter">
197                             [% IF branches.size != 1 %]
198                                 <option value="">Any</option>
199                             [% END %]
200                             [% FOREACH branch IN branches %]
201                                 <option value="[% branch.branchcode %]">[% branch.branchname %]</option>
202                             [% END %]
203                         </select>
204                     </li>
205                 </ol>
206                 <fieldset class="action">
207                     <input type="submit" value="Search" />
208                 </fieldset>
209             </fieldset>
210         </form>
211
212         [% IF patrons_with_acq_perm_only %]
213             <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>
214         [% END %]
215
216         <div class="browse">
217             Browse by last name:
218             [% FOREACH letter IN alphabet.split(' ') %]
219                 <a href="#" class="filterByLetter">[% letter %]</a>
220             [% END %]
221         </div>
222
223         <div id="info" class="dialog message"></div>
224         <div id="error" class="dialog alert"></div>
225
226         <input type="hidden" id="firstletter_filter" value="" />
227         <div id="searchresults">
228             <table id="memberresultst">
229                 <thead>
230                     <tr>
231                         [% FOR column IN columns %]
232                             [% SWITCH column %]
233                                 [% CASE 'cardnumber' %]<th>Card</th>
234                                 [% CASE 'dateofbirth' %]<th>Date of birth</th>
235                                 [% CASE 'address' %]<th>Address</th>
236                                 [% CASE 'name' %]<th>Name</th>
237                                 [% CASE 'branch' %]<th>Library</th>
238                                 [% CASE 'category' %]<th>Category</th>
239                                 [% CASE 'dateexpiry' %]<th>Expires on</td>
240                                 [% CASE 'borrowernotes' %]<th>Notes</th>
241                                 [% CASE 'action' %]<th>&nbsp;</th>
242                             [% END %]
243                         [% END %]
244                     </tr>
245                   </thead>
246                 <tbody></tbody>
247             </table>
248         </div>
249
250 <div id="closewindow"><a href="#" class="btn btn-default close">Close</a></div>
251 </div>
252 </div>
253 [% INCLUDE 'intranet-bottom.inc' %]