ReportGenerator::generate_with_header kann jetzt auch no_layout
[kivitendo-erp.git] / SL / ReportGenerator.pm
index 6b99901..3ea62f9 100644 (file)
@@ -23,6 +23,7 @@ sub new {
   $self->{options}  = {
     'std_column_visibility' => 0,
     'output_format'         => 'HTML',
+    'controller_class   '   => '',
     'allow_pdf_export'      => 1,
     'allow_csv_export'      => 1,
     'html_template'         => 'report_generator/html_report',
@@ -72,6 +73,12 @@ sub set_columns {
     $column->{visible} = $self->{options}->{std_column_visibility} unless defined $column->{visible};
   }
 
+  if( $::form->{report_generator_csv_options_for_import} ) {
+    foreach my $key (keys %{ $self->{columns} }) {
+      $self->{columns}{$key}{text} = $key;
+    }
+  }
+
   $self->set_column_order(sort keys %{ $self->{columns} });
 }
 
@@ -203,14 +210,17 @@ sub set_custom_headers {
 sub get_attachment_basename {
   my $self     = shift;
   my $filename =  $self->{options}->{attachment_basename} || 'report';
+
+  # FIXME: this is bonkers. add a real sluggify method somewhere or import one.
   $filename    =~ s|.*\\||;
   $filename    =~ s|.*/||;
+  $filename    =~ s| |_|g;
 
   return $filename;
 }
 
 sub generate_with_headers {
-  my $self   = shift;
+  my ($self, %params) = @_;
   my $format = lc $self->{options}->{output_format};
   my $form   = $self->{form};
 
@@ -221,12 +231,13 @@ sub generate_with_headers {
   if ($format eq 'html') {
     my $title      = $form->{title};
     $form->{title} = $self->{title} if ($self->{title});
-    $form->header();
+    $form->header(no_layout => $params{no_layout});
     $form->{title} = $title;
 
     print $self->generate_html_content();
 
   } elsif ($format eq 'csv') {
+    # FIXME: don't do mini http in here
     my $filename = $self->get_attachment_basename();
     print qq|content-type: text/csv\n|;
     print qq|content-disposition: attachment; filename=${filename}.csv\n\n|;
@@ -389,6 +400,7 @@ sub prepare_html_content {
     'EXPORT_VARIABLE_LIST' => join(' ', @{ $self->{export}->{variable_list} }),
     'EXPORT_NEXTSUB'       => $self->{export}->{nextsub},
     'DATA_PRESENT'         => $self->{data_present},
+    'CONTROLLER_DISPATCH'  => $opts->{controller_class},
   };
 
   return $variables;
@@ -398,7 +410,9 @@ sub generate_html_content {
   my $self      = shift;
   my $variables = $self->prepare_html_content();
 
-  return $self->{form}->parse_html_template($self->{options}->{html_template}, $variables);
+  my $stuff  = $self->{form}->parse_html_template($self->{options}->{html_template}, $variables);
+  $::lxdebug->dump(0,  "stuff", $stuff);
+  return $stuff;
 }
 
 sub _cm2bp {
@@ -768,6 +782,10 @@ sub _generate_csv_content {
   }
 }
 
+sub check_for_pdf_api {
+  return eval { require PDF::API2; 1; } ? 1 : 0;
+}
+
 1;
 
 __END__
@@ -921,6 +939,12 @@ Used to determine if a button for CSV export should be displayed. Default is yes
 
 The template to be used for HTML reports. Default is 'report_generator/html_report'.
 
+=item controller_class
+
+If this is used from a C<SL::Controller::Base> based controller class, pass the
+class name here and make sure C<SL::Controller::Helper::ReportGenerator> is
+used in the controller. That way the exports stay functional.
+
 =back
 
 =head2 PDF Options