@@ -, +, @@
requested
1 - Create a report that returns over 1000 rows of data
2 - Run the report
3 - Note you have two buttons now 'Chart data' and 'Fetch all data for chart'
4 - Click chart data
5 - Note the note that you are only charting visible data
6 - Create the chart and confirm it works
7 - Close the chart
8 - Click 'Fetch all data'
9 - Note the confirm window
---
koha-tmpl/intranet-tmpl/prog/en/includes/chart.inc | 14 +++++++----
.../prog/en/includes/reports-toolbar.inc | 8 ++++++-
.../en/modules/reports/guided_reports_start.tt | 27 +++++++++++++++++-----
reports/guided_reports.pl | 13 +++++++----
4 files changed, 46 insertions(+), 16 deletions(-)
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/chart.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/chart.inc
@@ -33,10 +33,16 @@
-
- Include all rows (ignore pagination):
-
-
+ [% IF allresults.size %]
+
+ Include all rows (ignore pagination):
+
+
+ [% ELSE %]
+
+ This chart will use only visible rows, click 'Fetch all data' to chart the full report
+
+ [% END %]
Exclude last line (Rollup):
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/reports-toolbar.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/reports-toolbar.inc
@@ -107,7 +107,13 @@
Hide SQL code
[% END %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt
@@ -1158,6 +1158,17 @@ canned reports and writing custom SQL reports.
}
$(document).ready(function(){
+
+ $("body").on('click',".fetch_chart_data",function(){
+ if( [% unlimited_total %] > 1000 ){
+ if( confirm("Fetching full chart data for reports with many rows can cause performance issues. Are you sure you with to chart this report?") ){
+ return true;
+ } else {
+ return false;
+ }
+ }
+ });
+
var showsql;
hide_bar_element();
@@ -1200,12 +1211,16 @@ canned reports and writing custom SQL reports.
headers = [% header_row.json | $raw %];
var results;
- if ($('input[name="chart-include-all"]').prop('checked')) {
- results = [% allresults.json | $raw %]
- }
- else {
- results = [% results.json | $raw %]
- }
+ [% IF allresults.size %]
+ if ($('input[name="chart-include-all"]').prop('checked')) {
+ results = [% allresults.json | $raw %]
+ }
+ else {
+ results = [% results.json | $raw %]
+ }
+ [% ELSE %]
+ results = [% results.json | $raw %];
+ [% END %]
if ($('input[name="chart-exclude-last"]').prop('checked')) {
results.splice(-1, 1);
--- a/reports/guided_reports.pl
+++ a/reports/guided_reports.pl
@@ -692,6 +692,7 @@ elsif ($phase eq 'Run this report'){
my $report_id = $input->param('reports');
my @sql_params = $input->multi_param('sql_params');
my @param_names = $input->multi_param('param_name');
+ my $want_full_chart = $input->param('want_full_chart') || 0;
# offset algorithm
if ($input->param('page')) {
@@ -828,7 +829,6 @@ elsif ($phase eq 'Run this report'){
my ($sql,$header_types) = get_prepped_report( $sql, \@param_names, \@sql_params);
$template->param(header_types => $header_types);
my ( $sth, $errors ) = execute_query( $sql, $offset, $limit, undef, $report_id );
- my ($sth2, $errors2) = execute_query($sql);
my $total = nb_rows($sql) || 0;
unless ($sth) {
die "execute_query failed to return sth for report $report_id: $sql";
@@ -839,14 +839,17 @@ elsif ($phase eq 'Run this report'){
my @cells = map { +{ cell => $_ } } @$row;
push @rows, { cells => \@cells };
}
- while (my $row = $sth2->fetchrow_arrayref()) {
- my @cells = map { +{ cell => $_ } } @$row;
- push @allrows, { cells => \@cells };
+ if( $want_full_chart ){
+ my ($sth2, $errors2) = execute_query($sql);
+ while (my $row = $sth2->fetchrow_arrayref()) {
+ my @cells = map { +{ cell => $_ } } @$row;
+ push @allrows, { cells => \@cells };
+ }
}
}
my $totpages = int($total/$limit) + (($total % $limit) > 0 ? 1 : 0);
- my $url = "/cgi-bin/koha/reports/guided_reports.pl?reports=$report_id&phase=Run%20this%20report&limit=$limit";
+ my $url = "/cgi-bin/koha/reports/guided_reports.pl?reports=$report_id&phase=Run%20this%20report&limit=$limit&want_full_chart=$want_full_chart";
if (@param_names) {
$url = join('¶m_name=', $url, map { URI::Escape::uri_escape_utf8($_) } @param_names);
}
--