@@ -, +, @@ 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 @@ -
  • - - -
  • + [% IF allresults.size %] +
  • + + +
  • + [% ELSE %] +
  • +

    This chart will use only visible rows, click 'Fetch all data' to chart the full report

    +
  • + [% END %]
  • --- 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 @@
    - Create chart + [% IF allresults.size %] + Create chart + [% ELSE %] + Create chart + Fetch all data for chart + [% END %] +
    [% 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('&param_name=', $url, map { URI::Escape::uri_escape_utf8($_) } @param_names); } --