]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/CustomDataExport.pm
kivitendo 3.9.2-0.2
[mfinanz.git] / SL / Controller / CustomDataExport.pm
index 7d5eddee95b50a4e2f471e99123c58146b7c3e9a..f42c8b892a84caf2494a9453b93ab464f7ec52d7 100644 (file)
@@ -12,6 +12,7 @@ use POSIX qw(strftime);
 use Text::CSV_XS;
 
 use SL::DB::CustomDataExportQuery;
 use Text::CSV_XS;
 
 use SL::DB::CustomDataExportQuery;
+use SL::Controller::Helper::ReportGenerator;
 use SL::Locale::String qw(t8);
 
 use Rose::Object::MakeMethods::Generic
 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) = @_;
 
 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) = @_;
 
 }
 
 sub action_export {
   my ($self) = @_;
 
-  if (!$::form->{format}) {
+  if (!$::form->{parameters_set}) {
     $self->setup_export_action_bar;
     $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;
   }
 
   $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) = @_;
 
 sub check_auth {
   my ($self) = @_;
+  $::auth->assert('custom_data_report');
   $::auth->assert($self->query->access_right) if $self->query->access_right;
 }
 
   $::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 => [
   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',
         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;
 1;