Bug 24958: Remember last selected tab in SQL reports
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / reports / guided_reports_start.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE KohaDates %]
4 [% USE Koha %]
5 [% USE TablesSettings %]
6 [% USE JSON.Escape %]
7 [% SET footerjs = 1 %]
8
9 [%- BLOCK area_name -%]
10     [%- SWITCH area -%]
11         [%- CASE 'CIRC' -%]Circulation
12         [%- CASE 'CAT'  -%]Catalog
13         [%- CASE 'PAT'  -%]Patrons
14         [%- CASE 'ACQ'  -%]Acquisitions
15         [%- CASE 'ACC'  -%]Accounts
16         [%- CASE 'SER'  -%]Serials
17     [%- END -%]
18 [%- END -%]
19
20 [% INCLUDE 'doc-head-open.inc' %]
21
22 <title>
23     Koha &rsaquo; Reports &rsaquo; Guided reports wizard
24     [%- IF ( saved1 ) -%]
25         &rsaquo; Saved reports
26     [%- ELSIF ( create ) -%]
27         &rsaquo; Create from SQL
28     [%- ELSIF ( showsql ) -%]
29         &rsaquo; Saved reports &rsaquo; SQL view
30     [%- ELSIF ( execute ) -%]
31         &rsaquo; Saved reports &rsaquo; [% name | html %] Report
32     [%- ELSIF ( editsql ) -%]
33         &rsaquo; Saved reports &rsaquo; Edit SQL report
34     [%- END -%]
35     [%- IF ( build1 ) -%]
36         &rsaquo; Build a report, step 1 of 6: Choose a module
37     [%- ELSIF ( build2 ) -%]
38         &rsaquo; Build a report, step 2 of 6: Pick a report type
39     [%- ELSIF ( build3 ) -%]
40         &rsaquo; Build a report, step 3 of 6: Select columns for display
41     [%- ELSIF ( build4 ) -%]
42         &rsaquo; Build a report, step 4 of 6: Select criteria to limit on
43     [%- ELSIF ( build5 ) -%]
44         &rsaquo; Build a report, step 5 of 6: Pick which columns to total
45     [%- ELSIF ( build6 ) -%]
46         &rsaquo; Build a report, step 6 of 6: Select how you want the report ordered
47     [%- END -%]
48 </title>
49
50 [% INCLUDE 'doc-head-close.inc' %]
51 [% Asset.css("lib/codemirror/codemirror.min.css") | $raw %]
52 <style>
53     .CodeMirror {
54         resize:  vertical;
55     }
56     #mana_search_errortext { font-family: monospace; font-weight: bold; }
57 </style>
58 [% Asset.css("css/reports.css") | $raw %]
59 [% Asset.css("lib/d3c3/c3.min.css") | $raw %]
60 </head>
61
62 <body id="rep_guided_reports_start" class="rep">
63 [% INCLUDE 'header.inc' %]
64 [% INCLUDE 'circ-search.inc' %]
65
66 <div id="breadcrumbs">
67     <a href="/cgi-bin/koha/mainpage.pl">Home</a>
68     &rsaquo; <a href="/cgi-bin/koha/reports/reports-home.pl">Reports</a>
69     &rsaquo; <a href="/cgi-bin/koha/reports/guided_reports.pl">Guided reports wizard</a>
70
71     [% IF ( saved1 ) %]
72         &rsaquo; Saved reports
73     [% ELSIF ( create ) %]
74         &rsaquo; Create from SQL
75     [% ELSIF ( showsql ) %]
76         &rsaquo; <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Saved reports</a> &rsaquo; SQL view
77     [% ELSIF ( editsql ) %]
78         &rsaquo; <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Saved reports</a> &rsaquo; Edit SQL report
79     [% ELSIF ( execute ) %]
80         &rsaquo; <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Saved reports</a> &rsaquo; <em>[% name | html %]</em> Report
81     [% ELSIF ( build1 || build2 || build3 || build4 || build5 || build6 ) %]
82         &rsaquo; <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Build%20new">Build a report</a>
83         [% IF ( build1 ) %]
84             &rsaquo; Step 1 of 6: Choose a module
85         [% ELSIF ( build2 ) %]
86             &rsaquo; Step 2 of 6: Pick a report type
87         [% ELSIF ( build3 ) %]
88             &rsaquo; Step 3 of 6: Select columns for display
89         [% ELSIF ( build4 ) %]
90             &rsaquo; Step 4 of 6: Select criteria to limit on
91         [% ELSIF ( build5 ) %]
92             &rsaquo; Step 5 of 6: Pick which columns to total
93         [% ELSIF ( build6 ) %]
94             &rsaquo; Step 6 of 6: Select how you want the report ordered
95         [% END %]
96     [% END %]
97 </div> <!-- /#breadcrumbs -->
98
99 <div id="update_sql" class="modal" tabindex="-1" role="dialog" aria-labelledby="update_sql_label" aria-hidden="true">
100     <div class="modal-dialog">
101         <div class="modal-content">
102             <div class="modal-header">
103                 <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
104                 <h3 id="update_sql_label">Update SQL</h3>
105             </div>
106             <div class="modal-body">
107                 <div id="loading"> <img src="[% interface | html %]/[% theme | html %]/img/spinner-small.gif" alt="" /> Loading </div>
108             </div>
109             <div class="modal-footer">
110                 <a href="#" class="btn btn-default" id="update_sql_button" role="button" data-toggle="modal">Update</a>
111                 <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
112             </div>
113         </div> <!-- /.modal-content -->
114     </div> <!-- /.modal-dialog -->
115 </div> <!-- #update_sql -->
116
117 <div class="main container-fluid">
118     <div class="row">
119         <div class="col-sm-10 col-sm-push-2">
120             <main>
121
122                 [% INCLUDE "reports-toolbar.inc" %]
123
124                 [% IF ( start ) %]
125                     <h2>Guided reports</h2>
126                     <p>Use the guided reports engine to create non standard reports. This feature aims to provide some middle ground between the built in canned reports and writing custom SQL reports.</p>
127
128                     <h3>Build and run reports</h3>
129
130                     [% IF ( CAN_user_reports_create_reports ) %]
131                         <form action="/cgi-bin/koha/reports/guided_reports.pl">
132                             <input type="hidden" name="phase" value="Build new" />
133                             <input type="submit" name="submit" value="Build new"/>
134                         </form>
135                     [% END %]
136
137                     [% IF ( CAN_user_reports_execute_reports ) %]
138                         <form action="/cgi-bin/koha/reports/guided_reports.pl">
139                             <input type="hidden" name="phase" value="Use saved"/>
140                             <input type="submit" name="submit" value="Use saved"/>
141                         </form>
142                     [% END %]
143
144                     [% IF ( CAN_user_reports_create_reports ) %]
145                         <form action="/cgi-bin/koha/reports/guided_reports.pl">
146                             <input type="hidden" name="phase" value="Create report from SQL"/>
147                             <input type="submit" name="submit" value="Create report from SQL"/>
148                         </form>
149                     [% END %]
150
151                     <h3>Reports Dictionary</h3>
152                     <p>Use the reports dictionary to define custom criteria to use in your reports</p>
153                     <form action="/cgi-bin/koha/reports/dictionary.pl">
154                         <input type="hidden" name="phase" value="View Dictionary"/>
155                         <input type="submit" name="submit" value="View dictionary"/>
156                     </form>
157                 [% END # /IF (start) %]
158
159                 [% IF report_converted %]
160                     <div class="dialog message">
161                         The report "[% report_converted | html %]" has been converted.
162                     </div>
163                 [% END %]
164
165                 [% IF report_converted %]
166                     <div class="dialog message">
167                         The report "[% report_converted | html %]" has been converted.
168                     </div>
169                 [% END %]
170
171                 [% IF ( saved1 ) %]
172                     [% IF ( savedreports ) %]
173                         <h1>Saved reports</h1>
174
175                         [% IF ( filters.date || filters.author || filters.keyword ) %]
176                             <p>Filtered by:
177                                 <span class="filter">
178                                     [% IF ( filters.date ) %]
179                                         <span class="filter_date"><strong>Date:</strong> [% filters.date | html %]</span>
180                                     [% END %]
181                                     [% IF ( filters.author ) %]
182                                         <span class="filter_author"><strong>Author:</strong> [% filters.author | html %]</span>
183                                     [% END %]
184                                     [% IF ( filters.keyword ) %]
185                                         <span class="filter_keyword"><strong>Keyword:</strong> [% filters.keyword | html %]</span>
186                                     [% END %]
187                                     <a class="clear_filter" href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved&clear_filters=1"><i class="fa fa-remove"></i> Clear</a>
188                                 </span>
189                             </p>
190                         [% END %]
191
192                         <div id="tabs" class="toptabs">
193                             <ul>
194                                 <li><a href="#reports">All</a></li>
195                                 [% FOREACH group IN groups_with_subgroups %]
196                                     <li><a id="[% group.id | html %]" href="#reports">[% group.name | html %]</a></li>
197                                 [% END %]
198                             </ul>
199                             <div id="reports">
200                                 <div id="subgroup_filter_block">
201                                     <label for="subgroup_filter">Subgroup:</label>
202                                     <select id="subgroup_filter">
203                                         <option value="">All</option>
204                                     </select>
205                                 </div>
206
207                                 [% IF (Koha.Preference('Mana') == 1) %]
208                                     [% IF manamsg %]
209                                         <div id="mana_search_message" class="dialog message">
210                                             <p> [% manamsg | html %] </p>
211                                         </div>
212                                     [% END %]
213                                 [% END %]
214
215                                 <form action="/cgi-bin/koha/reports/guided_reports.pl" id="reports_form" method="post">
216                                     <input type="hidden" name="phase" value="Delete Multiple" />
217                                     <table id="table_reports">
218                                         <thead>
219                                             <tr>
220                                                 <th class="NoSort">&nbsp;</th>
221                                                 <th>ID</th>
222                                                 <th>Report name</th>
223                                                 <th>Type</th>
224                                                 <th>Group</th>
225                                                 <th>Subgroup</th>
226                                                 <th>Notes</th>
227                                                 <th>Author</th>
228                                                 <th class="title-string">Creation date</th>
229                                                 <th class="title-string">Last edit</th>
230                                                 <th class="title-string">Last run</th>
231                                                 <th class="report_public">Public</th>
232                                                 <th class="report_json_url">JSON URL</th>
233                                                 [% IF (usecache) %]
234                                                     <th>Cache expiry (seconds)</th>
235                                                 [% ELSE %]
236                                                     <th class="hidden">&nbsp;</th>
237                                                 [% END %]
238                                                 <th>Saved results</th>
239                                                 [% IF has_obsolete_reports %]
240                                                     <th>Update</th>
241                                                 [% ELSE %]
242                                                     <th class="hidden">&nbsp;</th>
243                                                 [% END %]
244                                                 <th class="NoSort">Actions</th>
245                                             </tr>
246                                         </thead>
247                                         <tbody>
248                                             [% FOREACH savedreport IN savedreports %]
249                                                 [% UNLESS ( loop.odd ) %]<tr class="odd">[% ELSE %]<tr>[% END %]
250                                                     <td class="report_checkbox">
251                                                         [% IF ( CAN_user_reports_delete_reports ) %] <!-- not break CSS -->
252                                                             <input type="checkbox" name="ids" id="ids[% savedreport.id | html %]" value="[% savedreport.id | html %]" />
253                                                         [% END %]
254                                                         <input type="hidden" class="report_sql" value="[% savedreport.savedsql |html %]">
255                                                     </td>
256                                                     <td class="report_id">
257                                                         <label for="ids[% savedreport.id | html %]">[% savedreport.id | html %]</label>
258                                                     </td>
259                                                     <td class="report_name">
260                                                         [% IF ( savedreport.report_name ) %]
261                                                             [% savedreport.report_name | html %]
262                                                         [% ELSE %]
263                                                             [ no name ]
264                                                         [% END %]
265                                                     </td>
266                                                     <td class="report_type">
267                                                         [% savedreport.type | html %]
268                                                     </td>
269                                                     <td class="report_group">
270                                                         [% savedreport.groupname | html %]
271                                                     </td>
272                                                     <td>
273                                                         [% savedreport.subgroupname | html %]
274                                                     </td>
275                                                     <td class="report_notes">
276                                                         [% savedreport.notes | html %]
277                                                     </td>
278                                                     <td>
279                                                         [% savedreport.borrowersurname | html %]
280                                                         [% IF ( savedreport.borrowerfirstname ) %]
281                                                             , [% savedreport.borrowerfirstname | html %]
282                                                         [% END %]
283                                                         ([% savedreport.borrowernumber | html %])
284                                                     </td>
285                                                     <td>
286                                                         <span title="[% savedreport.date_created | html %]">[% savedreport.date_created | $KohaDates %]</span>
287                                                     </td>
288                                                     <td>
289                                                         <span title="[% savedreport.last_modified | html %]">[% savedreport.last_modified | $KohaDates  with_hours => 1 %]</span>
290                                                     </td>
291                                                     <td>
292                                                         <span title="[% savedreport.last_run | html %]">[% savedreport.last_run | $KohaDates  with_hours => 1 %]</span>
293                                                     </td>
294                                                     <td class="report_public">
295                                                         [% IF (savedreport.public) %]
296                                                             Yes
297                                                         [% ELSE %]
298                                                             No
299                                                         [% END %]
300                                                     </td>
301                                                     <td class="report_json_url">
302                                                         [% IF (savedreport.public) %]
303                                                             <a href="[% OPACBaseURL | url %]/cgi-bin/koha/svc/report?id=[% savedreport.id | uri %]">[% OPACBaseURL | html %]/cgi-bin/koha/svc/report?id=[% savedreport.id | html %]</a>
304                                                         [% ELSE %]
305                                                             <a href="/cgi-bin/koha/svc/report?id=[% savedreport.id | uri %]">[% Koha.Preference('staffClientBaseURL') | html %]/cgi-bin/koha/svc/report?id=[% savedreport.id | html %]</a>
306                                                         [% END %]
307                                                     </td>
308                                                     <td>
309                                                         [% savedreport.cache_expiry | html %]
310                                                     </td>
311                                                     <td>
312                                                         [% FOR result IN savedreport.results %]
313                                                             <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=retrieve%20results&amp;id=[% result.id | uri %]">[% result.date_run | html %]</a>
314                                                             <br/>
315                                                         [% END %]
316                                                     </td>
317                                                     <td>
318                                                         [% IF savedreport.seems_obsolete %]
319                                                             This report seems obsolete, it uses biblioitems.marcxml field.
320                                                             <a href="/cgi-bin/koha/svc/convert_report?report_id=[% savedreport.id | uri %]" data-report_id="[% savedreport.id | html %]" class="update_sql btn btn-default btn-xs" title="Update SQL"><i class="fa fa-eye"></i> Update SQL</a>
321                                                         [% END %]
322                                                     </td>
323                                                     <td>
324                                                         <div class="btn-group dropup">
325                                                             [%# There should be no space between these two buttons, it would render badly %]
326                                                             <a class="btn btn-default btn-xs" role="button"
327                                                                href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id | html %]&amp;phase=Run%20this%20report"><i
328                                                                class="fa fa-play"></i> Run</a><a
329                                                                class="btn btn-default btn-xs dropdown-toggle" id="reportactions[% savedreport.id | html %]" role="button" data-toggle="dropdown"
330                                                                href="#"><b class="caret"></b></a>
331                                                             <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="reportactions[% savedreport.id | html %]">
332                                                                 <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id | uri %]&amp;phase=Show%20SQL"><i class="fa fa-search"></i> Show</a></li>
333                                                                 [% IF ( CAN_user_reports_create_reports ) %]
334                                                                     <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id | uri %]&amp;phase=Edit%20SQL"><i class="fa fa-pencil"></i> Edit</a></li>
335                                                                     <li><a title="Duplicate this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create report from existing&amp;report_id=[% savedreport.id | uri %]"><i class="fa fa-copy"></i> Duplicate</a></li>
336                                                                 [% END %]
337                                                                 [% IF (Koha.Preference('Mana') == 1) %]
338                                                                     <li><a class="ShareButton" data-toggle="modal" href="#mana_share_report" title="Share your report with Mana Knowledge Base"><i class="fa fa-share-alt"></i> Share</a></li>
339                                                                 [% END %]
340                                                                 <li><a href="/cgi-bin/koha/tools/scheduler.pl?id=[% savedreport.id | uri %]"><i class="fa fa-clock-o"></i> Schedule</a></li>
341                                                                 [% IF ( CAN_user_reports_delete_reports ) %]
342                                                                     <li><a class="confirmdelete" title="Delete this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id | html %]&amp;phase=Delete%20Saved"><i class="fa fa-trash"></i> Delete</a></li>
343                                                                 [% END %]
344                                                             </ul>
345                                                         </div>
346                                                     </td>
347                                                 </tr>
348                                             [% END %]
349                                         </tbody>
350                                     </table>
351
352                                     [% IF ( CAN_user_reports_delete_reports ) %]
353                                         <fieldset class="action">
354                                             <input type="submit" value="Delete selected" />
355                                         </fieldset>
356                                     [% END %]
357                                 </form>
358                             </div>
359                         </div>
360                     [% ELSE # IF ( savedreports ) %]
361                         <div class="dialog message">
362                             [% IF (filter_set || filters.date || filters.author || filters.keyword) %]
363                                 <h4>No saved reports match your criteria. </h4>
364                                 [% IF ( CAN_user_reports_create_reports ) %]
365                                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="get">
366                                         <input type="hidden" name="phase" value="Build new" />
367                                         <button type="submit" class="new"><i class="fa fa-plus"></i> New guided report</button>
368                                     </form>
369
370                                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="get">
371                                         <input type="hidden" name="phase" value="Create report from SQL" />
372                                         <button type="submit" class="new"><i class="fa fa-plus"></i> New SQL report</button>
373                                     </form>
374
375                                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="get">
376                                         <input type="hidden" name="phase" value="Use saved" />
377                                         <input type="hidden" name="filter_set" value="1" />
378                                         <input type="hidden" name="filter_keyword" value="" />
379                                         <button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> Cancel filter</button>
380                                     </form>
381                                 [% END %]
382                             [% ELSE %]
383                                 <h4>There are no saved reports. </h4>
384                                 [% IF ( CAN_user_reports_create_reports ) %]
385                                     <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Build%20new">Build a new report?</a>
386                                 [% END %]
387                             [% END # IF (filter_set || filters.date || filters.author || filters.keyword) %]
388                         </div> <!-- /.dialog.message -->
389                     [% END # /IF ( savedreports ) %]
390                 [% END # /IF ( saved1 ) %]
391
392                 [% INCLUDE 'mana/mana-share-report.inc' %]
393
394                 [% IF ( build1 ) %]
395                     [% IF ( cache_error) %]
396                         <div class="dialog alert">
397                             <strong> Please choose a cache_expiry less than 30 days </strong>
398                         </div>
399                     [% END %]
400
401                     <h1>Build a report</h1>
402                     <form action="/cgi-bin/koha/reports/guided_reports.pl">
403                         <fieldset class="rows">
404                             <legend>Step 1 of 6: Choose a module to report on,[% IF (usecache) %] Set cache expiry, [% END %] and choose report visibility </legend>
405                             <ol>
406                                 <li>
407                                     <label for="area">Choose: </label>
408                                     <select name="area" id="area">
409                                         [%- FOREACH area IN areas -%]
410                                             <option value="[% area | html %]">[%- PROCESS area_name area=area -%]</option>
411                                         [%- END -%]
412                                     </select>
413                                 </li>
414                                 [% IF (public) %]
415                                     <li>
416                                         <label for="public">Report is public:</label>
417                                         <select id="public" name="public">
418                                             <option value="0">No (default)</option>
419                                             <option value="1" selected="selected">Yes</option>
420                                         </select>
421                                     </li>
422                                 [% ELSE %]
423                                     <li>
424                                         <label for="public">Report is public:</label>
425                                         <select id="public" name="public">
426                                             <option value="0" selected="selected">No (default)</option>
427                                             <option value="1">Yes</option>
428                                         </select>
429                                     </li>
430                                 [% END %]
431
432                                 [% IF (usecache) %]
433                                     <li>
434                                         <label for="cache_expiry">Cache expiry:</label>
435                                         <input type="text" id="cache_expiry" name="cache_expiry" value="[% cache_expiry | html %]"></input>
436                                         <select id="cache_expiry_units" name="cache_expiry_units">
437                                             <option value="seconds">Seconds (default)</option>
438                                             <option value="minutes">Minutes</option>
439                                             <option value="hours">Hours</option>
440                                             <option value="days">Days</option>
441                                         </select>
442                                     </li>
443                                 [% END %]
444                             </ol>
445                         </fieldset> <!-- /.rows -->
446                         <fieldset class="action">
447                             <input type="hidden" name="phase" value="Report on this Area" />
448                             <input type="submit" name="submit" value="Next &gt;&gt;" />
449                         </fieldset>
450                     </form>
451                 [% END # /build1 %]
452
453                 [% IF ( build2 ) %]
454                     <h1>Build a report</h1>
455                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
456                         <input type="hidden" name="area" value="[% area | html %]" />
457                         <input type="hidden" name="public" value="[% public | html %]" />
458                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
459                         <fieldset class="rows">
460                             <legend>Step 2 of 6: Pick a report type</legend>
461                             <ol>
462                                 <li>
463                                     <label for="types">Choose: </label>
464                                     <select id="types" name="types">
465                                         <option value="1">Tabular</option>
466                                         <option value="2" disabled="disabled">Summary</option>
467                                         <option value="3" disabled="disabled">Matrix</option>
468                                     </select>
469                                 </li>
470                             </ol>
471                         </fieldset>
472
473                         <fieldset class="action">
474                             <input type="hidden" name="phase" value="Choose this type" />
475                             <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
476                             <input type="submit" name="submit" value="Next &gt;&gt;" />
477                         </fieldset>
478                     </form>
479                 [% END # /IF (build2 ) %]
480
481                 [% IF ( build3 ) %]
482                     <h1>Build a report</h1>
483                     <h3>Step 3 of 6: Select columns for display</h3>
484                     <p>Note: Be careful selecting when selecting columns. If your choice is too broad it could result in a very large report that will either not complete, or slow your system down.</p>
485
486                     <form id="column_submit" action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
487                         <input type="hidden" name="area" value="[% area | html %]" />
488                         <input type="hidden" name="type" value="[% type | html %]" />
489                         <input type="hidden" name="public" value="[% public | html %]" />
490                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
491                         <fieldset>
492                             <div class="row">
493                                 <div class="col-sm-6">
494                                     <div style="float: left;">
495                                         <select id="availableColumns" name="oldcolumns2" multiple="multiple" size="25" style="min-width: 200px;height:300px;">
496                                             [% FOREACH column IN columns %]
497                                                 [% IF ( column.table ) %]
498                                                     [% IF ( loop.first ) %]
499                                                     [% ELSE %]
500                                                         </optgroup>
501                                                     [% END %]
502                                                     <optgroup label="[% column.table | html %]">
503                                                 [% ELSE %]
504                                                     <option value="[% column.name | html %]">
505                                                         [% IF ( column.description ) %]
506                                                             [% column.description | html %] &nbsp; / &nbsp; [% column.name | html %]
507                                                         [% ELSE %]
508                                                             [% column.name | html %]
509                                                         [% END %]
510                                                     </option>
511                                                 [% END %]
512                                             [% END %]
513                                             </optgroup>
514                                         </select>
515                                     </div>
516                                     <div style="width: 6.3em; float: right; margin-top: 100px">
517                                         <input type="button" name="Add" value="Add" class="button" style="width:6em;" id="addColumn" /><br />
518                                         <input type="button" name="delete" value="&lt;&lt; Delete" class="button" style="width: 6em; margin: 1em 0;" id="delColumn" />
519                                     </div>
520                                 </div> <!-- /.col-sm-6 -->
521
522                                 <div class="col-sm-6">
523                                     <select id="selectedColumns" name="columns" multiple="multiple" size="25" style="width:200px; height:300px;">
524                                     </select>
525                                 </div>
526                             </div> <!-- /.row -->
527                         </fieldset>
528                         <fieldset class="action">
529                             <input type="hidden" name="phase" value="Choose these columns" />
530                             <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
531                             <input type="submit" name="submit" value="Next &gt;&gt;" />
532                         </fieldset>
533                     </form> <!-- /#column_submit -->
534                 [% END # /IF ( build3 ) %]
535
536                 [% IF ( build4 ) %]
537                     <h1>Build a report</h1>
538                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post" >
539                         <input type="hidden" name="area" value="[% area | html %]" />
540                         <input type="hidden" name="type" value="[% type | html %]" />
541                         <input type="hidden" name="column" value="[% column | html %]" />
542                         <input type="hidden" name="public" value="[% public | html %]" />
543                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
544                         <fieldset>
545                             <legend>Step 4 of 6: Select criteria to limit on</legend>
546                             <table>
547                                 [% FOREACH criteri IN criteria %]
548                                     <tr>
549                                         <td>
550                                             <input type="checkbox" name="criteria_column" id="[% criteri.name | html %]" value="[% criteri.name | html %]" />
551                                             <label for="[% criteri.name | html %]">[% criteri.description | html %] </label>
552                                         </td>
553                                         [% IF ( criteri.date ) %]
554                                             <td>
555                                                 <input type="text" size="10" id="[% criteri.name | html %]_value" name="[% criteri.name | html %]_value" value="" class="datepicker" />
556                                                 <span class="hint">[% INCLUDE 'date-format.inc' %]</span>
557                                             </td>
558                                         </tr>
559                                         [% ELSE %]
560                                             [% IF ( criteri.textrange ) %]
561                                                 <td>
562                                                     from
563                                                     <input type="text" size="10" id="[% criteri.from | html %]_value" name="[% criteri.from | html %]_value" value="" /> to
564                                                     <input type="text" size="10" id="[% criteri.to | html %]_value" name="[% criteri.to | html %]_value" value="" />
565                                                 </td>
566                                             </tr>
567                                             [% ELSE %]
568                                                 [% IF ( criteri.daterange ) %]
569                                                     <td>
570                                                         from
571                                                         <input type="text" size="10" id="from_[% criteri.name | html %]_value" name="from_[% criteri.name | html %]_value" value="" class="datepickerfrom" />
572                                                         to
573                                                         <input type="text" size="10" id="to_[% criteri.name | html %]_value" name="to_[% criteri.name | html %]_value" value="" class="datepickerto" />
574                                                         <span class="hint">[% INCLUDE 'date-format.inc' %]</span>
575                                                     </td>
576                                                 </tr>
577                                                 [% ELSE %]
578                                                     <td>
579                                                         <select name="[% criteri.name | html %]_value">
580                                                            [% FOREACH value IN criteri.values %]
581                                                                 <option value="[% value.availablevalues | html %]">
582                                                                     [% IF ( value.default ) %]
583                                                                         Default
584                                                                     [% ELSE %]
585                                                                         [% value.display_value | html %]
586                                                                     [% END %]
587                                                                 </option>
588                                                             [% END %]
589                                                         </select>
590                                                     </td>
591                                                 </tr>
592                                                 [% END %]
593                                             [% END %]
594                                         [% END %]
595                                 [% END %]
596                             </table>
597                         </fieldset>
598
599                         [% IF ( definitions ) %]
600                             <fieldset>
601                                 <legend>Dictionary definitions</legend>
602                                 <table>
603                                     [% FOREACH definition IN definitions %]
604                                         <tr>
605                                             <td>
606                                                 <input type="checkbox" name="definition" value="[% definition.id | html %]" />
607                                                 [% definition.name | html %]
608                                             </td>
609                                         </tr>
610                                     [% END %]
611                                 </table>
612                             </fieldset>
613                         [% END %]
614
615                         <fieldset class="action">
616                             <input type="hidden" name="phase" value="Choose these criteria" />
617                             <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
618                             <input type="submit" name="submit" value="Next &gt;&gt;" />
619                         </fieldset>
620                     </form>
621                 [% END # /IF ( build4 ) %]
622
623                 [% IF ( build5 ) %]
624                     <h1>Build a report</h1>
625                     <h3>Step 5 of 6: Pick which columns to total</h3>
626                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
627                         <input type="hidden" name="area" value="[% area | html %]" />
628                         <input type="hidden" name="type" value="[% type | html %]" />
629                         <input type="hidden" name="column" value="[% column | html %]" />
630                         <input type="hidden" name="definition" value="[% definition | html %]" />
631                         <input type="hidden" name="criteria" value="[% criteriastring | html %]" />
632                         <input type="hidden" name="public" value="[% public | html %]" />
633                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
634                         <fieldset>
635                             <table>
636                                 [% FOREACH total_b IN total_by %]
637                                     <tr>
638                                         <td>
639                                             <input type="checkbox" name="total_by" id="[% total_b.name | html %]" value="[% total_b.name | html %]" />
640                                             <label for="[% total_b.name | html %]">[% total_b.name | html %]</label>
641                                         </td>
642                                         <td>
643                                             <select name="[% total_b.name | html %]_tvalue">
644                                                 [% FOREACH selec IN total_b.select %]
645                                                     <option value="[% selec.value | html %]">[% selec.value | html %]</option>
646                                                 [% END %]
647                                             </select>
648                                         </td>
649                                     </tr>
650                                 [% END %]
651                             </table>
652                         </fieldset>
653
654                         <fieldset class="action"><input type="hidden" name="phase" value="Choose these operations" />
655                             <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
656                             <input type="submit" name="submit" value="Next &gt;&gt;" />
657                         </fieldset>
658                     </form>
659                 [% END # /IF ( build5 ) %]
660
661                 [% IF ( build6 ) %]
662                     <h1>Build a report</h1>
663                     <h3>Step 6 of 6: Choose how you want the report ordered</h3>
664                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
665                         <input type="hidden" name="area" value="[% area | html %]" />
666                         <input type="hidden" name="type" value="[% type | html %]" />
667                         <input type="hidden" name="column" value="[% column | html %]" />
668                         <input type="hidden" name="criteria" value="[% criteriastring | html %]" />
669                         <input type="hidden" name="definition" value="[% definition | html %]" />
670                         <input type="hidden" name="totals" value="[% totals | html %]" />
671                         <input type="hidden" name="public" value="[% public | html %]" />
672                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
673                         <fieldset>
674                             <table>
675                                 [% FOREACH order_b IN order_by %]
676                                     <tr>
677                                         <td>
678                                             <input type="checkbox" id="[% order_b.name | html %]" name="order_by" value="[% order_b.name | html %]" />
679                                             <label for="[% order_b.name | html %]">[% order_b.name | html %]</label>
680                                         </td>
681                                         <td>
682                                             <select name="[% order_b.name | html %]_ovalue">
683                                                 [% FOREACH selec IN order_b.select %]
684                                                     <option value="[% selec.value | html %]">[% selec.value | html %]</option>
685                                                 [% END %]
686                                             </select>
687                                         </td>
688                                     </tr>
689                                 [% END %]
690                             </table>
691                         </fieldset>
692                         <fieldset class="action">
693                             <input type="hidden" name="phase" value="Build report" />
694                             <input type="submit" name="submit" value="Finish" />
695                         </fieldset>
696                     </form>
697                 [% END #/ IF ( build6 ) %]
698
699                 [% IF ( showreport ) %]
700                     <h1>Confirm custom report</h1>
701                     <p>Your report will be generated with the following SQL statement.</p>
702                     <p>
703                         [% sql | html %]
704                     </p>
705
706                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
707                         <input type="hidden" name="sql" value="[% sql | html %]" />
708                         <input type="hidden" name="type" value="[% type | html %]" />
709                         <input type="hidden" name="public" value="[% public | html %]" />
710                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
711                         <p>You will need to save the report before you can execute it</p>
712                         <fieldset class="action"><input type="hidden" name="phase" value="Save" />
713                             <input type="submit" name="submit" value="Next" />
714                         </fieldset>
715                     </form>
716                 [% END #/ IF ( showreport ) %]
717
718                 [% IF ( save ) %]
719                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post" id="sql_report_form">
720                         <input type="hidden" name="sql" value="[% sql | html %]" />
721                         <input type="hidden" name="type" value="[% type | html %]" />
722                         <input type="hidden" name="area" value="[% area | html %]" />
723                         <input type="hidden" name="public" value="[% public | html %]" />
724                         <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
725                         <fieldset class="rows">
726                             <legend>Save your custom report</legend>
727                             <ol>
728                                 <li>
729                                     <label for="reportname" class="required">Report name: </label>
730                                     <input type="text" id="reportname" name="reportname" class="required" required="required" />
731                                     <span class="required">Required</span>
732                                 </li>
733                                 [% PROCESS group_and_subgroup_selection %]
734                                 <li>
735                                     <label for="notes">Notes:</label>
736                                     <textarea name="notes" id="notes"></textarea>
737                                 </li>
738                             </ol>
739                         </fieldset>
740                         <fieldset class="action"><input type="hidden" name="phase" value="Save Report" />
741                             <input type="submit" name="submit" value="Save report" />
742                         </fieldset>
743                     </form>
744                 [% END # /IF( save ) %]
745
746                 [% IF ( warn_authval_problem ) %]
747                     <div class="dialog alert">
748                         <h3>Errors found when processing parameters for report: [% name | html %]</h3>
749                         [% FOREACH problematic_authval IN problematic_authvals %]
750                             <p>
751                             <strong>[% problematic_authval.name | html %]:</strong> The authorized value category (<strong>[% problematic_authval.authval | html %]</strong>)
752                                 you selected does not exist.
753                             </p>
754                         [% END %]
755                         <!-- Save Anyway Form -->
756                         <form action='/cgi-bin/koha/reports/guided_reports.pl'>
757                         <!--Every parameter the user issued is provided as a hidden field for recovery-->
758                             <input type='hidden' name='id' value='[% id | html %]' />
759                             <input type='hidden' name='sql' value='[% sql | html %]' />
760                             <input type='hidden' name='reportname' value='[% reportname | html %]' />
761                             <input type='hidden' name='group' value='[% group | html %]' />
762                             <input type='hidden' name='subgroup' value='[% subgroup | html %]' />
763                             <input type='hidden' name='notes' value='[% notes | html %]' />
764                             <input type='hidden' name='cache_expiry' value='[% cache_expiry | html %]' />
765                             <input type='hidden' name='cache_expiry_units' value='[% cache_expiry_units | html %]' />
766                             <input type='hidden' name='public' value='[% public | html %]' />
767                         [% IF ( phase_update) %]
768                             <input type='hidden' name='phase' value='Update SQL' />
769                             <button type="submit" name="save_anyway" value="Save anyway" class="approve"><i class="fa fa-fw fa-check"></i> Save anyway</button>
770                         [% ELSIF ( phase_save) %]
771                             <input type='hidden' name='area' value='[% area | html %]' />
772                             <input type='hidden' name='phase' value='Save Report' />
773                             <button type="submit" name="save_anyway" value="Save anyway" class="approve"><i class="fa fa-fw fa-check"></i> Save anyway</button>
774                         [% END %]
775                         </form>
776                         <!-- Go back to editing -->
777                         <form action='/cgi-bin/koha/reports/guided_reports.pl'>
778                             <button type="button" class="new goback"><i class="fa fa-fw fa-pencil"></i> Edit SQL</button>
779                         </form>
780                     </div>
781                 [% END # /IF ( warn_authval_problem )%]
782
783                 [% IF ( enter_params ) %]
784                     <form action='/cgi-bin/koha/reports/guided_reports.pl'>
785                         <input type='hidden' name='reports' value="[% reports | html %]" />
786                         [% IF ( auth_val_error ) %]
787                             <input type='hidden' name='phase' value='Edit SQL' />
788                             <div class="dialog alert">
789                                 <h3>Errors found when processing parameters for report: [% name | html %]</h3>
790                                 [% FOREACH auth_val_error IN auth_val_errors %]
791                                     <p>
792                                         <strong>[% auth_val_error.entry | html %]:</strong> The authorized value category (<strong>[% auth_val_error.auth_val | html %]</strong>)
793                                         you selected does not exist.
794                                     </p>
795                                 [% END %]
796                             </div>
797                             <fieldset class="action"><input type="submit" value="Edit SQL" /></fieldset>
798                         [% ELSE #  IF ( auth_val_error ) %]
799                             <input type='hidden' name='phase' value='Run this report' />
800                             <h1>Enter parameters for report [% name | html %]:</h1>
801                             [% IF ( notes ) %]
802                                 <p>[% notes | html %]</p>
803                             [% END %]
804                             <fieldset class="rows">
805                                 <ol>
806                                     [% FOREACH sql_param IN sql_params %]
807                                         <input name="param_name" value="[% sql_param.name | html %]" type="hidden" />
808                                         [% IF sql_param.input == 'date' %]
809                                             <li>
810                                                 <label for="date_[% sql_param_entry | html %][% loop.count | html %]">[% sql_param.entry | html %]:</label> <input id="date_[% sql_param_entry | html %][% loop.count | html %]" type="text" value="" size="10" name="sql_params" class="datepicker" />
811                                             </li>
812                                         [% ELSIF ( sql_param.input == 'text' ) %]
813                                             <li>
814                                                 <label for="sql_params[% loop.count | html %]">[% sql_param.entry | html %]: </label>
815                                                 <input id="sql_params[% loop.count | html %]" type="text" name="sql_params" />
816                                             </li>
817                                         [% ELSE %]
818                                             <li>
819                                                 <label for="sql_params_[% sql_param.labelid | html %]">[% sql_param.entry | html %]:</label>
820                                                 <select name="[%- sql_param.input.name | html -%]" tabindex="1"  size="1" id="[%- sql_param.input.id | html -%]">
821                                                     [% IF (sql_param.include_all) %]
822                                                         <option value="%">All</option>
823                                                     [% END %]
824                                                     [% FOREACH value IN sql_param.input.values %]
825                                                         <option value="[%- value | html -%]">[%- sql_param.input.labels.$value | html -%]</option>
826                                                     [% END %]
827                                                 </select>
828                                             </li>
829                                         [% END # /IF sql_param.input == 'date' %]
830                                     [% END # /FOREACH sql_param %]
831                                 </ol>
832                             </fieldset> <!-- /.rows -->
833                             <fieldset class="action">
834                                 <input type="submit" value="Run the report" />
835                             </fieldset>
836                         [% END # / IF ( auth_val_error ) %]
837                     </form>
838                 [% END # /IF ( enter_params ) %]
839
840                 [% IF ( execute ) %]
841                     <h1>[% name | html %]</h1>
842                     [% IF ( notes ) %]
843                         <p><span class="label">Notes:</span> [% notes | html %]</p>
844                     [% END %]
845                     [% IF ( unlimited_total ) %]
846                         <p>
847                             <span class="label">Total number of results:</span>
848                             [% unlimited_total | html %]
849                             [% IF unlimited_total > limit %]
850                                 ([% limit | html %] shown)
851                             [% END %].
852                         </p>
853                     [% END %]
854
855                     <div id="sql_output" style="display:none;">
856                         <span class="label">Report SQL:</span>
857                         <textarea id="sql" readonly="readonly">[% sql | html %]</textarea>
858                     </div>
859
860                     <div>
861                         <a href="#" id="toggle_chart_settings_hid" class="toggle_chart_settings" style="display:none"><i class="fa fa-eye-slash"></i> Hide chart</a>
862                         <a href="#" id="toggle_chart_settings_vis" class="toggle_chart_settings" style="display:none"><i class="fa fa fa-eye"></i> Show chart</a>
863                     </div>
864                     <div id="chart" class="clearfix"></div>
865
866                     [% IF ( execute ) %]
867                         [% UNLESS ( errors ) %]
868                             <form method="post" enctype="multipart/form-data" action="/cgi-bin/koha/tools/batch_record_modification.pl" id="batch_record_modification">
869                                 <input type="hidden" name="recordtype" value="biblio" />
870                                 <input type="hidden" name="op" value="list" />
871                                 [% # Preserve the whitespace of the following textarea in order to format the values correctly %]
872                                 <textarea style="display:none" name="recordnumber_list" id="recordnumber_list">[% FOREACH result IN results %][% FOREACH cells IN result.cells %][% place = loop.index %][% IF header_row.$place.cell == 'biblionumber' || header_types.item(header_row.$place.cell) == 'biblionumber' %][% cells.cell | html %][% END %][% END %][% END %]</textarea>
873                             </form>
874
875                             <form method="POST" action="/cgi-bin/koha/tools/batch_delete_records.pl" id="batch_record_deletion">
876                                 <input type="hidden" name="recordtype" value="biblio" />
877                                 <input type="hidden" name="op" value="list" />
878                                 [% # Preserve the whitespace of the following textarea in order to format the values correctly %]
879                                 <textarea style="display:none" name="recordnumber_list" id="recordnumber_list">[% FOREACH result IN results %][% FOREACH cells IN result.cells %][% place = loop.index %][% IF header_row.$place.cell == 'biblionumber' || header_types.item(header_row.$place.cell) == 'biblionumber' %][% cells.cell | html %][% END %][% END %][% END %]</textarea>
880                             </form>
881
882                             <form method="POST" action="/cgi-bin/koha/tools/batchMod.pl" id="batch_item_modification">
883                                 <input type="hidden" name="op" value="show" />
884                                 [% FOREACH result IN results %]
885                                     [% FOREACH cells IN result.cells %]
886                                         [% place = loop.index %]
887                                         [% NEXT UNLESS cells.cell.match('^(\d+)$') %]
888                                         [% IF header_row.$place.cell == 'itemnumber' || header_types.item(header_row.$place.cell) == 'itemnumber'  %]
889                                             [% SET batch_itemnumbers = 1 %]
890                                             [% SET header_row.$place.has_itemnumbers = 1 %]
891                                             <input type="hidden" name="[% header_row.$place.cell | html %]" value="[% cells.cell | html %]" />
892                                         [% END %]
893                                     [% END %]
894                                 [% END %]
895                             </form>
896
897                             <form method="POST" action="/cgi-bin/koha/tools/batchMod.pl" id="batch_item_deletion">
898                                 <input type="hidden" name="op" value="show" />
899                                 <input type="hidden" name="del" value="1" />
900                                 [% FOREACH result IN results %]
901                                     [% FOREACH cells IN result.cells %]
902                                         [% place = loop.index %]
903                                         [% NEXT UNLESS cells.cell.match('^(\d+)$') %]
904                                         [% IF header_row.$place.cell == 'itemnumber' || header_types.item(header_row.$place.cell) == 'itemnumber'  %]
905                                             [% SET batch_itemnumbers = 1 %]
906                                             [% SET header_row.$place.has_itemnumbers = 1 %]
907                                             <input type="hidden" name="[% header_row.$place.cell | html %]" value="[% cells.cell | html %]" />
908                                         [% END %]
909                                     [% END %]
910                                 [% END %]
911                             </form>
912
913                             <form method="get" action="/cgi-bin/koha/virtualshelves/addbybiblionumber.pl" id="batch_add_to_list">
914                                 [% FOREACH result IN results %]
915                                     [% FOREACH cells IN result.cells %]
916                                         [% place = loop.index %]
917                                         [% NEXT UNLESS cells.cell.match('^(\d+)$') %]
918                                         [% IF header_row.$place.cell == 'biblionumber' || header_types.item(header_row.$place.cell) == 'biblionumber' %]
919                                             [% SET batch_biblionumbers = 1 %]
920                                             [% SET header_row.$place.has_biblionumbers = 1 %]
921                                             <input type="hidden" class="bib_to_list" name="biblionumber" value="[% cells.cell | html %]" />
922                                         [% END %]
923                                     [% END %]
924                                 [% END %]
925                             </form>
926
927                             <form method="POST" action="/cgi-bin/koha/tools/modborrowers.pl" id="batch_patron_modification">
928                                 <input type="hidden" name="op" value="show" />
929                                 [% # Preserve the whitespace of the following textarea in order to format the values correctly %]
930                                 <textarea style="display:none" name="cardnumberlist" id="cardnumberlist">[% FOREACH result IN results %][% FOREACH cells IN result.cells %][% place = loop.index %][% IF header_row.$place.cell == 'cardnumber' || header_types.item(header_row.$place.cell) == 'cardnumber' %][% SET batch_cardnumbers = 1 %][% cells.cell | html %][% END %][% END %][% END %]</textarea>
931                             </form>
932
933                             [% IF ( batch_biblionumbers || batch_itemnumbers || batch_cardnumbers ) %]
934                                 <p>
935                                     <div class="btn-group">
936                                         <button class="btn btn-default dropdown-toggle" type="button" id="batch_mod_menu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
937                                             Batch operations with [% IF unlimited_total > limit %][% limit | html %][% ELSE %][% unlimited_total | html %][% END %] visible records
938                                             <span class="caret"></span>
939                                         </button>
940                                         <ul class="dropdown-menu" aria-labelledby="batch_mod_menu">
941                                             [% FOREACH header_ro IN header_row %]
942                                                 [% IF header_ro.has_biblionumbers && ( header_ro.cell == 'biblionumber' || header_types.item( header_ro.cell ) == 'biblionumber' ) %]
943                                                     <li class="dropdown-header">Bibliographic records</li>
944                                                     <li>
945                                                         <a href="#" data-submit="batch_record_modification" data-toggle="tooltip" data-placement="right" title="Send visible records to batch record modification" class="batch_op send_to_record_mod">Batch record modification</a>
946                                                     </li>
947                                                     <li>
948                                                         <a href="#" data-submit="batch_record_deletion" data-toggle="tooltip" data-placement="right" title="Send visible records to batch record deletion" class="batch_op send_to_record_del">Batch record deletion</a>
949                                                     </li>
950                                                     <li>
951                                                         <a href="#" data-submit="batch_add_to_list" data-toggle="tooltip" data-placement="right" title="Send visible records to a list" class="batch_op send_to_list">Add to list</a>
952                                                     </li>
953                                                 [% END %]
954                                                 [% IF header_ro.has_itemnumbers && ( header_ro.cell == 'itemnumber' || header_types.item( header_ro.cell ) == 'itemnumber' ) %]
955                                                     [% IF ( batch_biblionumbers ) %]
956                                                         <li role="separator" class="divider"></li>
957                                                     [% END %]
958                                                     <li class="dropdown-header">Item records</li>
959                                                     <li>
960                                                         <a href="#" data-submit="batch_item_modification" data-toggle="tooltip" data-placement="right" title="Send visible items to batch item modification" class="batch_op send_to_item_mod">Batch item modification</a>
961                                                     </li>
962                                                     <li>
963                                                         <a href="#" data-submit="batch_item_deletion" data-toggle="tooltip" data-placement="right" title="Send visible items to batch item deletion" class="batch_op send_to_item_del">Batch item deletion</a>
964                                                     </li>
965                                                 [% END %]
966                                                 [% IF header_ro.cell == 'cardnumber' || header_types.item( header_ro.cell ) == 'cardnumber' %]
967                                                     [% IF ( batch_biblionumbers || batch_itemnumbers ) %]
968                                                         <li role="separator" class="divider"></li>
969                                                     [% END %]
970                                                     <li class="dropdown-header">Patron records</li>
971                                                     <li>
972                                                         <a href="#" data-submit="batch_patron_modification" data-toggle="tooltip" data-placement="right" title="Send visible results to batch patron modification" class="batch_op send_to_patron_mod">Batch patron modification</a>
973                                                     </li>
974                                                 [% END %]
975                                             [% END %]
976                                         </ul> <!-- /.dropdown-menu -->
977                                     </div> <!-- /.dropdown -->
978                                 </p>
979                             [% END # /IF ( batch_biblionumbers || batch_itemnumbers || batch_cardnumbers ) %]
980                         [% END # UNLESS ( errors ) %]
981                     [% END # IF ( execute ) %]
982
983                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="get" id="limitselect">
984                         <input type="hidden" name="phase" value="Run this report"/>
985                         <input type="hidden" name="reports" value="[% report_id | html %]"/>
986
987                         [% FOREACH p IN sql_params %]
988                             <input type="hidden" name="sql_params" value="[% p | html %]"/>
989                         [% END %]
990                         [% FOREACH n IN param_names %]
991                             <input type="hidden" name="param_name" value="[% n | html %]"/>
992                         [% END %]
993
994                         <label for="limit">Rows per page: </label>
995                         <select name="limit" id="limit">
996                             [% limits = [ 10, 20, 50, 100, 200, 300, 400, 500, 1000 ] %]
997                             [% FOREACH l IN limits %]
998                                 [% IF l == limit %]
999                                     <option value="[% l | html %]" selected="selected">[% l | html %]</option>
1000                                 [% ELSE %]
1001                                     <option value="[% l | html %]">[% l | html %]</option>
1002                                 [% END %]
1003                             [% END %]
1004                         </select>
1005                     </form> <!-- /#limitselect -->
1006
1007                     <div class="pages">[% pagination_bar | $raw %]</div>
1008                     [% UNLESS ( errors ) %]
1009                         <table>
1010                             <tr>
1011                                 [% FOREACH header_ro IN header_row %]
1012                                     <th>[% header_ro.cell | html %]</th>
1013                                 [% END %]
1014                             </tr>
1015                             [% FOREACH result IN results %]
1016                                 <tr>
1017                                     [% FOREACH cells IN result.cells %]
1018                                         <td>[% cells.cell | $raw %]</td>
1019                                     [% END %]
1020                                 </tr>
1021                             [% END %]
1022                         </table>
1023                     [% END %]
1024
1025                     [% INCLUDE 'chart.inc' %]
1026
1027                 [% END #/IF ( execute ) %]
1028
1029                 [% IF ( create ) %]
1030                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post" id="sql_report_form">
1031                         <fieldset class="rows">
1032                             <legend>Create report from SQL</legend>
1033                             <ol>
1034                                 <li>
1035                                     <label for="reportname" class="required">Report name:</label>
1036                                     [% IF ( reportname ) %]
1037                                         <input type="text" class="required" required="required" id="reportname" name="reportname" value="[% reportname | html %]" size="50"/>
1038                                     [% ELSE %]
1039                                         <input type="text" class="required" required="required" id="reportname" name="reportname" size="50" />
1040                                     [% END %]
1041                                     <span class="required">Required</span>
1042                                 </li>
1043                                 [% PROCESS group_and_subgroup_selection %]
1044
1045                                 [% IF (public) %]
1046                                     <li>
1047                                         <label for="public">Report is public:</label>
1048                                         <select id="public" name="public">
1049                                             <option value="0">No (default)</option>
1050                                             <option value="1" selected="selected">Yes</option>
1051                                         </select>
1052                                     </li>
1053                                 [% ELSE %]
1054                                     <li>
1055                                         <label for="public">Report is public:</label>
1056                                         <select id="public" name="public">
1057                                             <option value="0" selected="selected">No (default)</option>
1058                                             <option value="1">Yes</option>
1059                                         </select>
1060                                     </li>
1061                                 [% END # /IF (public) %]
1062
1063                                 [% IF (usecache) %]
1064                                     <li>
1065                                         <label for="cache_expiry">Cache expiry:</label>
1066                                         <input type="text" id="cache_expiry" name="cache_expiry" value="[% cache_expiry | html %]"></input>
1067                                         <select id="cache_expiry_units" name="cache_expiry_units">
1068                                             <option value="seconds" selected="selected">Seconds (default)</option>
1069                                             <option value="minutes">Minutes</option>
1070                                             <option value="hours">Hours</option>
1071                                             <option value="days">Days</option>
1072                                         </select>
1073                                     </li>
1074                                 [% END # /IF (usecache) %]
1075                                 <li>
1076                                     <label for="notes">Notes:</label>
1077                                     <textarea id="notes" name="notes" cols="50" rows="2">[% notes | html %]</textarea>
1078                                 </li>
1079                             </ol>
1080                         </fieldset> <!-- /.rows -->
1081
1082                         <fieldset class="rows">
1083                             <legend>SQL:</legend>
1084                             <div style="margin:1em;">
1085                                 <textarea id="sql" name="sql" class="required" required="required" cols="50" rows="10">[% sql | html %]</textarea>
1086                                 <span class="required">Required</span>
1087                             </div>
1088                         </fieldset>
1089
1090                         <fieldset class="action">
1091                             <input type="hidden" name="phase" value="Save Report" />
1092                             <input type="submit" name="submit" value="Save report" />
1093                             <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved" class="cancel">Cancel</a>
1094                         </fieldset>
1095                     </form>
1096                 [% END #/IF ( create ) %]
1097
1098                 [% IF saved_results %]
1099                     <h1>Saved report results</h1>
1100                     <h2>[% name | html %]</h2>
1101                     <p>[% notes | html %]</p>
1102                     <table>
1103                         [% FOREACH rows IN saved_results %]
1104                             <tr>
1105                                 [% FOREACH col IN rows %]
1106                                     <td>[% col | html %]</td>
1107                                 [% END %]
1108                             </tr>
1109                         [% END %]
1110                     </table>
1111                 [% END # /IF saved_results %]
1112
1113                 [% IF ( showsql ) %]
1114                     <fieldset class="rows">
1115                         <legend>[% reportname | html %]</legend>
1116                         <ol>
1117                             [% IF ( notes ) %]
1118                                 <li>
1119                                     <span class="label">Notes:</span>
1120                                     [% notes | html %]
1121                                 </li>
1122                             [% ELSE %]
1123                             [% END %]
1124                             <li>
1125                                 <textarea id="sql">[% sql | html %]</textarea>
1126                             </li>
1127                         </ol>
1128                     </fieldset>
1129                 [% END # /IF ( showsql ) %]
1130
1131                 [% IF ( save_successful ) %]
1132                     [% UNLESS ( errors ) %]
1133                         </br>
1134                         <div id="report_updated">
1135                             <div class="dialog message">
1136                                 <p>Your report "[% reportname | html %]" has been saved</p>
1137                             </div>
1138                         </div>
1139                     [% END %]
1140                 [% END %]
1141
1142                 [% IF ( editsql ) %]
1143                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post" id="sql_report_form">
1144                         <input type="hidden" name="phase" value="Update SQL" />
1145                         <input type="hidden" name="id" value="[% id | html %]"/>
1146                         <fieldset class="rows">
1147                             <legend>Edit SQL report</legend>
1148                             <ol>
1149                                 <li>
1150                                     <label for="reportname" class="required">Report name: </label>
1151                                     <input type="text" id="reportname" name="reportname" value="[% reportname | html %]" size="50" class="required" required="required" />
1152                                     <span class="required">Required</span>
1153                                 </li>
1154                                 [% PROCESS group_and_subgroup_selection %]
1155                                 [% IF (public) %]
1156                                     <li>
1157                                         <label for="public">Report is public:</label>
1158                                         <select id="public" name="public">
1159                                             <option value="0">No (default)</option>
1160                                             <option value="1" selected="selected">Yes</option>
1161                                         </select>
1162                                     </li>
1163                                 [% ELSE %]
1164                                     <li>
1165                                         <label for="public">Report is public:</label>
1166                                         <select id="public" name="public">
1167                                             <option value="0" selected="selected">No (default)</option>
1168                                             <option value="1">Yes</option>
1169                                         </select>
1170                                     </li>
1171                                 [% END # /IF (public) %]
1172
1173                                 [% IF (usecache) %]
1174                                     <li>
1175                                         <label for="cache_expiry">Cache expiry:</label>
1176                                         <input type="text" id="cache_expiry" name="cache_expiry" value="[% cache_expiry | html %]" />
1177                                         <select id="cache_expiry_units" name="cache_expiry_units">
1178                                             <option value="seconds">Seconds (default)</option>
1179                                             <option value="minutes">Minutes</option>
1180                                             <option value="hours">Hours</option>
1181                                             <option value="days">Days</option>
1182                                         </select>
1183                                     </li>
1184                                 [% END %]
1185                                 <li>
1186                                     <label for="notes">Notes:</label>
1187                                     <textarea id="notes" name="notes" cols="50" rows="2">[% notes | html %]</textarea>
1188                                 </li>
1189                             </ol>
1190                         </fieldset> <!-- /.rows -->
1191
1192                         <fieldset class="rows">
1193                             <legend>SQL:</legend>
1194                             <div style="margin:1em;">
1195                                 <textarea id="sql" name="sql" class="required" required="required" cols="50" rows="10">[% sql | html %]</textarea>
1196                                 <span class="required">Required</span>
1197                             </div>
1198                         </fieldset>
1199
1200                         <fieldset class="action">
1201                             <input type="submit" name="submit" value="Update SQL" />
1202                             <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved" class="cancel">Cancel</a>
1203                         </fieldset>
1204                     </form>
1205                 [% END # /IF ( editsql ) %]
1206
1207                 [% IF ( errors ) %]
1208                     <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
1209                         <div class="dialog alert">
1210                             <strong>The following error was encountered:</strong><br />
1211                             [% FOREACH error IN errors %]
1212                                 [% IF ( error.sqlerr ) %]
1213                                     This report contains the SQL keyword <strong>[% error.sqlerr | html %]</strong>.<br />
1214                                     Use of this keyword is not allowed in Koha reports due to security and data integrity risks. Only SELECT queries are allowed.<br />
1215                                     Please return to the &quot;Saved Reports&quot; screen and delete this report or retry creating a new one.
1216                                 [% ELSIF ( error.queryerr ) %]
1217                                     The database returned the following error: <br />
1218                                     [% error.queryerr | html %]<br />Please check the log for further details.
1219                                 [% ELSIF ( error.cache_expiry ) %]
1220                                     Please select a cache expiry less than 30 days.
1221                                 [% ELSE %]
1222                                 [% END %]
1223                                 <div id="onerror_actions">
1224                                     <a href="#" class="button goback">Return to previous page</a>
1225                                 </div>
1226                             [% END %]
1227                         </div>
1228                         <fieldset class="action">
1229                             <input type="hidden" name="phase" value="Use saved" />
1230                             <input type="submit" name="submit" value="Saved reports" />
1231                         </fieldset>
1232                     </form>
1233                 [% END # /IF ( errors ) %]
1234
1235             </main>
1236         </div> <!-- /.col-sm-10.col-sm-push-2 -->
1237
1238         <div class="col-sm-2 col-sm-pull-10">
1239             <aside>
1240                 [% IF ( saved1 ) %]
1241                     <div id="saved-reports-filter">
1242                         <form action="/cgi-bin/koha/reports/guided_reports.pl" method="get">
1243                             <input type="hidden" name="phase" value="Use saved" />
1244                             <input type="hidden" name="filter_set" value="1" />
1245                             <fieldset class="brief">
1246                                 <h3>Filter</h3>
1247                                 <ol>
1248                                     <li>
1249                                         <label for="filter_date">Date:</label>
1250                                         <input type="text" id="filter_date" name="filter_date" size="10" value="[% filters.date | html %]" class="datepicker" />
1251                                         <div class="hint">[% INCLUDE 'date-format.inc' %]</div>
1252                                     </li>
1253                                     <li>
1254                                         <label for="filter_author">Author:</label>
1255                                         <input type="text" id="filter_author" name="filter_author" value="[% filters.author | html %]" size="16" />
1256                                     </li>
1257                                     <li>
1258                                         <label for="filter_keyword">Keyword:</label>
1259                                         <input type="text" id="filter_keyword" name="filter_keyword" value="[% filters.keyword | html %]" size="16" />
1260                                     </li>
1261                                 </ol>
1262                             </fieldset> <!-- /.brief -->
1263                             <fieldset class="action">
1264                                 <input type="submit" value="Apply filter" />
1265                                 <a id="resetReportsFilter" href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved&clear_filters=1">Clear</a>
1266                             </fieldset>
1267                         </form>
1268                     </div> <!-- /#saved-reports-filter -->
1269                 [% END %]
1270                 [% INCLUDE 'guided-reports-view.inc' %]
1271             </aside>
1272         </div> <!-- /.col-sm-2.col-sm-pull-10 -->
1273      </div> <!-- /.row -->
1274
1275 [% MACRO jsinclude BLOCK %]
1276     [% Asset.js("js/charts.js") | $raw %]
1277     [% Asset.js("lib/d3c3/d3.min.js") | $raw %]
1278     [% Asset.js("lib/d3c3/c3.min.js") | $raw %]
1279     [% INCLUDE 'calendar.inc' %]
1280     [% INCLUDE 'datatables.inc' %]
1281     [% IF ( saved1 ) %]
1282         [% INCLUDE 'columns_settings.inc' %]
1283     [% END %]
1284     [% Asset.js( "lib/codemirror/codemirror.min.js" ) | $raw %]
1285     [% Asset.js( "lib/codemirror/sql.min.js" ) | $raw %]
1286     [% Asset.js( "js/mana.js" ) | $raw %]
1287     <script>
1288
1289         function hide_bar_element() {
1290             $('#chart-column-horizontal').hide()
1291             $('.chart-column-group').each(function( index ) {
1292                 $( this ).hide();
1293             });
1294             $('.chart-column-line').each(function( index ) {
1295                 $( this ).hide()
1296             });
1297         }
1298
1299         function show_bar_element() {
1300             $('#chart-column-horizontal').show()
1301             $('.chart-column-group').each(function( index ) {
1302                 $( this ).show()
1303             });
1304             $('.chart-column-line').each(function( index ) {
1305                 $( this ).show()
1306             });
1307         }
1308
1309         function removeColumn(id) {
1310             $('#'+id).remove();
1311
1312             if ( $('.chart-column-conf').length == 1 ) {
1313                 $('.chart-column-delete').remove();
1314             }
1315         }
1316
1317         var MSG_CONFIRM_DELETE = _("Are you sure you want to delete this report? This cannot be undone.");
1318         var group_subgroups = {};
1319         [% FOREACH group IN groups_with_subgroups %]
1320             var gid = "[% group.id | html %]"
1321             group_subgroups[gid] = new Array();
1322             [% FOREACH subgroup IN group.subgroups %]
1323                 var sgid = "[% subgroup.id | html %]";
1324                 var sgname = "[% subgroup.name | html %]";
1325                 group_subgroups[gid].push([sgid, sgname]);
1326             [% END %]
1327         [% END %]
1328
1329         [% IF ( create || editsql || save ) %]
1330             var editor = CodeMirror.fromTextArea(sql, {
1331                 lineNumbers: true,
1332                 mode: "text/x-sql",
1333                 lineWrapping: true,
1334                 smartIndent: false
1335             });
1336
1337             // https://stackoverflow.com/questions/2086287/how-to-clear-jquery-validation-error-messages#answer-16025232
1338             function clearValidation( formElement ){
1339                 // formElement should be a jQuery object
1340                 var validator = formElement.validate();
1341                 // Iterate through named elements inside of the form, and mark them as error free
1342                 $('[name]',formElement).each(function(){
1343                     validator.successList.push(this);//mark as error free
1344                     validator.showErrors();//remove error messages if present
1345                 });
1346                 validator.resetForm();//remove error class on name elements and clear history
1347                 validator.reset();//remove all error and success data
1348             }
1349         [% END %]
1350
1351         [% IF ( showsql ) %]
1352             var editor = CodeMirror.fromTextArea(sql, {
1353                 lineNumbers: false,
1354                 mode: "text/x-sql",
1355                 lineWrapping: true,
1356                 readOnly: true
1357             });
1358         [% END %]
1359
1360         function load_group_subgroups () {
1361             var group = $("#group_select").val();
1362             var sg = $("#subgroup");
1363             $(sg).find('option[value!=""]').each(function() {
1364                 $(this).remove();
1365             });
1366             $(sg).hide();
1367             if (group) {
1368                 var select = $(sg).find('select')[0];
1369                 $.each( group_subgroups[group], function(index, value) {
1370                     $('<option value="' + value[0] + '">' + value[1] + '</option>').appendTo(select);
1371                 } );
1372                 $("#subgroup, #subgroup *").show();
1373             }
1374         }
1375
1376         $(document).ready(function(){
1377
1378             var activeTab = localStorage.getItem("sql_reports_activetab");
1379
1380             $("body").on('click',".fetch_chart_data",function(){
1381                 if( [% unlimited_total || 0 | $raw %] > 1000 ){
1382                     if( confirm("Fetching full chart data for reports with many rows can cause performance issues. Are you sure you with to chart this report?") ){
1383                         return true;
1384                     } else {
1385                         return false;
1386                     }
1387                 }
1388             });
1389
1390             var showsql;
1391             hide_bar_element();
1392
1393             if ( $('.chart-column-conf').length == 1 ) {
1394                 $('.chart-column-delete').remove();
1395             }
1396
1397             $(".chart-column-delete").on('click', function(e){
1398                 e.preventDefault();
1399                 removeColumn('column_' + $(this).data('column'));
1400             })
1401
1402             $('#download-chart').click(function() {
1403                 var svg = '<svg>' + $('#chart svg').html() + '</svg>';
1404                 this.href = 'data:application/octet-stream;base64,' + btoa(svg);
1405                 this.setAttribute('download', 'chart.svg');
1406             });
1407
1408             $('#chart-type').change(function() {
1409                 if ($(this).val() == 'bar') {
1410                     show_bar_element();
1411                 }
1412                 else {
1413                     hide_bar_element();
1414                 }
1415             });
1416
1417             $('#download-chart').hide();
1418             var chart;
1419
1420             [% IF results && !errors %]
1421                 $('#draw-chart').click(function() {
1422
1423                     var x_elements = $('select[name="x"]').val();
1424                     var y_elements = [];
1425                     var groups = [];
1426                     var lines = [];
1427                     var options = {};
1428
1429                     headers = [% header_row.json | $raw %];
1430
1431                     var results;
1432                     [% IF allresults.size %]
1433                         if ($('input[name="chart-include-all"]').prop('checked')) {
1434                             results = [% allresults.json | $raw %]
1435                         }
1436                         else {
1437                             results = [% results.json | $raw %]
1438                         }
1439                     [% ELSE %]
1440                         results = [% results.json | $raw %];
1441                     [% END %]
1442
1443                     if ($('input[name="chart-exclude-last"]').prop('checked')) {
1444                         results.splice(-1, 1);
1445                     }
1446
1447                     $('select[name="y"]').each(function( index ) {
1448                         y_elements.push( $(this).val() );
1449                     });
1450                     $('select[name="group"]').each(function( index ) {
1451                         groups.push( $(this).val() );
1452                     });
1453                     $('.column-line').each(function( index ) {
1454                         if ($(this).prop('checked')) {
1455                             lines.push( $(this).attr('name') );
1456                         }
1457                     });
1458
1459                     // Remove deleted columns from headers and results.
1460                     var deleted_indexes = [];
1461                     var kept_headers = [];
1462                     $.each(headers, function(index, value) {
1463                         if (value.cell != x_elements && $.inArray(value.cell, y_elements) === -1) {
1464                             // This header is neither a x element nor in y elements. Don't need it.
1465                             deleted_indexes.push(index);
1466                         }
1467                         else {
1468                             kept_headers.push({cell: value.cell});
1469                         }
1470                     });
1471
1472                     // Remove coresponding cells.
1473                     var kept_results = [];
1474                     $.each(results, function(index, value) {
1475                         var line = {};
1476                         line['cells'] = [];
1477                         $.each(value.cells, function(i, val) {
1478                             if ($.inArray(i, deleted_indexes) === -1) {
1479                                 line['cells'].push({cell: val.cell});
1480                             }
1481                         });
1482                         kept_results.push(line);
1483                     });
1484
1485                     options.type = $('select[name="chart-type"]').val();
1486                     options.horizontal = $('input[name="column-horizontal"]').prop('checked');
1487                     options.lines = lines;
1488
1489                     chart = create_chart(kept_headers, kept_results, x_elements, y_elements, groups, options);
1490                     $("#download-chart,#toggle_chart_settings_hid,#chart").show();
1491                     $("#toggle_chart_settings_vis").hide();
1492                     $("#chartModal").modal("hide");
1493                 });
1494             [% END %]
1495             [% IF ( create ) %]
1496                 load_group_subgroups();
1497             [% END %]
1498
1499             $('[data-toggle="tooltip"]').tooltip();
1500             var columns_settings = [% TablesSettings.GetColumns( 'reports', 'saved-sql', 'table_reports', 'json' ) | $raw %];
1501
1502             $('#limit').change(function() {
1503                 $('#limitselect').submit();
1504             });
1505
1506             $(document).click(function() {
1507                 $('#report_updated').hide();
1508             });
1509
1510             $(".goback").on("click",function(e){
1511                 e.preventDefault();
1512                 window.history.back();
1513             });
1514
1515             $("body").on("click", ".mana_search_button", function(){
1516                 $("#mana-loading").show();
1517                 mana_search($("#mana_search_field").val());
1518             });
1519
1520             $(".ShareButton").on("click", function(){
1521                 $("#note-error").hide();
1522                 if($(this).closest("tr").find(".report_notes").text().length < 20 || $(this).closest("tr").find(".report_name").text().length < 20){
1523                     $(".shared_infos").hide();
1524                     $("#note-error").show();
1525                 }
1526                 else{
1527                     $("#reportid").val($(this).closest("tr").find(".report_id").text());
1528                     $("#shared_id").html($(this).closest("tr").find(".report_id").text());
1529                     $("#shared_name").html($(this).closest("tr").find(".report_name").text());
1530                     $("#shared_sql").html($(this).closest("tr").find(".report_sql").val());
1531                     $("#shared_type").html($(this).closest("tr").find(".report_type").text());
1532                     $("#shared_group").html($(this).closest("tr").find(".report_group").text());
1533                     $("#shared_notes").html($(this).closest("tr").find(".report_notes").text());
1534                 }
1535             });
1536
1537             $("#ManaCloseButton").on("click", function() {
1538                 $(".shared_infos").show();
1539             });
1540
1541             $("#addColumn").on("click",function(){
1542                 addColumn();
1543             });
1544
1545             $("#delColumn").on("click",function(){
1546                 delColumn();
1547             });
1548
1549             [% IF (saved1) %]
1550                 var rtable = KohaTable("table_reports", {
1551                     'iDisplayLength': [% Koha.Preference('NumSavedReports') | html %],
1552                     'bAutoWidth': false,
1553                     'sPaginationType': 'full',
1554                     'aaSorting': [[ 1, "asc" ]],
1555                     'aoColumnDefs': [
1556                         { 'bSearchable': false, 'aTargets': [3] },
1557                         { "aTargets": [ 1, 2 ], "sType": "natural"  },
1558                         { "visible": false, "aTargets" : [ "hidden" ] }
1559                     ],
1560                     'oLanguage': {
1561                         'sZeroRecords': _("No matching reports found")
1562                     },
1563                 }, columns_settings);
1564
1565                 var rtabs = $("#tabs").tabs({
1566                     create: function( e, ui ){
1567                         tabsInit( ui, rtable );
1568                     },
1569                     activate: function( e, ui ){
1570                         tabsInit( ui, rtable );
1571                     }
1572                 });
1573                 if( activeTab ){
1574                     $("#tabs").tabs("option","active", activeTab );
1575                 }
1576                 $("#subgroup_filter_block").hide();
1577
1578                 $("#subgroup_filter").change(function() {
1579                     var selected = $(this).find('option:selected');
1580                     var sg_id = $(selected).val();
1581                     var sg_name = $(selected).text();
1582                     if (sg_id.length > 0) {
1583                         rtable.fnFilter('^' + sg_name + '$', 5, true, true, true, false);
1584                         rtable.fnSetColumnVis(5, false);
1585                     } else {
1586                         rtable.fnFilter('', 5);
1587                         rtable.fnSetColumnVis(5, true);
1588                     }
1589                 });
1590
1591                 $("#reports_form").submit(function(){
1592                     var checkedItems = $("input[name=ids]:checked");
1593                     if ($(checkedItems).size() == 0) {
1594                         alert(_("You must select one or more reports to delete"));
1595                         return false;
1596                     }
1597                     $(checkedItems).parents('tr').addClass("warn");
1598                     if( confirm(_("Are you sure you want to delete the selected reports?")) ) {
1599                         return true;
1600                     } else {
1601                         $(checkedItems).parents('tr').removeClass("warn");
1602                         return false;
1603                     }
1604                 });
1605
1606                 $("body").on("click", ".update_sql", function(e){
1607                     e.preventDefault();
1608                     var ltitle = $(this).text();
1609                     var report_id = $(this).data("report_id");
1610                     var page = $(this).attr("href");
1611                     $("#update_sql .modal-body").load(page + " div", function(){
1612                         var diff1 = $("#col1 .show_sql").text();
1613                         var diff2 = $("#col2 .show_sql").text();
1614                         var diffs = diffString( escape(diff1), escape(diff2) );
1615                         $("#col1 .show_sql,#col2 .show_sql").html(diffs);
1616                     });
1617                     $('#update_sql').modal('show');
1618                     $("#update_sql_button").attr("href", "/cgi-bin/koha/reports/guided_reports.pl?phase=Use saved&op=convert&report_id=" + report_id);
1619                 });
1620
1621                 $("#update_sql").on("hidden.bs.modal", function(){
1622                     $("#update_sql_label").html("");
1623                     $("#update_sql .modal-body").html("<div id=\"loading\"><img src=\"[% interface | html %]/[% theme | html %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
1624                 });
1625             [% END %]
1626
1627             [% IF ( showsql ) %]
1628                 $("#sql").focus(function() {
1629                     $(this).select();
1630                 });
1631             [% END %]
1632
1633             $(".toggle_sql").click(function(){
1634                 $("#sql_output").toggle();
1635                 $("#toggle_sql_hid").toggle();
1636                 $("#toggle_sql_vis").toggle();
1637                 if( !showsql ){
1638                     showsql = CodeMirror.fromTextArea(sql, {
1639                         lineNumbers: false,
1640                         mode: "text/x-sql",
1641                         lineWrapping: true,
1642                         readOnly: true
1643                     });
1644                 }
1645             });
1646
1647             $(".toggle_chart_settings").click(function(){
1648                 $("#chart, #toggle_chart_settings_hid, #toggle_chart_settings_vis").toggle();
1649             });
1650
1651             $("#table_reports").delegate(".confirmdelete", 'click', function(){
1652                 $(this).parents('tr').attr("class","warn");
1653                 if(confirm(_("Are you sure you want to delete this saved report?"))){
1654                     return true;
1655                 } else {
1656                     $(this).parents('tr').attr("class","");
1657                     return false;
1658                 }
1659             });
1660
1661             [% IF (create || editsql || save) %]
1662
1663                 var validated_form = $("#sql_report_form").validate({
1664                     reportname: "required",
1665                     group_input: {
1666                         required: {
1667                             depends: function(element) {
1668                                 return $("#create_group").prop("checked") && $("#groupdesc_input").val() != '';
1669                             }
1670                         }
1671                     },
1672                     groupdesc_input: {
1673                         required: {
1674                             depends: function(element) {
1675                                 return $("#create_group").prop("checked") && $("#group_input").val() != '';
1676                             }
1677                         }
1678                     }
1679                 });
1680
1681                 $("#select_group").change(function() {
1682                     if($(this).prop('checked')) {
1683                         $("#group_input").attr("class","").prop('disabled', true).prop("required", false);
1684                         $("#groupdesc_input").attr("class","").prop('disabled', true).prop("required", false);
1685                         $("#group_select").prop('disabled', false);
1686                         clearValidation( $("#sql_report_form") );
1687                         if ($("#group_select").val().length > 0) {
1688                             $("#select_subgroup").prop('checked', true);
1689                             $("#select_subgroup").change();
1690                             $("#subgroup, #subgroup *").show();
1691                         } else {
1692                             $("#subgroup").hide();
1693                         }
1694                     }
1695                 });
1696                 $("#create_group").change(function() {
1697                     if($(this).prop('checked')) {
1698                         $("#group_input").prop('disabled', false).prop("required", true );
1699                         $("#groupdesc_input").prop('disabled', false).prop("required", true );
1700                         $("#group_select").prop('disabled', true);
1701                         // $("#create_subgroup").prop('checked', true).change();
1702                         $("#subgroup_select").hide();
1703                         $("#subgroup input[type='radio']").hide();
1704                         $("#subgroup label[for]").hide();
1705                         $("#subgroup_input").prop("required", false ).prop("disabled", false).show();
1706                         $("#subgroupdesc_input").prop("required", false ).prop("disabled", false).show();
1707                         $("#subgroup").show();
1708                         // Add validation rules for fields which were previously hidden
1709                         $("#subgroup_input").rules("add", {
1710                             required: {
1711                                 depends: function(element) {
1712                                     return $("#create_group").prop("checked") &&  $("#subgroupdesc_input").val() != '';
1713                                 }
1714                             }
1715                         });
1716                         $("#subgroupdesc_input").rules("add", {
1717                             required: {
1718                                 depends: function(element) {
1719                                     return $("#create_group").prop("checked") &&  $("#subgroup_input").val() != '';
1720                                 }
1721                             }
1722                         });
1723                     }
1724                 });
1725                 $("#select_subgroup").change(function() {
1726                     if($(this).prop('checked')) {
1727                         $("#subgroup_select").prop('disabled', false);
1728                         $("#subgroup_input").prop('disabled', true).prop("required", false );
1729                         $("#subgroupdesc_input").prop('disabled', true).prop("required", false );
1730                         clearValidation( $("#sql_report_form") );
1731                     }
1732                 });
1733                 $("#create_subgroup").change(function() {
1734                     if($(this).prop('checked')) {
1735                         $("#subgroup_input").prop('disabled', false).prop("required", true );
1736                         $("#subgroupdesc_input").prop('disabled', false).prop("required", true );
1737                         $("#subgroup_select").val("").prop('disabled', true);
1738                     }
1739                 });
1740                 $("#select_group").change();
1741                 $("#select_subgroup").change();
1742                 $("#group_select").on("change",function(){
1743                     load_group_subgroups();
1744                 });
1745             [% END %]
1746
1747             $(".delete").on("click",function(){
1748                 return confirmDelete(MSG_CONFIRM_DELETE);
1749             });
1750
1751             $("#mana_search_form").submit(function(e){
1752                 e.preventDefault();
1753             });
1754
1755             $("#column_submit").submit(function() {
1756                 if ($("#selectedColumns option").size() < 1) {
1757                     alert(_("No columns selected!"));
1758                     return false;
1759                 }
1760                 $("#selectedColumns option").attr("selected", "selected");  // Select everything still in #selectedColumns
1761                 return true;
1762             });
1763
1764             // Mana KB
1765             $("body").on("click", ".mana-use", function(e) {
1766                 e.preventDefault();
1767                 $(this).find("i").attr("class","fa fa-refresh fa-spin");
1768                 mana_use( $(this).data("report_id") );
1769             });
1770
1771             $("#mana_search_result").on("hide.bs.modal", function(){
1772                 $("#mana_result_content").html("");
1773                 $("#mana_search_field").val("");
1774             });
1775
1776             $(".batch_op").on("click", function(e){
1777                 e.preventDefault();
1778                 var target_form = $(this).data("submit");
1779                 $("#" + target_form ).submit();
1780             });
1781
1782             $("#batch_add_to_list").on("submit", function(e){
1783                 e.preventDefault();
1784                 addToList();
1785             });
1786         });
1787
1788         function tabsInit( ui, rtable ){
1789             var thisTab = ui.newTab ? ui.newTab : ui.tab;
1790             var activeTab = thisTab.index();
1791             localStorage.setItem("sql_reports_activetab", activeTab );
1792
1793             $("#subgroup_filter option").each(function() {
1794                 if($(this).val().length > 0) {
1795                     $(this).remove();
1796                 }
1797             });
1798             rtable.fnFilter('', 4);
1799             rtable.fnFilter('', 5);
1800             rtable.fnSetColumnVis(4, true);
1801             rtable.fnSetColumnVis(5, true);
1802
1803             var g_id = $(ui.newTab).children().attr('id');
1804             var g_name = $(ui.newTab).text();
1805             if ( g_name == _("All") ) {
1806                 g_id = "";
1807                 g_name = "";
1808             }
1809
1810             if (g_id && g_id.length > 0) {
1811                 rtable.fnFilter('^' + g_name + '$', 4, true, true, true, false);
1812                 rtable.fnSetColumnVis(4, false);
1813                 for(var i in group_subgroups[g_id]) {
1814                     $("#subgroup_filter").append(
1815                         '<option value="' + group_subgroups[g_id][i][0] + '">'
1816                         + group_subgroups[g_id][i][1] + '</option>'
1817                     );
1818                 }
1819                 $("#subgroup_filter_block").show();
1820             } else {
1821                 $("#subgroup_filter_block").hide();
1822             }
1823         }
1824
1825         function addColumn() {
1826             $("#availableColumns option:selected").clone().appendTo("#selectedColumns").attr("selected", "selected");
1827         }
1828         function delColumn() {
1829             $("#selectedColumns option:selected").remove();
1830         }
1831
1832         // Mana KB
1833         function mana_use( mana_id ){
1834             $.ajax( {
1835                 type:"POST",
1836                 url: "/cgi-bin/koha/svc/mana/use",
1837                 data: {id:mana_id, resource: 'report', saveinbase: 1},
1838                 dataType: "json",
1839             })
1840             .done( function (result){
1841                 if ( result.errmsg ){
1842                     alert( result.errmsg );
1843                 }
1844                 else{
1845                     window.location = ("/cgi-bin/koha/reports/guided_reports.pl?reports=").concat(result.id).concat("&phase=Show%20SQL&mana_success=1");
1846                 }
1847             })
1848             .fail(function( error ) {
1849                 $(".mana_use_status").hide();
1850                 $("#mana_use_errortext").html( error.status + " " + error.statusText );
1851                 $("#mana_use_failed").show();
1852                 $(".mana-use i").attr("class","fa fa-download");
1853             });
1854         }
1855
1856         function mana_search( textquery ){
1857             $(".mana_search_status").hide();
1858             $("#mana_result_content").load("/cgi-bin/koha/svc/mana/search #mana_results", { resource: 'report', id: textquery, usecomments: 1 }, function( response, status, xhr ) {
1859
1860                     if ( status == "error" ) {
1861                         $("#mana_search_errortext").html( xhr.status + " " + xhr.statusText );
1862                         $("#mana_search_failed").show();
1863                         $("#mana-loading").hide();
1864                     } else {
1865                         $(".mana_search_status").hide();
1866                         $("#mana_search_result_label").text(_("Results from Mana Knowledge Base"));
1867                         $("#mana-loading").hide();
1868                         $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults,{
1869                             "sPaginationType":"full",
1870                             "autoWidth": false,
1871                             "columnDefs": [
1872                                 { "width": "35%", "targets": 1 }
1873                             ],
1874                             "aoColumnDefs": [
1875                                 { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
1876                                 { "sType": "title-string", "aTargets" : [ "title-string" ] },
1877                                 { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
1878                             ]
1879                         }));
1880
1881                         $(".showbutton").on("click", function(e){
1882                             e.preventDefault();
1883                             $(this).parent().hide();
1884                             $(this).parent().next().show();
1885                         });
1886
1887                         $(".hidebutton").on("click", function(e){
1888                             e.preventDefault();
1889                             $(this).parent().hide();
1890                             $(this).parent().prev().show();
1891                         });
1892
1893                         if($("td.dataTables_empty").length == 0){
1894                             $("#mana_search_message").show();
1895                         }
1896                     }
1897                 });
1898         }
1899
1900         function addToList() {
1901             var biblionumbers = [];
1902             $(".bib_to_list").each(function() {
1903                 var biblionumber = Number( $(this).val() );
1904                 if( biblionumbers.indexOf( biblionumber ) < 0 ){
1905                     biblionumbers.push( biblionumber );
1906                 }
1907             });
1908             bibs = biblionumbers.join("/");
1909             var url = "/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?biblionumbers=" + bibs;
1910             window.open(url, 'Add_to_virtualshelf', 'width=500, height=400, toolbar=false, scrollbars=yes');
1911             return false;
1912         }
1913     </script>
1914 [% END %]
1915
1916 [% INCLUDE 'intranet-bottom.inc' %]
1917
1918 [% BLOCK group_and_subgroup_selection %]
1919     <li id="group">
1920         <label>Report group:</label>
1921         <input type="radio" name="select_or_create_group"
1922             id="select_group" checked="checked" />
1923         <label for="select_group" style="float:none">Select</label>
1924         <select name="group" id="group_select">
1925             <option value="">(None)</option>
1926             [% FOREACH group IN groups_with_subgroups %]
1927                 [% IF (group.selected) %]
1928                     <option value="[% group.id | html %]" selected="selected">
1929                 [% ELSE %]
1930                     <option value="[% group.id | html %]">
1931                 [% END %]
1932                     [% group.name | html %]
1933                 </option>
1934             [% END %]
1935         </select>
1936         <input type="radio" name="select_or_create_group" id="create_group" />
1937         <label for="create_group" style="float:none">or create:</label>
1938         <input type="text" name="group" id="group_input" title="Group code" placeholder="Code" />
1939         <input type="text" name="groupdesc" id="groupdesc_input" title="Group name" placeholder="Name" />
1940     </li>
1941     <li id="subgroup">
1942         <label>Report subgroup:</label>
1943         <input type="radio" name="select_or_create_subgroup"
1944             id="select_subgroup" checked="checked" />
1945         <label for="select_subgroup" style="float:none">Select</label>
1946         <select name="subgroup" id="subgroup_select">
1947             <option value="">(None)</option>
1948             [% FOREACH group IN groups_with_subgroups %]
1949                 [% IF (group.selected) %]
1950                     [% FOREACH subgroup IN group.subgroups %]
1951                         [% IF (subgroup.selected) %]
1952                             <option value="[% subgroup.id | html %]" selected="selected">
1953                         [% ELSE %]
1954                             <option value="[% subgroup.id | html %]">
1955                         [% END %]
1956                             [% subgroup.name | html %]
1957                         </option>
1958                     [% END %]
1959                 [% END %]
1960             [% END %]
1961         </select>
1962         <input type="radio" name="select_or_create_subgroup"
1963             id="create_subgroup" />
1964         <label for="create_subgroup" style="float:none">or create</label>
1965         <input type="text" name="subgroup" id="subgroup_input" title="Subgroup code" placeholder="Code" />
1966         <input type="text" name="subgroupdesc" id="subgroupdesc_input" title="Subgroup name" placeholder="Name" />
1967     </li>
1968 [% END %]