Rechnungsmaske: "Browser-Zurück verhindern" konfigurierbar in Mandantenkonfig
[kivitendo-erp.git] / bin / mozilla / reportgenerator.pl
index 112116d..f2eb1ef 100644 (file)
@@ -13,11 +13,57 @@ use List::Util qw(max);
 
 use SL::Form;
 use SL::Common;
-use SL::MoreCommon;
+use SL::MoreCommon qw(restore_form save_form);
 use SL::ReportGenerator;
 
+use strict;
+
+sub report_generator_set_default_sort {
+  $main::lxdebug->enter_sub();
+
+  my $form     = $main::form;
+
+  my $default_sortorder   = shift;
+  my $default_sortdir     = shift;
+
+  $form->{sort}         ||= $default_sortorder;
+  $form->{sortdir}        = $default_sortdir unless (defined $form->{sortdir});
+  $form->{sortdir}        = $form->{sortdir} ? 1 : 0;
+
+  $main::lxdebug->leave_sub();
+}
+
+
+sub report_generator_setup_action_bar {
+  my ($type, %params) = @_;
+
+  for my $bar ($::request->layout->get('actionbar')) {
+    $bar->add(
+      combobox => [
+        action => [
+          $type eq 'pdf' ? $::locale->text('PDF export') : $::locale->text('CSV export'),
+          submit => [ '#report_generator_form', { 'report_generator_dispatch_to' => "report_generator_export_as_${type}" } ],
+        ],
+        action => [
+          $::locale->text('PDF export with attachments'),
+          submit  => [ '#report_generator_form', { report_generator_dispatch_to => "report_generator_export_as_pdf", report_generator_addattachments => 1 } ],
+          only_if => $params{allow_attachments},
+        ],
+      ],
+      action => [
+        $::locale->text('Back'),
+        submit => [ '#report_generator_form', { 'report_generator_dispatch_to' => "report_generator_back" } ],
+      ],
+    );
+  }
+}
+
 sub report_generator_export_as_pdf {
-  $lxdebug->enter_sub();
+  $main::lxdebug->enter_sub();
+
+  my $form     = $main::form;
+  my %myconfig = %main::myconfig;
+  my $locale   = $main::locale;
 
   if ($form->{report_generator_pdf_options_set}) {
     my $saved_form = save_form();
@@ -30,61 +76,72 @@ sub report_generator_export_as_pdf {
       report_generator_do('HTML');
     }
 
-    $lxdebug->leave_sub();
+    $main::lxdebug->leave_sub();
     return;
   }
 
-  my @form_values;
-  map { push @form_values, { 'key' => $_, 'value' => $form->{$_} } } keys %{ $form };
+  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;
 
+  my $allow_font_selection = 1;
+  eval { require PDF::API2; };
+  $allow_font_selection = 0 if ($@);
+
   $form->{title} = $locale->text('PDF export -- options');
+
+  report_generator_setup_action_bar('pdf', allow_attachments => !!$form->{report_generator_hidden_l_attachments});
+
   $form->header();
-  print $form->parse_html_template('report_generator/pdf_export_options',
-                                   { 'HIDDEN'         => \@form_values,
-                                     'default_margin' => $form->format_amount(\%myconfig, 1.5),
-                                     'SHOW_PRINTERS'  => scalar @{ $form->{ALL_PRINTERS} },
-                                   });
+  print $form->parse_html_template('report_generator/pdf_export_options', { 'HIDDEN'               => \@form_values,
+                                                                            'ALLOW_FONT_SELECTION' => $allow_font_selection, });
 
-  $lxdebug->leave_sub();
+  $main::lxdebug->leave_sub();
 }
 
 sub report_generator_export_as_csv {
-  $lxdebug->enter_sub();
+  $main::lxdebug->enter_sub();
+
+  my $form     = $main::form;
+  my $locale   = $main::locale;
 
   if ($form->{report_generator_csv_options_set}) {
     report_generator_do('CSV');
-    $lxdebug->leave_sub();
+    $main::lxdebug->leave_sub();
     return;
   }
 
-  my @form_values;
-  map { push @form_values, { 'key' => $_, 'value' => $form->{$_} } } keys %{ $form };
+  my @form_values = $form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $form });
 
   $form->{title} = $locale->text('CSV export -- options');
+
+  report_generator_setup_action_bar('csv');
+
   $form->header();
   print $form->parse_html_template('report_generator/csv_export_options', { 'HIDDEN' => \@form_values });
 
-  $lxdebug->leave_sub();
+  $main::lxdebug->leave_sub();
 }
 
 sub report_generator_back {
-  $lxdebug->enter_sub();
+  $main::lxdebug->enter_sub();
 
   report_generator_do('HTML');
 
-  $lxdebug->leave_sub();
+  $main::lxdebug->leave_sub();
 }
 
 sub report_generator_do {
-  $lxdebug->enter_sub();
+  $main::lxdebug->enter_sub();
 
   my $format  = shift;
 
+  my $form     = $main::form;
+  my $locale   = $main::locale;
+
   my $nextsub = $form->{report_generator_nextsub};
   if (!$nextsub) {
     $form->error($locale->text('report_generator_nextsub is not defined.'));
@@ -100,11 +157,14 @@ sub report_generator_do {
 
   call_sub($nextsub);
 
-  $lxdebug->leave_sub();
+  $main::lxdebug->leave_sub();
 }
 
 sub report_generator_dispatcher {
-  $lxdebug->enter_sub();
+  $main::lxdebug->enter_sub();
+
+  my $form     = $main::form;
+  my $locale   = $main::locale;
 
   my $nextsub = $form->{report_generator_dispatch_to};
   if (!$nextsub) {
@@ -115,7 +175,7 @@ sub report_generator_dispatcher {
 
   call_sub($nextsub);
 
-  $lxdebug->leave_sub();
+  $main::lxdebug->leave_sub();
 }
 
 1;