X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FReportGenerator.pm;h=cdcf18fabf782b1ed376790e7db7b2b4653acf1c;hb=7ac8941d2b0610a403df0f4650e77df31176716c;hp=8f1838533d873ac8dd3ef583846bee6c80a7bf65;hpb=9f7dadd9c6decf19952ac14565c170f0b124fc98;p=kivitendo-erp.git diff --git a/SL/ReportGenerator.pm b/SL/ReportGenerator.pm index 8f1838533..cdcf18fab 100644 --- a/SL/ReportGenerator.pm +++ b/SL/ReportGenerator.pm @@ -46,6 +46,8 @@ sub new { 'variable_list' => '', }; + $self->{data_present} = 0; + $self->set_options(@_) if (@_); return bless $self, $type; @@ -93,18 +95,35 @@ sub add_data { my $last_row_set; while (my $arg = shift) { + my $row_set; + if ('ARRAY' eq ref $arg) { - push @{ $self->{data} }, $arg; - $last_row_set = $arg; + $row_set = $arg; } elsif ('HASH' eq ref $arg) { - my $row_set = [ $arg ]; - push @{ $self->{data} }, $row_set; - $last_row_set = $row_set; + $row_set = [ $arg ]; } else { $self->{form}->error('Incorrect usage -- expecting hash or array ref'); } + + my @columns_with_default_alignment = grep { defined $self->{columns}->{$_}->{align} } keys %{ $self->{columns} }; + + foreach my $row (@{ $row_set }) { + foreach my $column (@columns_with_default_alignment) { + $row->{$column} ||= { }; + $row->{$column}->{align} = $self->{columns}->{$column}->{align} unless (defined $row->{$column}->{align}); + } + + foreach my $field (qw(data link)) { + map { $row->{$_}->{$field} = [ $row->{$_}->{$field} ] if (ref $row->{$_}->{$field} ne 'ARRAY') } keys %{ $row }; + } + } + + push @{ $self->{data} }, $row_set; + $last_row_set = $row_set; + + $self->{data_present} = 1; } return $last_row_set; @@ -116,10 +135,18 @@ sub add_separator { push @{ $self->{data} }, { 'type' => 'separator' }; } +sub add_control { + my $self = shift; + my $data = shift; + + push @{ $self->{data} }, $data; +} + sub clear_data { my $self = shift; - $self->{data} = []; + $self->{data} = []; + $self->{data_present} = 0; } sub set_options { @@ -244,9 +271,11 @@ sub prepare_html_content { foreach my $row_set (@{ $self->{data} }) { if ('HASH' eq ref $row_set) { my $row_data = { - 'IS_CONTROL' => 1, - 'IS_SEPARATOR' => $row_set->{type} eq 'separator', - 'NUM_COLUMNS' => scalar @visible_columns, + 'IS_CONTROL' => 1, + 'IS_SEPARATOR' => $row_set->{type} eq 'separator', + 'IS_COLSPAN_DATA' => $row_set->{type} eq 'colspan_data', + 'NUM_COLUMNS' => scalar @visible_columns, + 'data' => $row_set->{data}, }; push @rows, $row_data; @@ -259,7 +288,16 @@ sub prepare_html_content { foreach my $row (@{ $row_set }) { $inner_idx++; - map { $row->{$_}->{data} = $self->html_format($row->{$_}->{data}) } @visible_columns; + foreach my $col_name (@visible_columns) { + my $col = $row->{$col_name}; + $col->{CELL_ROWS} = [ ]; + foreach my $i (0 .. scalar(@{ $col->{data} }) - 1) { + push @{ $col->{CELL_ROWS} }, { + 'data' => $self->html_format($col->{data}->[$i]), + 'link' => $col->{link}->[$i], + }; + }; + } my $row_data = { 'COLUMNS' => [ map { $row->{$_} } @visible_columns ], @@ -287,13 +325,14 @@ sub prepare_html_content { 'RAW_BOTTOM_INFO_TEXT' => $opts->{raw_bottom_info_text}, 'ALLOW_PDF_EXPORT' => $allow_pdf_export, 'ALLOW_CSV_EXPORT' => $opts->{allow_csv_export}, - 'SHOW_EXPORT_BUTTONS' => $allow_pdf_export || $opts->{allow_csv_export}, + 'SHOW_EXPORT_BUTTONS' => ($allow_pdf_export || $opts->{allow_csv_export}) && $self->{data_present}, 'COLUMN_HEADERS' => \@column_headers, 'NUM_COLUMNS' => scalar @column_headers, 'ROWS' => \@rows, 'EXPORT_VARIABLES' => \@export_variables, 'EXPORT_VARIABLE_LIST' => $self->{export}->{variable_list}, 'EXPORT_NEXTSUB' => $self->{export}->{nextsub}, + 'DATA_PRESENT' => $self->{data_present}, }; return $variables; @@ -303,7 +342,7 @@ sub generate_html_content { my $self = shift; my $variables = $self->prepare_html_content(); - return $self->{form}->parse_html_template('report_generator/html_report', $variables); + return $self->{form}->parse_html_template2('report_generator/html_report', $variables); } sub verify_paper_size { @@ -458,8 +497,11 @@ sub generate_csv_content { foreach my $row_set (@{ $self->{data} }) { next if ('ARRAY' ne ref $row_set); foreach my $row (@{ $row_set }) { - map { $row->{$_}->{data} =~ s/\r?\n/$eol/g } @visible_columns; - $csv->print($stdout, [ map { $row->{$_}->{data} } @visible_columns ]); + my @data; + foreach my $col (@visible_columns) { + push @data, join($eol, map { s/\r?\n/$eol/g; $_ } @{ $row->{$col}->{data} }); + } + $csv->print($stdout, \@data); } } }