X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FHelper%2FReportGenerator.pm;h=513eda85b2159183e0b36cb5d0efc55cc8111e08;hb=c46d944c0f688128ee33b2989260f3d9390c61d5;hp=3cf2622a714341335c3d86e4253779578f390e72;hpb=3d1ae2d96b65e88a5b12dde2b2524dc10f7932fa;p=kivitendo-erp.git diff --git a/SL/Controller/Helper/ReportGenerator.pm b/SL/Controller/Helper/ReportGenerator.pm index 3cf2622a7..513eda85b 100644 --- a/SL/Controller/Helper/ReportGenerator.pm +++ b/SL/Controller/Helper/ReportGenerator.pm @@ -5,7 +5,6 @@ use strict; use Carp; use List::Util qw(max); -use SL::Form; use SL::Common; use SL::MoreCommon; use SL::ReportGenerator; @@ -17,8 +16,31 @@ our @EXPORT = qw( report_generator_list_objects ); +sub _setup_action_bar { + my ($self, $type) = @_; + + my $key = $::form->{CONTROLLER_DISPATCH} ? 'action' : 'report_generator_form.report_generator_dispatch_to'; + my $value = $::form->{CONTROLLER_DISPATCH} ? $::form->{CONTROLLER_DISPATCH} . "/" : ''; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + $type eq 'pdf' ? $::locale->text('PDF export') : $::locale->text('CSV export'), + submit => [ '#report_generator_form', { $key => "${value}report_generator_export_as_${type}" } ], + ], + action => [ + $::locale->text('Back'), + submit => [ '#report_generator_form', { $key => "${value}report_generator_back" } ], + ], + ); + } +} + sub action_report_generator_export_as_pdf { my ($self) = @_; + + delete $::form->{action_report_generator_export_as_pdf}; + if ($::form->{report_generator_pdf_options_set}) { my $saved_form = save_form(); @@ -40,6 +62,9 @@ sub action_report_generator_export_as_pdf { $::form->{copies} = max $::myconfig{copies} * 1, 1; $::form->{title} = $::locale->text('PDF export -- options'); + + _setup_action_bar($self, 'pdf'); # Sub not exported, therefore don't call via object. + $::form->header; print $::form->parse_html_template('report_generator/pdf_export_options', { 'HIDDEN' => \@form_values, @@ -48,6 +73,9 @@ sub action_report_generator_export_as_pdf { sub action_report_generator_export_as_csv { my ($self) = @_; + + delete $::form->{action_report_generator_export_as_csv}; + if ($::form->{report_generator_csv_options_set}) { $self->report_generator_do('CSV'); return; @@ -56,6 +84,9 @@ sub action_report_generator_export_as_csv { my @form_values = $::form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $::form }); $::form->{title} = $::locale->text('CSV export -- options'); + + _setup_action_bar($self, 'csv'); # Sub not exported, therefore don't call via object. + $::form->header; print $::form->parse_html_template('report_generator/csv_export_options', { 'HIDDEN' => \@form_values }); } @@ -89,20 +120,21 @@ sub report_generator_list_objects { croak "Parameter 'objects' must exist and be an array reference" if ref($params{objects}) ne 'ARRAY'; croak "Parameter 'report' must exist and be an instance of SL::ReportGenerator" if ref($params{report}) ne 'SL::ReportGenerator'; croak "Parameter 'options', if exists, must be a hash reference" if $params{options} && (ref($params{options}) ne 'HASH'); + $params{layout} //= 1; my $column_defs = $params{report}->{columns}; - my @columns = $params{report}->get_visible_columns; + my @columns = $params{report}->get_visible_columns('HTML'); for my $obj (@{ $params{objects} || [] }) { my %data = map { my $def = $column_defs->{$_}; - $_ => { - raw_data => $def->{raw_data} ? $def->{raw_data}->($obj) : '', - data => $def->{sub} ? $def->{sub}->($obj) - : $obj->can($_) ? $obj->$_ - : $obj->{$_}, - link => $def->{obj_link} ? $def->{obj_link}->($obj) : '', - }, + my $tmp; + $tmp->{raw_data} = $def->{raw_data} ? $def->{raw_data}->($obj) : ''; + $tmp->{data} = $def->{sub} ? $def->{sub}->($obj) + : $obj->can($_) ? $obj->$_ + : $obj->{$_}; + $tmp->{link} = $def->{obj_link} ? $def->{obj_link}->($obj) : ''; + $_ => $tmp; } @columns; $params{data_callback}->(\%data) if $params{data_callback}; @@ -110,7 +142,15 @@ sub report_generator_list_objects { $params{report}->add_data(\%data); } - return $params{report}->generate_with_headers(%{ $params{options} || {}}); + my %options = %{ $params{options} || {} }; + $options{action_bar} //= $params{action_bar} // 1; + + if ($params{layout}) { + return $params{report}->generate_with_headers(%options); + } else { + my $html = $params{report}->generate_html_content(action_bar => 0, %options); + $self->render(\$html , { layout => 0, process => 0 }); + } } 1; @@ -224,6 +264,15 @@ L. An optional hash reference that's passed verbatim to the function L. +=item C + +If the buttons for exporting PDF and/or CSV variants are included in +the action bar. Otherwise they're rendered at the bottom of the page. + +The value can be either a specific action bar instance or simply 1 in +which case the default action bar is used: +C<$::request-Elayout-Eget('actionbar')>. + =back =back