ActionBar: Unterstützung in ReportGenerator
[kivitendo-erp.git] / bin / mozilla / reportgenerator.pl
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 # Stuff that can be used from other modules
9 #
10 ######################################################################
11
12 use List::Util qw(max);
13
14 use SL::Form;
15 use SL::Common;
16 use SL::MoreCommon qw(restore_form save_form);
17 use SL::ReportGenerator;
18
19 use strict;
20
21 sub report_generator_set_default_sort {
22   $main::lxdebug->enter_sub();
23
24   my $form     = $main::form;
25
26   my $default_sortorder   = shift;
27   my $default_sortdir     = shift;
28
29   $form->{sort}         ||= $default_sortorder;
30   $form->{sortdir}        = $default_sortdir unless (defined $form->{sortdir});
31   $form->{sortdir}        = $form->{sortdir} ? 1 : 0;
32
33   $main::lxdebug->leave_sub();
34 }
35
36
37 sub report_generator_setup_action_bar {
38   my ($type, %params) = @_;
39
40   $::request->layout->get('actionbar')->add(
41     combobox => [
42       action => [
43         $type eq 'pdf' ? $::locale->text('PDF export') : $::locale->text('CSV export'),
44         submit => [ '#report_generator_form', { 'report_generator_dispatch_to' => "report_generator_export_as_${type}" } ],
45       ],
46       action => [
47         $::locale->text('PDF export with attachments'),
48         submit  => [ '#report_generator_form', { report_generator_dispatch_to => "report_generator_export_as_pdf", report_generator_addattachments => 1 } ],
49         only_if => $params{allow_attachments},
50       ],
51     ],
52     action => [
53       $::locale->text('Back'),
54       submit => [ '#report_generator_form', { 'report_generator_dispatch_to' => "report_generator_back" } ],
55     ],
56   );
57 }
58
59 sub report_generator_export_as_pdf {
60   $main::lxdebug->enter_sub();
61
62   my $form     = $main::form;
63   my %myconfig = %main::myconfig;
64   my $locale   = $main::locale;
65
66   if ($form->{report_generator_pdf_options_set}) {
67     my $saved_form = save_form();
68
69     report_generator_do('PDF');
70
71     if ($form->{report_generator_printed}) {
72       restore_form($saved_form);
73       $form->{MESSAGE} = $locale->text('The list has been printed.');
74       report_generator_do('HTML');
75     }
76
77     $main::lxdebug->leave_sub();
78     return;
79   }
80
81   my @form_values = $form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $form });
82
83   $form->get_lists('printers' => 'ALL_PRINTERS');
84   map { $_->{selected} = $myconfig{default_printer_id} == $_->{id} } @{ $form->{ALL_PRINTERS} };
85
86   $form->{copies} = max $myconfig{copies} * 1, 1;
87
88   my $allow_font_selection = 1;
89   eval { require PDF::API2; };
90   $allow_font_selection = 0 if ($@);
91
92   $form->{title} = $locale->text('PDF export -- options');
93
94   report_generator_setup_action_bar('pdf', allow_attachments => !!$form->{report_generator_hidden_l_attachments});
95
96   $form->header();
97   print $form->parse_html_template('report_generator/pdf_export_options', { 'HIDDEN'               => \@form_values,
98                                                                             'ALLOW_FONT_SELECTION' => $allow_font_selection, });
99
100   $main::lxdebug->leave_sub();
101 }
102
103 sub report_generator_export_as_csv {
104   $main::lxdebug->enter_sub();
105
106   my $form     = $main::form;
107   my $locale   = $main::locale;
108
109   if ($form->{report_generator_csv_options_set}) {
110     report_generator_do('CSV');
111     $main::lxdebug->leave_sub();
112     return;
113   }
114
115   my @form_values = $form->flatten_variables(grep { ($_ ne 'login') && ($_ ne 'password') } keys %{ $form });
116
117   $form->{title} = $locale->text('CSV export -- options');
118
119   report_generator_setup_action_bar('csv');
120
121   $form->header();
122   print $form->parse_html_template('report_generator/csv_export_options', { 'HIDDEN' => \@form_values });
123
124   $main::lxdebug->leave_sub();
125 }
126
127 sub report_generator_back {
128   $main::lxdebug->enter_sub();
129
130   report_generator_do('HTML');
131
132   $main::lxdebug->leave_sub();
133 }
134
135 sub report_generator_do {
136   $main::lxdebug->enter_sub();
137
138   my $format  = shift;
139
140   my $form     = $main::form;
141   my $locale   = $main::locale;
142
143   my $nextsub = $form->{report_generator_nextsub};
144   if (!$nextsub) {
145     $form->error($locale->text('report_generator_nextsub is not defined.'));
146   }
147
148   foreach my $key (split m/ +/, $form->{report_generator_variable_list}) {
149     $form->{$key} = $form->{"report_generator_hidden_${key}"};
150   }
151
152   $form->{report_generator_output_format} = $format;
153
154   delete @{$form}{map { "report_generator_$_" } qw(nextsub variable_list)};
155
156   call_sub($nextsub);
157
158   $main::lxdebug->leave_sub();
159 }
160
161 sub report_generator_dispatcher {
162   $main::lxdebug->enter_sub();
163
164   my $form     = $main::form;
165   my $locale   = $main::locale;
166
167   my $nextsub = $form->{report_generator_dispatch_to};
168   if (!$nextsub) {
169     $form->error($locale->text('report_generator_dispatch_to is not defined.'));
170   }
171
172   delete $form->{report_generator_dispatch_to};
173
174   call_sub($nextsub);
175
176   $main::lxdebug->leave_sub();
177 }
178
179 1;