X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/09c8c053181f182143beff935d011af15afddb01..f217d072d76183bc07723dcc29503b732bd2022d:/SL/Controller/CustomDataExport.pm diff --git a/SL/Controller/CustomDataExport.pm b/SL/Controller/CustomDataExport.pm index 7d5eddee9..f42c8b892 100644 --- a/SL/Controller/CustomDataExport.pm +++ b/SL/Controller/CustomDataExport.pm @@ -12,6 +12,7 @@ use POSIX qw(strftime); use Text::CSV_XS; use SL::DB::CustomDataExportQuery; +use SL::Controller::Helper::ReportGenerator; use SL::Locale::String qw(t8); use Rose::Object::MakeMethods::Generic @@ -30,27 +31,71 @@ __PACKAGE__->run_before('setup_javascripts'); sub action_list { my ($self) = @_; - $self->render('custom_data_export/list', title => $::locale->text('Execute a custom data export query')); + $self->render('custom_data_export/list', title => $::locale->text('Execute a custom report query')); } sub action_export { my ($self) = @_; - if (!$::form->{format}) { + if (!$::form->{parameters_set}) { $self->setup_export_action_bar; - return $self->render('custom_data_export/export', title => t8("Execute custom data export '#1'", $self->query->name)); + return $self->render('custom_data_export/export', title => t8("Execute custom report '#1'", $self->query->name)); } $self->execute_query; if (scalar(@{ $self->rows // [] }) == 1) { $self->setup_empty_result_set_action_bar; - return $self->render('custom_data_export/empty_result_set', title => t8("Execute custom data export '#1'", $self->query->name)); + return $self->render('custom_data_export/empty_result_set', title => t8("Execute custom report '#1'", $self->query->name)); } + my $report = SL::ReportGenerator->new(\%::myconfig, $::form); - my $method = "export_as_" . $::form->{format}; - $self->$method; + my $report_name = $self->query->name; + $report_name =~ s{[^[:word:]]+}{_}ig; + $report_name .= strftime('_%Y-%m-%d_%H-%M-%S', localtime()); + + $report->set_options( + std_column_visibility => 1, + controller_class => 'CustomDataExport', + output_format => 'HTML', + top_info_text => $self->query->name, + title => $self->query->name, + allow_pdf_export => 1, + allow_csv_export => 1, + allow_chart_export => 1, + attachment_basename => $report_name, + ); + + my %column_defs; + foreach my $key (@{ $self->rows->[0] }) { + $column_defs{$key} = { text => $key, sub => sub { $_[0]->{$key} } }; + } + + $report->set_columns(%column_defs); + $report->set_column_order(@{ $self->rows->[0] }); + + $report->set_export_options(qw(export id parameters_set parameters)); + $report->set_options_from_form; + + # Setup data objects (which in this case is an array of hashes). + my @objects; + foreach my $set_idx (1..$#{ $self->rows }) { + my %row_set; + foreach my $key_idx (0..$#{ $self->rows->[0] }) { + my $key = $self->rows->[0]->[$key_idx]; + my $value = $self->rows->[$set_idx]->[$key_idx]; + $row_set{$key} = $value; + } + push @objects, \%row_set; + } + + $self->report_generator_list_objects(report => $report, + objects => \@objects, + options => { + action_bar_additional_submit_values => { id => $::form->{id}, }, + }, + ); } # @@ -59,6 +104,7 @@ sub action_export { sub check_auth { my ($self) = @_; + $::auth->assert('custom_data_report'); $::auth->assert($self->query->access_right) if $self->query->access_right; } @@ -94,7 +140,7 @@ sub setup_export_action_bar { for my $bar ($::request->layout->get('actionbar')) { $bar->add( action => [ - t8('Export'), + t8('Execute'), submit => [ '#form', { action => 'CustomDataExport/export' } ], checks => [ 'kivi.validate_form' ], accesskey => 'enter', @@ -170,32 +216,4 @@ sub execute_query { ]); } -sub export_as_csv { - my ($self) = @_; - - my $csv = Text::CSV_XS->new({ - binary => 1, - sep_char => ';', - eol => "\n", - }); - - my ($file_handle, $file_name) = File::Temp::tempfile; - - binmode $file_handle, ":encoding(utf8)"; - - $csv->print($file_handle, $_) for @{ $self->rows }; - - $file_handle->close; - - my $report_name = $self->query->name; - $report_name =~ s{[^[:word:]]+}{_}ig; - $report_name .= strftime('_%Y-%m-%d_%H-%M-%S.csv', localtime()); - - $self->send_file( - $file_name, - content_type => 'text/csv', - name => $report_name, - ); -} - 1;