use Data::Dumper;
use List::Util qw(max);
+use Scalar::Util qw(blessed);
use Text::CSV_XS;
#use PDF::API2; # these two eat up to .75s on startup. only load them if we actually need them
#use PDF::Table;
use strict;
+use SL::Helper::GlAttachments qw(append_gl_pdf_attachments);
+use SL::Helper::CreatePDF qw(merge_pdfs);
# Cause locales.pl to parse these files:
# parse_html_template('report_generator/html_report')
while (my ($key, $value) = each %options) {
if ($key eq 'pdf_export') {
- map { $self->{options}->{pdf_export}->{$_} = $value->{$_} } keys %{ $value };
+ $self->{options}->{pdf_export}->{$_} = $value->{$_} for keys %{ $value };
+ } elsif ($key eq 'csv_export') {
+ $self->{options}->{csv_export}->{$_} = $value->{$_} for keys %{ $value };
} else {
$self->{options}->{$key} = $value;
}
}
if ($format eq 'html') {
+ my $content = $self->generate_html_content(%params);
my $title = $form->{title};
$form->{title} = $self->{title} if ($self->{title});
$form->header(no_layout => $params{no_layout});
$form->{title} = $title;
- print $self->generate_html_content();
+ print $content;
} elsif ($format eq 'csv') {
# FIXME: don't do mini http in here
}
sub prepare_html_content {
- my $self = shift;
+ my ($self, %params) = @_;
my ($column, $name, @column_headers);
'DATA_PRESENT' => $self->{data_present},
'CONTROLLER_DISPATCH' => $opts->{controller_class},
'TABLE_CLASS' => $opts->{table_class},
+ 'SKIP_BUTTONS' => !!$params{action_bar},
};
return $variables;
}
+sub create_action_bar_actions {
+ my ($self, $variables) = @_;
+
+ my @actions;
+ foreach my $type (qw(pdf csv)) {
+ next unless $variables->{"ALLOW_" . uc($type) . "_EXPORT"};
+
+ my $key = $variables->{CONTROLLER_DISPATCH} ? 'action' : 'report_generator_dispatch_to';
+ my $value = "report_generator_export_as_${type}";
+ $value = $variables->{CONTROLLER_DISPATCH} . "/${value}" if $variables->{CONTROLLER_DISPATCH};
+
+ push @actions, action => [
+ $type eq 'pdf' ? $::locale->text('PDF export') : $::locale->text('CSV export'),
+ submit => [ '#report_generator_form', { $key => $value } ],
+ ];
+ }
+
+ if (scalar(@actions) > 1) {
+ @actions = (
+ combobox => [
+ action => [ $::locale->text('Export') ],
+ @actions,
+ ],
+ );
+ }
+
+ return @actions;
+}
+
+sub setup_action_bar {
+ my ($self, $variables, %params) = @_;
+
+ my @actions = $self->create_action_bar_actions($variables);
+
+ if ($params{action_bar_setup_hook}) {
+ $params{action_bar_setup_hook}->(@actions);
+
+ } elsif (@actions) {
+ my $action_bar = blessed($params{action_bar}) ? $params{action_bar} : ($::request->layout->get('actionbar'))[0];
+ $action_bar->add(@actions);
+ }
+}
+
sub generate_html_content {
- my $self = shift;
- my $variables = $self->prepare_html_content();
+ my ($self, %params) = @_;
+
+ $params{action_bar} //= 1;
+
+ my $variables = $self->prepare_html_content(%params);
+
+ $self->setup_action_bar($variables, %params) if $params{action_bar};
my $stuff = $self->{form}->parse_html_template($self->{options}->{html_template}, $variables);
return $stuff;
foreach (0 .. $num_columns - 1) {
push @{ $cell_props_row }, { 'background_color' => '#666666',
- 'font_color' => '#ffffff',
+ # BUG PDF:Table -> 0.9.12:
+ # font_color is used in next row, so dont set font_color
+ # 'font_color' => '#ffffff',
'colspan' => $_ == 0 ? -1 : undef, };
}
}
my $content = $pdf->stringify();
+ $main::lxdebug->message(LXDebug->DEBUG2(),"addattachments ?? =".$form->{report_generator_addattachments}." GL=".$form->{GL});
+ if ($form->{report_generator_addattachments} && $form->{GL}) {
+ $content = $self->append_gl_pdf_attachments($form,$content);
+ }
+
my $printer_command;
if ($pdfopts->{print} && $pdfopts->{printer_id}) {
$form->{printer_id} = $pdfopts->{printer_id};