X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FReportGenerator.pm;h=3b03f5aa1f80f7ff7563b8b6fab80da1c4406737;hb=d4608fb4eff9392728d1287de4df3e865ebe7f6e;hp=0a61195c919ec52a75f66f7b05c838de0ea8193a;hpb=8172364e826b9d37fb977078a0eafb30450cf9ef;p=kivitendo-erp.git diff --git a/SL/ReportGenerator.pm b/SL/ReportGenerator.pm index 0a61195c9..3b03f5aa1 100644 --- a/SL/ReportGenerator.pm +++ b/SL/ReportGenerator.pm @@ -2,6 +2,7 @@ package SL::ReportGenerator; use Data::Dumper; use List::Util qw(max); +use Scalar::Util qw(blessed); use Text::CSV_XS; #use PDF::API2; # these two eat up to .75s on startup. only load them if we actually need them #use PDF::Table; @@ -232,12 +233,13 @@ sub generate_with_headers { } if ($format eq 'html') { + my $content = $self->generate_html_content(%params); my $title = $form->{title}; $form->{title} = $self->{title} if ($self->{title}); $form->header(no_layout => $params{no_layout}); $form->{title} = $title; - print $self->generate_html_content(); + print $content; } elsif ($format eq 'csv') { # FIXME: don't do mini http in here @@ -275,7 +277,7 @@ sub html_format { } sub prepare_html_content { - my $self = shift; + my ($self, %params) = @_; my ($column, $name, @column_headers); @@ -407,14 +409,63 @@ sub prepare_html_content { 'DATA_PRESENT' => $self->{data_present}, 'CONTROLLER_DISPATCH' => $opts->{controller_class}, 'TABLE_CLASS' => $opts->{table_class}, + 'SKIP_BUTTONS' => !!$params{action_bar}, }; return $variables; } +sub create_action_bar_actions { + my ($self, $variables) = @_; + + my @actions; + foreach my $type (qw(pdf csv)) { + next unless $variables->{"ALLOW_" . uc($type) . "_EXPORT"}; + + my $key = $variables->{CONTROLLER_DISPATCH} ? 'action' : 'report_generator_dispatch_to'; + my $value = "report_generator_export_as_${type}"; + $value = $variables->{CONTROLLER_DISPATCH} . "/${value}" if $variables->{CONTROLLER_DISPATCH}; + + push @actions, action => [ + $type eq 'pdf' ? $::locale->text('PDF export') : $::locale->text('CSV export'), + submit => [ '#report_generator_form', { $key => $value } ], + ]; + } + + if (scalar(@actions) > 1) { + @actions = ( + combobox => [ + action => [ $::locale->text('Export') ], + @actions, + ], + ); + } + + return @actions; +} + +sub setup_action_bar { + my ($self, $variables, %params) = @_; + + my @actions = $self->create_action_bar_actions($variables); + + if ($params{action_bar_setup_hook}) { + $params{action_bar_setup_hook}->(@actions); + + } elsif (@actions) { + my $action_bar = blessed($params{action_bar}) ? $params{action_bar} : ($::request->layout->get('actionbar'))[0]; + $action_bar->add(@actions); + } +} + sub generate_html_content { - my $self = shift; - my $variables = $self->prepare_html_content(); + my ($self, %params) = @_; + + $params{action_bar} //= 1; + + my $variables = $self->prepare_html_content(%params); + + $self->setup_action_bar($variables, %params) if $params{action_bar}; my $stuff = $self->{form}->parse_html_template($self->{options}->{html_template}, $variables); return $stuff; @@ -661,7 +712,7 @@ sub generate_pdf_content { my $content = $pdf->stringify(); $main::lxdebug->message(LXDebug->DEBUG2(),"addattachments ?? =".$form->{report_generator_addattachments}." GL=".$form->{GL}); - if ( $form->{report_generator_addattachments} eq 'yes' && $form->{GL}) { + if ($form->{report_generator_addattachments} && $form->{GL}) { $content = $self->append_gl_pdf_attachments($form,$content); }