Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / SL / Controller / Helper / ReportGenerator.pm
1 #=====================================================================
2 # LX-Office ERP
3 # Copyright (C) 2004
4 # Based on SQL-Ledger Version 2.1.9
5 # Web http://www.lx-office.org
6 ######################################################################
7 #
8 # Mixin for controllers to use ReportGenerator things
9 #
10 ######################################################################
11
12 use strict;
13
14 use List::Util qw(max);
15
16 use SL::Form;
17 use SL::Common;
18 use SL::MoreCommon;
19 use SL::ReportGenerator;
20
21 use Exporter 'import';
22 our @EXPORT = qw(
23   action_report_generator_export_as_pdf action_report_generator_export_as_csv
24   action_report_generator_back report_generator_do
25 );
26
27 sub action_report_generator_export_as_pdf {
28   my ($self) = @_;
29   if ($::form->{report_generator_pdf_options_set}) {
30     my $saved_form = save_form();
31
32     $self->report_generator_do('PDF');
33
34     if ($::form->{report_generator_printed}) {
35       restore_form($saved_form);
36       $::form->{MESSAGE} = $::locale->text('The list has been printed.');
37       $self->report_generator_do('HTML');
38     }
39
40     return;
41   }
42
43   my @form_values = $::form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $::form });
44
45   $::form->get_lists('printers' => 'ALL_PRINTERS');
46   map { $_->{selected} = $::myconfig{default_printer_id} == $_->{id} } @{ $::form->{ALL_PRINTERS} };
47
48   $::form->{copies} = max $::myconfig{copies} * 1, 1;
49   $::form->{title} = $::locale->text('PDF export -- options');
50   $::form->header;
51   print $::form->parse_html_template('report_generator/pdf_export_options', {
52     'HIDDEN'               => \@form_values,
53     'ALLOW_FONT_SELECTION' => SL::ReportGenerator->check_for_pdf_api, });
54 }
55
56 sub action_report_generator_export_as_csv {
57   my ($self) = @_;
58   if ($::form->{report_generator_csv_options_set}) {
59     $self->report_generator_do('CSV');
60     return;
61   }
62
63   my @form_values = $::form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $::form });
64
65   $::form->{title} = $::locale->text('CSV export -- options');
66   $::form->header;
67   print $::form->parse_html_template('report_generator/csv_export_options', { 'HIDDEN' => \@form_values });
68 }
69
70 sub action_report_generator_back {
71   $_[0]->report_generator_do('HTML');
72 }
73
74 sub report_generator_set_default_sort {
75   my ($default_sortorder, $default_sortdir) = @_;
76
77   $::form->{sort}         ||= $default_sortorder;
78   $::form->{sortdir}        = $default_sortdir unless (defined $::form->{sortdir});
79   $::form->{sortdir}        = $::form->{sortdir} ? 1 : 0;
80 }
81
82 sub report_generator_do {
83   my ($self, $format)  = @_;
84
85   my $nextsub = $::form->{report_generator_nextsub};
86   if (!$nextsub) {
87     $::form->error($::locale->text('report_generator_nextsub is not defined.'));
88   }
89
90   foreach my $key (split m/ +/, $::form->{report_generator_variable_list}) {
91     $::form->{$key} = $::form->{"report_generator_hidden_${key}"};
92   }
93
94   $::form->{report_generator_output_format} = $format;
95
96   delete @{$::form}{map { "report_generator_$_" } qw(nextsub variable_list)};
97
98   $self->_run_action($nextsub);
99 }
100
101 1;