Bug 20350: Add column configuration to table of saved reports
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / reports / guided_reports_start.tt
index 0dd6c5c..7f5d368 100644 (file)
@@ -1,5 +1,7 @@
 [% USE KohaDates %]
-
+[% USE Koha %]
+[% USE ColumnsSettings %]
+[% SET footerjs = 1 %]
 [%- BLOCK area_name -%]
     [%- SWITCH area -%]
         [%- CASE 'CIRC' -%]Circulation
 [%- END -%]</title>
 
 [% INCLUDE 'doc-head-close.inc' %]
-[% INCLUDE 'calendar.inc' %]
 <style type="text/css">
     #sql { width: 90%; height: 9em;}
+    #update_sql .modal-dialog { width: 80%; }
+    ins { background-color: #e6ffe6; }
+    del { background-color: #ffe6e6; }
+    #col1, #col2 { width:45%; float:left; }
+    #col1 ins, #col2 del { display: none; }
+    .show_sql { font-family: monospace; }
+    .send_to_item_mod {
+        background-color: #EBF3FF;
+        border: 1px solid #88b0e8;
+        border-radius: 5px;
+        display: inline-block;
+        font-size: 75%;
+        margin: 3px 5px;
+        padding: 3px 5px;
+        white-space: nowrap;
+    }
 </style>
 [% IF ( saved1 ) %]
-<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
-[% INCLUDE 'datatables.inc' %]
-[% END %]
-
-<script type="text/javascript">
-//<![CDATA[
-var group_subgroups = {};
-[% FOREACH group IN groups_with_subgroups %]
-    var gid = "[% group.id %]"
-    group_subgroups[gid] = new Array();
-    [% FOREACH subgroup IN group.subgroups %]
-        var sgid = "[% subgroup.id %]";
-        var sgname = "[% subgroup.name %]";
-        group_subgroups[gid].push([sgid, sgname]);
-    [% END %]
-[% END %]
-
-function load_group_subgroups () {
-    var group = $("#group_select").val();
-    var sg = $("#subgroup");
-    $(sg).find('option[value!=""]').each(function() {
-        $(this).remove();
-    });
-    $(sg).hide();
-    if (group) {
-        var select = $(sg).find('select')[0];
-        $.each( group_subgroups[group], function(index, value) {
-            $('<option value="' + value[0] + '">' + value[1] + '</option>').appendTo(select);
-        } );
-        $("#subgroup, #subgroup *").show();
-    }
-}
-
-$(document).ready(function(){
-
-[% IF (saved1) %]
-    var rtable = $("#table_reports").dataTable($.extend(true, {}, dataTablesDefaults, {
-        'bAutoWidth': false,
-        'sDom': 't<"bottom pager"ilpf>',
-        'sPaginationType': 'four_button',
-        'aaSorting': [[ 1, "asc" ]],
-        'aoColumnDefs': [
-            { 'bSortable': false, 'bSearchable':false, 'aTargets': [0, -1] },
-            { 'bSearchable': false, 'aTargets': [3] },
-            { "aTargets": [ 1, 2 ], "sType": "natural"  }
-        ],
-        "aoColumns": [
-            null,null,null,null,null,null,null,null,{ "sType": "title-string" },null,[% IF (usecache) %]null,[% END %]null,null
-        ],
-        'oLanguage': {
-            'sZeroRecords': _("No matching reports found")
-        }
-    }));
-
-    var rtabs = $("#tabs").tabs();
-    rtabs.on("tabsactivate", function(e, ui) {
-        $("#subgroup_filter option").each(function() {
-            if($(this).val().length > 0) {
-                $(this).remove();
-            }
-        });
-        rtable.fnFilter('', 4);
-        rtable.fnFilter('', 5);
-        rtable.fnSetColumnVis(4, true);
-        rtable.fnSetColumnVis(5, true);
-
-        var g_id = $(ui.newTab).children().attr('id');
-        var g_name = $(ui.newTab).text();
-        if ( g_name == _("All") ) {
-            g_id = "";
-            g_name = "";
-        }
-
-        if (g_id && g_id.length > 0) {
-            rtable.fnFilter('^' + g_name + '$', 4, true, true, true, false);
-            rtable.fnSetColumnVis(4, false);
-            for(var i in group_subgroups[g_id]) {
-                $("#subgroup_filter").append(
-                    '<option value="' + group_subgroups[g_id][i][0] + '">'
-                    + group_subgroups[g_id][i][1] + '</option>'
-                );
-            }
-            $("#subgroup_filter_block").show();
-        } else {
-            $("#subgroup_filter_block").hide();
-        }
-    });
-    $("#subgroup_filter_block").hide();
-
-    $("#subgroup_filter").change(function() {
-        var selected = $(this).find('option:selected');
-        var sg_id = $(selected).val();
-        var sg_name = $(selected).text();
-        if (sg_id.length > 0) {
-            rtable.fnFilter('^' + sg_name + '$', 5, true, true, true, false);
-            rtable.fnSetColumnVis(5, false);
-        } else {
-            rtable.fnFilter('', 5);
-            rtable.fnSetColumnVis(5, true);
-        }
-    });
-
-    $("#reports_form").submit(function(){
-        var checkedItems = $("input[name=ids]:checked");
-        if ($(checkedItems).size() == 0) {
-            alert(_("You must select one or more reports to delete"));
-            return false;
-        }
-        $(checkedItems).parents('tr').addClass("warn");
-        if( confirm(_("Are you sure you want to delete the selected reports?")) ) {
-            return true;
-        } else {
-            $(checkedItems).parents('tr').removeClass("warn");
-            return false;
-        }
-    });
-[% END %]
-
-[% IF ( showsql ) %]
-    $("#sql").focus(function() {
-        $(this).select();
-    });
+    <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables_[% KOHA_VERSION %].css" />
 [% END %]
-
-    $("#table_reports").delegate(".confirmdelete", 'click', function(){
-        $(this).parents('tr').attr("class","warn");
-        if(confirm(_("Are you sure you want to delete this saved report?"))){
-            return true;
-        } else {
-            $(this).parents('tr').attr("class","");
-            return false;
-        }
-    });
-
-[% IF (create || editsql || save) %]
-    $("#select_group").change(function() {
-        if($(this).attr('checked')) {
-            $("#group_input").attr('disabled', 'disabled');
-            $("#groupdesc_input").attr('disabled', 'disabled');
-            $("#group_select").attr('disabled', false);
-            if ($("#group_select").val().length > 0) {
-                $("#select_subgroup").attr('checked', 'checked');
-                $("#select_subgroup").change();
-                $("#subgroup, #subgroup *").show();
-            } else {
-                $("#subgroup").hide();
-            }
-        }
-    });
-    $("#create_group").change(function() {
-        if($(this).attr('checked')) {
-            $("#group_input").attr('disabled', false);
-            $("#groupdesc_input").attr('disabled', false);
-            $("#group_select").attr('disabled', 'disabled');
-            $("#create_subgroup").attr('checked', 'checked').change();
-            $("#subgroup_select").hide();
-            $("#subgroup input[type='radio']").hide();
-            $("#subgroup label[for]").hide();
-            $("#subgroup_input").show();
-            $("#subgroupdesc_input").show();
-            $("#subgroup").show();
-        }
-    });
-    $("#select_subgroup").change(function() {
-        if($(this).attr('checked')) {
-            $("#subgroup_select").attr('disabled', false);
-            $("#subgroup_input").attr('disabled', 'disabled');
-            $("#subgroupdesc_input").attr('disabled', 'disabled');
-        }
-    });
-    $("#create_subgroup").change(function() {
-        if($(this).attr('checked')) {
-            $("#subgroup_input").attr('disabled', false);
-            $("#subgroupdesc_input").attr('disabled', false);
-            $("#subgroup_select").attr('disabled', 'disabled');
-        }
-    });
-    $("#select_group").change();
-    $("#select_subgroup").change();
-[% END %]
-});
-//]]>
-</script>
 </head>
+
 <body id="rep_guided_reports_start" class="rep">
 [% INCLUDE 'header.inc' %]
 [% INCLUDE 'circ-search.inc' %]
@@ -241,6 +78,24 @@ $(document).ready(function(){
 [% END %]
 </div>
 
+<div id="update_sql" class="modal" tabindex="-1" role="dialog" aria-labelledby="update_sql_label" aria-hidden="true">
+    <div class="modal-dialog">
+    <div class="modal-content">
+    <div class="modal-header">
+        <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
+        <h3 id="update_sql_label">Update SQL</h3>
+    </div>
+    <div class="modal-body">
+        <div id="loading"> <img src="[% interface %]/[% theme %]/img/spinner-small.gif" alt="" /> Loading </div>
+    </div>
+    <div class="modal-footer">
+        <a href="#" class="btn btn-default" id="update_sql_button" role="button" data-toggle="modal">Update</a>
+        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
+    </div>
+    </div>
+    </div>
+</div>
+
 <div id="doc3" class="yui-t1">
 <div id="bd">
 <div id="yui-main">
@@ -280,6 +135,12 @@ canned reports and writing custom SQL reports.</p>
 </form>
 [% END %]
 
+[% IF report_converted %]
+    <div class="dialog message">
+        The report "[% report_converted %]" has been converted.
+    </div>
+[% END %]
+
 [% IF ( saved1 ) %]
 [% IF ( savedreports ) %]<h1>Saved reports</h1>
 
@@ -310,17 +171,25 @@ canned reports and writing custom SQL reports.</p>
                     <th>Subgroup</th>
                     <th>Notes</th>
                     <th>Author</th>
-                    <th>Creation date</th>
-                    <th>Public</th>
+                    <th class="title-string">Creation date</th>
+                    <th class="title-string">Last edit</th>
+                    <th class="title-string">Last run</th>
+                    <th class="report_public">Public</th>
+                    <th class="report_json_url">JSON URL</th>
                     [% IF (usecache) %] <th>Cache expiry (seconds)</th> [% END %]
                     <th>Saved results</th>
-                    <th>&nbsp;</th>
+                    [% IF has_obsolete_reports %]<th>Update</th>[% END %]
+                    <th>Actions</th>
                 </tr>
             </thead>
             <tbody>
                 [% FOREACH savedreport IN savedreports %]
                     [% UNLESS ( loop.odd ) %]<tr class="odd">[% ELSE %]<tr>[% END %]
-                        <td><input type="checkbox" name="ids" value="[% savedreport.id %]" /></td>
+                        <td>
+                            [% IF ( CAN_user_reports_delete_reports ) %] <!-- not break CSS -->
+                                <input type="checkbox" name="ids" value="[% savedreport.id %]" />
+                            [% END %]
+                        </td>
                         <td><label for="ids">[% savedreport.id %]</label></td>
                         <td>
                             [% IF ( savedreport.report_name ) %]
@@ -335,40 +204,69 @@ canned reports and writing custom SQL reports.</p>
                         <td>[% savedreport.notes %]</td>
                         <td>[% savedreport.borrowersurname %][% IF ( savedreport.borrowerfirstname ) %], [% savedreport.borrowerfirstname %][% END %] ([% savedreport.borrowernumber %])</td>
                         <td><span title="[% savedreport.date_created %]">[% savedreport.date_created | $KohaDates %]</span></td>
+                        <td><span title="[% savedreport.last_modified %]">[% savedreport.last_modified | $KohaDates with_hours => 1 %]</span></td>
+                        <td><span title="[% savedreport.last_run %]">[% savedreport.last_run | $KohaDates with_hours => 1 %]</span></td>
+                        <td class="report_public">
+                        [% IF (savedreport.public) %]
+                            Yes
+                        [% ELSE %]
+                            No
+                        [% END %]
+                        </td>
+                        <td class="report_json_url">
                         [% IF (savedreport.public) %]
-                        <td>Yes</td>
+                            <a href="[% OPACBaseURL %]/cgi-bin/koha/svc/report?id=[% savedreport.id | uri %]">[% OPACBaseURL %]/cgi-bin/koha/svc/report?id=[% savedreport.id | html %]</a>
                         [% ELSE %]
-                        <td>No</td>
+                            <a href="/cgi-bin/koha/svc/report?id=[% savedreport.id | uri %]">[% Koha.Preference('staffClientBaseURL') %]/cgi-bin/koha/svc/report?id=[% savedreport.id | html %]</a>
                         [% END %]
+                        </td>
                         [% IF (usecache) %] <td>[% savedreport.cache_expiry %]</td> [% END %]
-                        <td>[% IF ( savedreport.date_run ) %]<a href="/cgi-bin/koha/reports/guided_reports.pl?phase=retrieve%20results&amp;id=[% savedreport.id %]">[% savedreport.date_run %]</a>[% END %]
+                        <td>
+                            [% FOR result IN savedreport.results %]
+                                <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=retrieve%20results&amp;id=[% result.id %]">[% result.date_run %]</a>
+                                <br/>
+                            [% END %]
+                        </td>
+                        [% IF has_obsolete_reports %]
+                        <td>
+                            [% IF savedreport.seems_obsolete %]
+                                This report seems obsolete, it uses biblioitems.marcxml field.
+                                <a href="/cgi-bin/koha/svc/convert_report?report_id=[% savedreport.id %]" data-report_id="[% savedreport.id %]" class="update_sql btn btn-default btn-xs" title="Update SQL"><i class="fa fa-eye"></i> Update SQL</a>
+                            [% END %]
                         </td>
+                        [% END %]
                         <td>
-                            <div class="dropdown">
-                                <a class="btn btn-mini dropdown-toggle" id="reportactions[% savedreport.id %]" role="button" data-toggle="dropdown" href="#">
-                                   Actions <b class="caret"></b>
-                                </a>
-                                <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="reportactions[% savedreport.id %]">
-                                    <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Show%20SQL"><i class="fa fa-search"></i> Show</a></li>
-                                    [% IF ( CAN_user_reports_create_reports ) %]
-                                        <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Edit%20SQL"><i class="fa fa-pencil"></i> Edit</a></li>
-                                        <li><a title="Duplicate this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create report from SQL&amp;sql=[% savedreport.savedsql |uri %]&amp;reportname=[% savedreport.report_name |uri %]&amp;notes=[% savedreport.notes |uri %]"><i class="fa fa-copy"></i> Duplicate</a></li>
-                                    [% END %]
-                                    <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Run%20this%20report"><i class="fa fa-play"></i> Run</a></li>
-                                    <li><a href="/cgi-bin/koha/tools/scheduler.pl?id=[% savedreport.id %]"><i class="fa fa-clock-o"></i> Schedule</a></li>
-                                    [% IF ( CAN_user_reports_create_reports ) %]
-                                        <li><a class="confirmdelete" title="Delete this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Delete%20Saved"><i class="fa fa-remove"></i> Delete</a></li>
-                                    [% END %]
-                                </ul>
+                            <div class="dropup">
+                                <div class="btn-group">
+                                    [%# There should be no space between these two buttons, it would render badly %]
+                                    <a class="btn btn-default btn-xs" role="button"
+                                       href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Run%20this%20report"><i
+                                       class="fa fa-play"></i> Run</a><a
+                                       class="btn btn-default btn-xs dropdown-toggle" id="reportactions[% savedreport.id %]" role="button" data-toggle="dropdown"
+                                       href="#"><b class="caret"></b></a>
+                                    <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="reportactions[% savedreport.id %]">
+                                        <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Show%20SQL"><i class="fa fa-search"></i> Show</a></li>
+                                        [% IF ( CAN_user_reports_create_reports ) %]
+                                            <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Edit%20SQL"><i class="fa fa-pencil"></i> Edit</a></li>
+                                            <li><a title="Duplicate this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create report from SQL&amp;sql=[% savedreport.savedsql |uri %]&amp;reportname=[% savedreport.report_name |uri %]&amp;notes=[% savedreport.notes |uri %]"><i class="fa fa-copy"></i> Duplicate</a></li>
+                                        [% END %]
+                                        <li><a href="/cgi-bin/koha/tools/scheduler.pl?id=[% savedreport.id %]"><i class="fa fa-clock-o"></i> Schedule</a></li>
+                                        [% IF ( CAN_user_reports_delete_reports ) %]
+                                            <li><a class="confirmdelete" title="Delete this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id %]&amp;phase=Delete%20Saved"><i class="fa fa-trash"></i> Delete</a></li>
+                                        [% END %]
+                                    </ul>
+                                </div>
                             </div>
                         </td>
                     </tr>
                 [% END %]
             </tbody>
         </table>
+        [% IF ( CAN_user_reports_delete_reports ) %]
         <fieldset class="action">
             <input type="submit" value="Delete selected" />
         </fieldset>
+        [% END %]
     </form>
     </div>
 </div>
@@ -466,7 +364,7 @@ canned reports and writing custom SQL reports.</p>
 
 <fieldset class="action">
     <input type="hidden" name="phase" value="Choose this type" />
-    <input type="button" name="back" value="&lt;&lt; Back" onclick="javascript:history.back()" />
+    <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
     <input type="submit" name="submit" value="Next &gt;&gt;" />
 </fieldset>
 </form>
@@ -514,8 +412,8 @@ canned reports and writing custom SQL reports.</p>
 [% END %]
 </optgroup>
 </select></div>
-<div style="width: 6.3em; float: right; margin-top: 100px"><input type="button" name="Add" value="Add" class="button" style="width:6em;" onclick="addColumn()" /><br />
-<input type="button" name="delete" value="&lt;&lt; Delete" class="button" style="width: 6em; margin: 1em 0;" onclick="delColumn()" /></div>
+<div style="width: 6.3em; float: right; margin-top: 100px"><input type="button" name="Add" value="Add" class="button" style="width:6em;" id="addColumn" /><br />
+<input type="button" name="delete" value="&lt;&lt; Delete" class="button" style="width: 6em; margin: 1em 0;" id="delColumn" /></div>
 </div>
 
 <div class="yui-u">
@@ -526,7 +424,7 @@ canned reports and writing custom SQL reports.</p>
 <div class="yui-g">
 <fieldset class="action">
     <input type="hidden" name="phase" value="Choose these columns" />
-    <input type="button" name="back" value="&lt;&lt; Back" onclick="javascript:history.back()" />
+    <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
     <input type="submit" name="submit" value="Next &gt;&gt;" />
 </fieldset>
 </div>
@@ -599,7 +497,7 @@ canned reports and writing custom SQL reports.</p>
 [% END %]
 
 <fieldset class="action"><input type="hidden" name="phase" value="Choose these criteria" />
-    <input type="button" name="back" value="&lt;&lt; Back" onclick="javascript:history.back()" />
+    <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
     <input type="submit" name="submit" value="Next &gt;&gt;" /> </fieldset>
 </form>
 [% END %]
@@ -631,7 +529,7 @@ canned reports and writing custom SQL reports.</p>
 </table></fieldset>
 
 <fieldset class="action"><input type="hidden" name="phase" value="Choose these operations" />
-    <input type="button" name="back" value="&lt;&lt; Back" onclick="javascript:history.back()" />
+    <input type="button" name="back" value="&lt;&lt; Back" class="goback" />
     <input type="submit" name="submit" value="Next &gt;&gt;" /></fieldset>
 </form>
 [% END %]
@@ -738,7 +636,7 @@ canned reports and writing custom SQL reports.</p>
         </form>
         <!-- Go back to editing -->
         <form action='/cgi-bin/koha/reports/guided_reports.pl'>
-            <button type="button" class="new" onclick="history.back()"><i class="fa fa-fw fa-pencil"></i> Edit SQL</button>
+            <button type="button" class="new goback"><i class="fa fa-fw fa-pencil"></i> Edit SQL</button>
         </form>
     </div>
 [% END %]
@@ -790,11 +688,12 @@ canned reports and writing custom SQL reports.</p>
 
 [% IF ( execute ) %]
 <h1>[% name %]</h1>
-[% IF ( notes ) %]<p>[% notes %]</p>[% END %]
-[% IF ( unlimited_total ) %]<p>Total number of rows matching the (unlimited) query is [% unlimited_total %].</p>[% END %]
-<pre id="sql_output">[% sql |html %]</pre>
+[% IF ( notes ) %]<p><span class="label">Notes:</span> [% notes %]</p>[% END %]
+[% IF ( unlimited_total ) %]<p><span class="label">Total number of results:</span> [% unlimited_total %][% IF unlimited_total > limit %] ([% limit %] shown)[% END %].</p>[% END %]
+<div id="sql_output" style="display:none;"><span class="label">Report SQL:</span><pre>[% sql |html %]</pre></div>
+</br>
 
-<form action="/cgi-bin/koha/reports/guided_reports.pl" method="get">
+<form action="/cgi-bin/koha/reports/guided_reports.pl" method="get" id="limitselect">
     <input type="hidden" name="phase" value="Run this report"/>
     <input type="hidden" name="reports" value="[% report_id %]"/>
 
@@ -803,7 +702,7 @@ canned reports and writing custom SQL reports.</p>
     [% END %]
 
     <label for="limit">Rows per page: </label>
-    <select name="limit">
+    <select name="limit" id="limit">
         [% limits = [ 10, 20, 50, 100, 200, 300, 400, 500, 1000 ] %]
         [% FOREACH l IN limits %]
                 [% IF l == limit %]
@@ -813,33 +712,37 @@ canned reports and writing custom SQL reports.</p>
                 [% END %]
         [% END %]
     </select>
-
-    <input type="submit" value="Update" />
 </form>
 
 <div class="pages">[% pagination_bar %]</div>
 [% UNLESS ( errors ) %]
-<table>
-<tr>[% FOREACH header_ro IN header_row %]<th>[% header_ro.cell %]</th>[% END %]</tr>
-[% FOREACH result IN results %]
-<tr>
-    [% FOREACH cell IN result.cells %]<td>[% cell.cell %]</td>[% END %]
-</tr>
-[% END %]
-</table>
-<form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
-<fieldset class="action">
-<label for="format">Download the report: </label>
-<select name="format" id="format">
-<option value="csv">Comma separated text</option>
-<option value="tab">Tab separated text</option>
-<option value="ods">Open Document Spreadsheet</option>
-</select>
-<input type="hidden" name="sql" value="[% sql |html %]" />
-<input type="hidden" name="phase" value="Export" />
-<input type="submit" name="submit" value="Download" /></fieldset>
-<input type="hidden" name="reportname" value="[% name %]" />
-</form>
+    <form method="POST" action="/cgi-bin/koha/tools/batchMod.pl" id="report_results">
+        <input type="hidden" name="op" value="show" />
+        <table>
+            <tr>
+                [% FOREACH header_ro IN header_row %]
+                    [% IF header_ro.cell == 'itemnumber' %]
+                        <th>
+                            [% header_ro.cell %] <button type="submit" data-toggle="tooltip" title="Send visible items to batch modification" class="btn btn-xs btn-default send_to_item_mod"><i class="fa fa-pencil"></i> Batch modify</button>
+                        </th>
+                    [% ELSE %]
+                        <th>[% header_ro.cell %]</th>
+                    [% END %]
+                [% END %]
+            </tr>
+            [% FOREACH result IN results %]
+                <tr>
+                    [% FOREACH cells IN result.cells %]
+                        [% place = loop.index %]
+                        [% IF header_row.$place.cell == 'itemnumber' %]
+                            <input type="hidden" name="[% header_row.$place.cell | html %]" value="[% cells.cell | html %]" />
+                        [% END %]
+                        <td>[% cells.cell %]</td>
+                    [% END %]
+                </tr>
+            [% END %]
+        </table>
+    </form>
 [% END %]
 [% END %]
 
@@ -854,7 +757,7 @@ $(document).ready(function() {
 <legend>Create report from SQL</legend>
 <ol>
     <li><label for="reportname" class="required">Report name:</label>
-        [% IF ( reportname ) %]<input type="text" class="required" required="required" id="reportname" name="reportname" value="[% reportname %]" size="50"/>
+        [% IF ( reportname ) %]<input type="text" class="required" required="required" id="reportname" name="reportname" value="[% reportname | html %]" size="50"/>
         [% ELSE %]<input type="text" class="required" required="required" id="reportname" name="reportname" size="50" />[% END %] <span class="required">Required</span>
     </li>
     [% PROCESS group_and_subgroup_selection %]
@@ -914,13 +817,17 @@ Sub report:<select name="subreport">
 [% END %]
 
 
-[% IF ( retresults ) %]
+[% IF saved_results %]
 <h1>Saved report results</h1>
 <h2>[% name %]</h2>
 <p>[% notes %]</p>
 <table>
-[% FOREACH result IN results %]
-[% result.row %]
+[% FOREACH rows IN saved_results %]
+<tr>
+[% FOREACH col IN rows %]
+<td>[% col %]</td>
+[% END %]
+<tr>
 [% END %]
 </table>
 [% END %]
@@ -935,6 +842,17 @@ Sub report:<select name="subreport">
 </fieldset>
 [% END %]
 
+[% IF ( save_successful ) %]
+[% UNLESS ( errors ) %]
+</br>
+<div id="report_updated">
+    <div class="dialog message">
+        <p>Your report "[% reportname %]" has been saved</p>
+    </div>
+</div>
+[% END %]
+[% END %]
+
 [% IF ( editsql ) %]
 <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post" class="validated">
 <input type="hidden" name="phase" value="Update SQL" />
@@ -942,7 +860,7 @@ Sub report:<select name="subreport">
 <fieldset class="rows">
 <legend>Edit SQL report</legend>
 <ol>
-<li><label for="reportname" class="required">Report name: </label><input type="text" id="reportname" name="reportname" value="[% reportname %]" size="50" class="required" required="required" /> <span class="required">Required</span></li>
+<li><label for="reportname" class="required">Report name: </label><input type="text" id="reportname" name="reportname" value="[% reportname | html %]" size="50" class="required" required="required" /> <span class="required">Required</span></li>
 [% PROCESS group_and_subgroup_selection %]
 [% IF (public) %]
   <li><label for="public">Report is public:</label><select id="public" name="public"> <option value="0">No (default)</option> <option value="1" selected="selected">Yes</option> </select></li>
@@ -977,21 +895,6 @@ Sub report:<select name="subreport">
 
 [% END %]
 
-[% IF ( save_successful ) %]
-[% UNLESS ( errors ) %]
-<h2>Your report has been saved</h2>
-<h4>[% reportname %]</h4>
-<ul>
-    [% IF ( id ) %]
-    <li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% id %]&amp;phase=Run%20this%20report">Run this report</a></li>
-    [% END %]
-    <li>Access this report from the: <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Saved reports page</a></li>
-    <li>Schedule this report to run using the: <a href="/cgi-bin/koha/tools/scheduler.pl">Scheduler tool</a></li>
-    <li>Return to: <a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Guided reports</a></li>
-</ul>
-[% END %]
-[% END %]
-
 [% IF ( errors ) %]
 <form action="/cgi-bin/koha/reports/guided_reports.pl" method="post">
 <div class="dialog alert">
@@ -1005,7 +908,7 @@ Sub report:<select name="subreport">
     [% ELSE %]
     [% END %]
     <div id="onerror_actions">
-        <a href="javascript:window.history.back()" class="button">Return to previous page</a>
+        <a href="#" class="button goback">Return to previous page</a>
     </div>
 [% END %]
 </div>
@@ -1046,26 +949,262 @@ Sub report:<select name="subreport">
 [% INCLUDE 'guided-reports-view.inc' %]
 </div>
 </div>
-<script type="text/javascript">
-//<![CDATA[
-function addColumn() {
-    $("#availableColumns option:selected").clone().appendTo("#selectedColumns").attr("selected", "selected");
-}
-function delColumn() {
-    $("#selectedColumns option:selected").remove();
-}
-$("#column_submit").submit(function() {
-    if ($("#selectedColumns option").size() < 1) {
-        alert(_("No columns selected!"));
-        return false;
-    }
-    $("#selectedColumns option").attr("selected", "selected");  // Select everything still in #selectedColumns
-    return true;
-});
-//]]>
-</script>
-[% INCLUDE 'intranet-bottom.inc' %]
 
+[% MACRO jsinclude BLOCK %]
+    [% INCLUDE 'calendar.inc' %]
+    [% IF ( saved1 ) %]
+        [% INCLUDE 'datatables.inc' %]
+        [% INCLUDE 'columns_settings.inc' %]
+    [% END %]
+    <script>
+        var MSG_CONFIRM_DELETE = _("Are you sure you want to delete this report? This cannot be undone.");
+        var group_subgroups = {};
+        [% FOREACH group IN groups_with_subgroups %]
+            var gid = "[% group.id %]"
+            group_subgroups[gid] = new Array();
+            [% FOREACH subgroup IN group.subgroups %]
+                var sgid = "[% subgroup.id %]";
+                var sgname = "[% subgroup.name %]";
+                group_subgroups[gid].push([sgid, sgname]);
+            [% END %]
+        [% END %]
+
+        function load_group_subgroups () {
+            var group = $("#group_select").val();
+            var sg = $("#subgroup");
+            $(sg).find('option[value!=""]').each(function() {
+                $(this).remove();
+            });
+            $(sg).hide();
+            if (group) {
+                var select = $(sg).find('select')[0];
+                $.each( group_subgroups[group], function(index, value) {
+                    $('<option value="' + value[0] + '">' + value[1] + '</option>').appendTo(select);
+                } );
+                $("#subgroup, #subgroup *").show();
+            }
+        }
+
+        $(document).ready(function(){
+
+            $('[data-toggle="tooltip"]').tooltip();
+            var columns_settings = [% ColumnsSettings.GetColumns( 'reports', 'saved-sql', 'table_reports', 'json' ) %];
+
+            $('#limit').change(function() {
+                $('#limitselect').submit();
+            });
+
+            $(document).click(function() {
+                $('#report_updated').hide();
+            });
+
+            $(".goback").on("click",function(e){
+                e.preventDefault();
+                window.history.back();
+            });
+
+            $("#addColumn").on("click",function(){
+                addColumn();
+            });
+
+            $("#delColumn").on("click",function(){
+                delColumn();
+            });
+
+            [% IF (saved1) %]
+                var rtable = KohaTable("table_reports", {
+                    'iDisplayLength': [% Koha.Preference('NumSavedReports') %],
+                    'bAutoWidth': false,
+                    'sPaginationType': 'four_button',
+                    'aaSorting': [[ 1, "asc" ]],
+                    'aoColumnDefs': [
+                        { 'bSortable': false, 'bSearchable':false, 'aTargets': [0, -1] },
+                        { 'bSearchable': false, 'aTargets': [3] },
+                        { "aTargets": [ 1, 2 ], "sType": "natural"  },
+                        { "sType": "title-string", "aTargets" : [ "title-string" ] }
+                    ],
+                    'oLanguage': {
+                        'sZeroRecords': _("No matching reports found")
+                    },
+                }, columns_settings);
+
+                var rtabs = $("#tabs").tabs();
+                rtabs.on("tabsactivate", function(e, ui) {
+                    $("#subgroup_filter option").each(function() {
+                        if($(this).val().length > 0) {
+                            $(this).remove();
+                        }
+                    });
+                    rtable.fnFilter('', 4);
+                    rtable.fnFilter('', 5);
+                    rtable.fnSetColumnVis(4, true);
+                    rtable.fnSetColumnVis(5, true);
+
+                    var g_id = $(ui.newTab).children().attr('id');
+                    var g_name = $(ui.newTab).text();
+                    if ( g_name == _("All") ) {
+                        g_id = "";
+                        g_name = "";
+                    }
+
+                    if (g_id && g_id.length > 0) {
+                        rtable.fnFilter('^' + g_name + '$', 4, true, true, true, false);
+                        rtable.fnSetColumnVis(4, false);
+                        for(var i in group_subgroups[g_id]) {
+                            $("#subgroup_filter").append(
+                                '<option value="' + group_subgroups[g_id][i][0] + '">'
+                                + group_subgroups[g_id][i][1] + '</option>'
+                            );
+                        }
+                        $("#subgroup_filter_block").show();
+                    } else {
+                        $("#subgroup_filter_block").hide();
+                    }
+                });
+                $("#subgroup_filter_block").hide();
+
+                $("#subgroup_filter").change(function() {
+                    var selected = $(this).find('option:selected');
+                    var sg_id = $(selected).val();
+                    var sg_name = $(selected).text();
+                    if (sg_id.length > 0) {
+                        rtable.fnFilter('^' + sg_name + '$', 5, true, true, true, false);
+                        rtable.fnSetColumnVis(5, false);
+                    } else {
+                        rtable.fnFilter('', 5);
+                        rtable.fnSetColumnVis(5, true);
+                    }
+                });
+
+                $("#reports_form").submit(function(){
+                    var checkedItems = $("input[name=ids]:checked");
+                    if ($(checkedItems).size() == 0) {
+                        alert(_("You must select one or more reports to delete"));
+                        return false;
+                    }
+                    $(checkedItems).parents('tr').addClass("warn");
+                    if( confirm(_("Are you sure you want to delete the selected reports?")) ) {
+                        return true;
+                    } else {
+                        $(checkedItems).parents('tr').removeClass("warn");
+                        return false;
+                    }
+                });
+
+                $("body").on("click", ".update_sql", function(e){
+                    e.preventDefault();
+                    var ltitle = $(this).text();
+                    var report_id = $(this).data("report_id");
+                    var page = $(this).attr("href");
+                    $("#update_sql .modal-body").load(page + " div", function(){
+                        var diff1 = $("#col1 .show_sql").text();
+                        var diff2 = $("#col2 .show_sql").text();
+                        var diffs = diffString( escape(diff1), escape(diff2) );
+                        $("#col1 .show_sql,#col2 .show_sql").html(diffs);
+                    });
+                    $('#update_sql').modal('show');
+                    $("#update_sql_button").attr("href", "/cgi-bin/koha/reports/guided_reports.pl?phase=Use saved&op=convert&report_id=" + report_id);
+                });
+
+                $("#update_sql").on("hidden.bs.modal", function(){
+                    $("#update_sql_label").html("");
+                    $("#update_sql .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
+                });
+            [% END %]
+
+            [% IF ( showsql ) %]
+                $("#sql").focus(function() {
+                    $(this).select();
+                });
+            [% END %]
+
+                $(".toggle_sql").click(function(){
+                    $("#sql_output").toggle();
+                    $("#toggle_sql_hid").toggle();
+                    $("#toggle_sql_vis").toggle();
+                });
+
+                $("#table_reports").delegate(".confirmdelete", 'click', function(){
+                    $(this).parents('tr').attr("class","warn");
+                    if(confirm(_("Are you sure you want to delete this saved report?"))){
+                        return true;
+                    } else {
+                        $(this).parents('tr').attr("class","");
+                        return false;
+                    }
+                });
+
+            [% IF (create || editsql || save) %]
+                $("#select_group").change(function() {
+                    if($(this).prop('checked')) {
+                        $("#group_input").prop('disabled', true);
+                        $("#groupdesc_input").prop('disabled', true);
+                        $("#group_select").prop('disabled', false);
+                        if ($("#group_select").val().length > 0) {
+                            $("#select_subgroup").prop('checked', true);
+                            $("#select_subgroup").change();
+                            $("#subgroup, #subgroup *").show();
+                        } else {
+                            $("#subgroup").hide();
+                        }
+                    }
+                });
+                $("#create_group").change(function() {
+                    if($(this).prop('checked')) {
+                        $("#group_input").prop('disabled', false);
+                        $("#groupdesc_input").prop('disabled', false);
+                        $("#group_select").prop('disabled', true);
+                        $("#create_subgroup").prop('checked', true).change();
+                        $("#subgroup_select").hide();
+                        $("#subgroup input[type='radio']").hide();
+                        $("#subgroup label[for]").hide();
+                        $("#subgroup_input").show();
+                        $("#subgroupdesc_input").show();
+                        $("#subgroup").show();
+                    }
+                });
+                $("#select_subgroup").change(function() {
+                    if($(this).prop('checked')) {
+                        $("#subgroup_select").prop('disabled', false);
+                        $("#subgroup_input").prop('disabled', true);
+                        $("#subgroupdesc_input").prop('disabled', true);
+                    }
+                });
+                $("#create_subgroup").change(function() {
+                    if($(this).prop('checked')) {
+                        $("#subgroup_input").prop('disabled', false);
+                        $("#subgroupdesc_input").prop('disabled', false);
+                        $("#subgroup_select").prop('disabled', true);
+                    }
+                });
+                $("#select_group").change();
+                $("#select_subgroup").change();
+                $("#group_select").on("change",function(){
+                    load_group_subgroups();
+                });
+            [% END %]
+            $(".delete").on("click",function(){
+                return confirmDelete(MSG_CONFIRM_DELETE);
+            });
+        });
+        function addColumn() {
+            $("#availableColumns option:selected").clone().appendTo("#selectedColumns").attr("selected", "selected");
+        }
+        function delColumn() {
+            $("#selectedColumns option:selected").remove();
+        }
+        $("#column_submit").submit(function() {
+            if ($("#selectedColumns option").size() < 1) {
+                alert(_("No columns selected!"));
+                return false;
+            }
+            $("#selectedColumns option").attr("selected", "selected");  // Select everything still in #selectedColumns
+            return true;
+        });
+    </script>
+[% END %]
+
+[% INCLUDE 'intranet-bottom.inc' %]
 
 [% BLOCK group_and_subgroup_selection %]
     <li id="group">
@@ -1073,7 +1212,7 @@ $("#column_submit").submit(function() {
         <input type="radio" name="select_or_create_group"
             id="select_group" checked="checked" />
         <label for="select_group" style="float:none">Select</label>
-        <select name="group" onChange="load_group_subgroups();" id="group_select">
+        <select name="group" id="group_select">
             <option value="">(None)</option>
             [% FOREACH group IN groups_with_subgroups %]
                 [% IF (group.selected) %]