SL::Controller::Base wrapper für ReportGenerator
[kivitendo-erp.git] / SL / Controller / Helper / ReportGenerator.pm
diff --git a/SL/Controller/Helper/ReportGenerator.pm b/SL/Controller/Helper/ReportGenerator.pm
new file mode 100644 (file)
index 0000000..3455375
--- /dev/null
@@ -0,0 +1,101 @@
+#=====================================================================
+# LX-Office ERP
+# Copyright (C) 2004
+# Based on SQL-Ledger Version 2.1.9
+# Web http://www.lx-office.org
+######################################################################
+#
+# Mixin for controllers to use ReportGenerator things
+#
+######################################################################
+
+use strict;
+
+use List::Util qw(max);
+
+use SL::Form;
+use SL::Common;
+use SL::MoreCommon;
+use SL::ReportGenerator;
+
+use Exporter 'import';
+our @EXPORT = qw(
+  action_report_generator_export_as_pdf action_report_generator_export_as_csv
+  action_report_generator_back report_generator_do
+);
+
+sub action_report_generator_export_as_pdf {
+  my ($self) = @_;
+  if ($::form->{report_generator_pdf_options_set}) {
+    my $saved_form = save_form();
+
+    $self->report_generator_do('PDF');
+
+    if ($::form->{report_generator_printed}) {
+      restore_form($saved_form);
+      $::form->{MESSAGE} = $::locale->text('The list has been printed.');
+      $self->report_generator_do('HTML');
+    }
+
+    return;
+  }
+
+  my @form_values = $::form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $::form });
+
+  $::form->get_lists('printers' => 'ALL_PRINTERS');
+  map { $_->{selected} = $::myconfig{default_printer_id} == $_->{id} } @{ $::form->{ALL_PRINTERS} };
+
+  $::form->{copies} = max $::myconfig{copies} * 1, 1;
+  $::form->{title} = $::locale->text('PDF export -- options');
+  $::form->header;
+  print $::form->parse_html_template('report_generator/pdf_export_options', {
+    'HIDDEN'               => \@form_values,
+    'ALLOW_FONT_SELECTION' => SL::ReportGenerator->check_for_pdf_api, });
+}
+
+sub action_report_generator_export_as_csv {
+  my ($self) = @_;
+  if ($::form->{report_generator_csv_options_set}) {
+    $self->report_generator_do('CSV');
+    return;
+  }
+
+  my @form_values = $::form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $::form });
+
+  $::form->{title} = $::locale->text('CSV export -- options');
+  $::form->header;
+  print $::form->parse_html_template('report_generator/csv_export_options', { 'HIDDEN' => \@form_values });
+}
+
+sub action_report_generator_back {
+  $_[0]->report_generator_do('HTML');
+}
+
+sub report_generator_set_default_sort {
+  my ($default_sortorder, $default_sortdir) = @_;
+
+  $::form->{sort}         ||= $default_sortorder;
+  $::form->{sortdir}        = $default_sortdir unless (defined $::form->{sortdir});
+  $::form->{sortdir}        = $::form->{sortdir} ? 1 : 0;
+}
+
+sub report_generator_do {
+  my ($self, $format)  = @_;
+
+  my $nextsub = $::form->{report_generator_nextsub};
+  if (!$nextsub) {
+    $::form->error($::locale->text('report_generator_nextsub is not defined.'));
+  }
+
+  foreach my $key (split m/ +/, $::form->{report_generator_variable_list}) {
+    $::form->{$key} = $::form->{"report_generator_hidden_${key}"};
+  }
+
+  $::form->{report_generator_output_format} = $format;
+
+  delete @{$::form}{map { "report_generator_$_" } qw(nextsub variable_list)};
+
+  $self->_run_action($nextsub);
+}
+
+1;