From: Sven Schöling Date: Fri, 8 Feb 2008 13:58:57 +0000 (+0000) Subject: Einfachere sort_column und viiiel Doku. X-Git-Tag: release-2.6.0beta1~245 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=ee5d63a6e2b3ba0d962d64376623c26eacd393a5;p=kivitendo-erp.git Einfachere sort_column und viiiel Doku. --- diff --git a/SL/ReportGenerator.pm b/SL/ReportGenerator.pm index 988d295e6..701dca3ec 100644 --- a/SL/ReportGenerator.pm +++ b/SL/ReportGenerator.pm @@ -78,18 +78,8 @@ sub set_columns { 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 { @@ -793,3 +783,252 @@ sub generate_csv_content { } 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 '
'. 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 + +=head1 MODULE AUTHORS + +Moritz Bunkus Embunkus@linet-services.deE + +L