Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision ee5d63a6

Von Sven Schöling vor etwa 17 Jahren hinzugefügt

  • ID ee5d63a6e2b3ba0d962d64376623c26eacd393a5
  • Vorgänger 58a1b54b
  • Nachfolger cfbcb233

Einfachere sort_column und viiiel Doku.

Unterschiede anzeigen:

SL/ReportGenerator.pm
sub set_column_order {
my $self = shift;
my $order = 0;
my %columns = map { $order++; ($_, $order) } @_;
foreach my $column (sort keys %{ $self->{columns} }) {
next if $columns{$column};
$order++;
$columns{$column} = $order;
}
$self->{column_order} = [ sort { $columns{$a} <=> $columns{$b} } keys %columns ];
my %seen;
$self->{column_order} = [ grep { !$seen{$_}++ } @_, sort keys %{ $self->{columns} } ];
}
sub set_sort_indicator {
......
}
1;
__END__
=head1 NAME
SL::ReportGenerator.pm: the Lx-Office way of getting data in shape
=head1 SYNOPSIS
my $report = SL::ReportGenerator->new(\%myconfig, $form);
$report->set_options(%options); # optional
$report->set_columns(%column_defs);
$report->set_sort_indicator($column, $direction); # optional
$report->add_data($row1, $row2, @more_rows);
$report->generate_with_headers();
This creates a report object, sets a few columns, adds some data and generates a standard report.
Sorting of columns will be alphabetic, and options will be set to their defaults.
The report will be printed including table headers, html headers and http headers.
=head1 DESCRIPTION
Imagine the following scenario:
There's a simple form, which loads some data from the database, and needs to print it out. You write a template for it.
Then there may be more than one line. You add a loop in the template.
Then there are some options made by the user, such as hidden columns. You add more to the template.
Then it lacks usability. You want it to be able to sort the data. You add code for that.
Then there are too many results, you need pagination, you want to print or export that data..... and so on.
The ReportGenerator class was designed because this exact scenario happened about half a dozen times in Lx-Office.
It's purpose is to manage all those formating, culling, sorting, and templating.
Which makes it almost as complicated to use as doing the work for yourself.
=head1 FUNCTIONS
=over 4
=item new \%myconfig,$form,%options
Creates a new ReportGenerator object, sets all given options, and returns it.
=item set_columns @columns
Sets the columns available to this report.
=item set_column_order @columns
Sets the order of columns. Any columns not present here are appended in alphabetic order.
=item set_sort_indicator $column,$direction
Sets sorting ot the table by specifying a column and a direction, where the direction will be evaluated to ascending if true.
Note that this is only for displaying. The data has to be presented already sorted.
=item add_data \@data
=item add_data \%data
Adds data to the report. A given hash_ref is interpreted as a single line of data, every array_ref as a collection of lines.
Every line will be expected to be in a kay => value format. Note that this data has to be already sorted.
ReportGenerator does no sorting on its own, only provides links to sorting and visual cue as to which column was sorted by.
=item add_separator
Adds a separator line to the report.
=item add_control \%data
Adds a control element to the data. Control elements are an experimental feature to add functionality to a report the regular data cannot.
Every control element needs to set IS_CONTROL_DATA, in order to be recongnized by the template.
Currently the only control element is a colspan element, which can be used as a mini header further down the report.
=item clear_data
Deletes all data filled into the report, but keeps options set.
=item set_options %options
Sets options. For an incomplete list of options, see section configuration.
=item set_options_from_form
Tries to import options from the $form object given at creation
=item set_export_options $next_sub,@variable_list
Sets next_sub and additional variables needed for export.
=item get_attachment_basename
Returns the set attachment_basename option, or 'report' if nothing was set. See configuration for the option.
=item generate_with_headers
Parses the report, adds headers and prints it out. Headers depend on the option 'output_format',
for example 'HTML' will add proper table headers, html headers and http headers. See configuration for this option.
=item get_visible_columns $format
Returns a list of columns that will be visible in the report after considering all options or match the given format.
=item html_format $value
Escapes HTML characters in $value and substitutes newlines with '<br>'. Returns the escaped $value.
=item prepare_html_content $column,$name,@column_headers
Parses the data, and sets internal data needed for certain output format. Must be called once before the template is invoked.
Should not be called extrenally, since all render and generate functions invoke it anyway.
=item generate_html_content
The html generation function. Is invoked by generate_with_headers.
=item generate_pdf_content
The PDF generation function. Is invoked by the pdf render functions.
=item generate_csv_content
The CSV generation function. Uses XS_CSV to parse the information into csv.
=item render_pdf_with_pdf_api2
PDF render function. Uses PDF module.
=item render_pdf_with_html2ps
PDF render function. Uses html2ps to render.
=back
=head1 CONFIGURATION
These are known options and their defaults. Options for pdf export and csv export need to be set as a hashref inside the export option.
=head2 General Options
=over 4
=item std_column_visibility
Standard column visibility. Used if no visibility is set. Use this to save the trouble of enabling every column. Default is no.
=item output_format
Output format. Used by generate_with_headers to determine the format. Supported options are HTML, CSV, and PDF. Default is HTML.
=item allow_pdf_export
Used to determine if a button for PDF export should be displayed. Default is yes.
=item allow_csv_export
Used to determine if a button for CSV export should be displayed. Default is yes.
=item html_template
The template to be used for HTML reports. Default is 'report_generator/html_report'.
=item pdf_template
The template to be used for PDF reports. Default is 'report_generator/pdf_report'.
=back
=head2 PDF Options
=over 4
=item paper_size
Paper size. Default is a4.
=item orientation (landscape)
Landscape or portrait. Default is landscape.
=item font_name
Default is Verdana.
=item font_size
Default is 7.
=item margin_top
=item margin_left
=item margin_bottom
=item margin_right
Default all to 1.5.
=item number
Default is 1.
=item print
Print or not? Default is no.
=item printer_id
Default 0.
=item copies
Default 1.
=back
=head2 CSV Options
=over 4
=item quote_char
Character to enclose entries. Default is double quote (").
=item sep_char
Character to separate entries. Default is semicolon (;).
=item escape_char
Character to escape the quote_char. Default is souble quote (").
=item eol_style
End of line style. Default is Unix.
=item headers
Include headers? Default is yes.
=back
=head1 SEE ALO
C<Template.pm>
=head1 MODULE AUTHORS
Moritz Bunkus E<lt>mbunkus@linet-services.deE<gt>
L<http://linet-services.de>

Auch abrufbar als: Unified diff